使用快嘉框架开发项目示例
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
開發(fā)前準(zhǔn)備
- 在本機(jī)配置好快嘉框架,參考快嘉框架v1.3更新及使用手冊(cè)
- 開發(fā)工具及安裝規(guī)劃,參考開發(fā)工具及安裝規(guī)劃
將快嘉demo導(dǎo)入eclipse,調(diào)試demo-Rest和demo-batch
eclipse導(dǎo)入快嘉框架代碼
選擇existing maven projects
選擇快嘉框架源碼目錄,不要導(dǎo)入base和bundle模塊
導(dǎo)入eclipse后,項(xiàng)目視圖大概如下所示,maven工程需要時(shí)間較長,請(qǐng)等待
maven工程全部導(dǎo)入后,整個(gè)eclipse視圖大概如下所示
有個(gè)插件用法的錯(cuò)誤提示,不用管它,點(diǎn)“resovled all later” 按鈕,彈出界面如下,點(diǎn)“OK”按鈕關(guān)閉掉。
eclipse調(diào)試demo-Rest
如果沒啥問題,正常顯示如下
有可能會(huì)出如下問題
這個(gè)是eclipse工作空間下的demo-Rest部署目錄(一般是${eclipseWorkspace}.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\demo-Rest\WEB-INF)沒有同步更新web.xml導(dǎo)致,我理解是eclipse的maven插件對(duì)profile的支持還沒有很完善,按照以下方法處理就可以了,處理完后能持續(xù)用好長一段時(shí)間,這個(gè)問題在調(diào)試的過程中可能還會(huì)出現(xiàn),出現(xiàn)一次處理一次就好了。
源碼目錄demo/Rest/Main下執(zhí)行“mvn clean package -Pnocheck,local”后,target目錄下會(huì)生成demo-Rest目錄,將demo-Rest\WEB-INF\web.xml替換掉${eclipseWorkspace}.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\demo-Rest\WEB-INF\web.xml后,重啟eclipse中的tomcat即可。
eclipse調(diào)試demo-batch
在demo-batch工程里打開com.fastjrun.demo.BatchInit類,該參數(shù)提供了main函數(shù)
配置運(yùn)行參數(shù)
點(diǎn)“Run”按鈕
確保兩個(gè)任務(wù)正常執(zhí)行
用法:接口變化
#### 在demo_user.xml中新增退出接口定義,在name為userServiceRest的節(jié)點(diǎn)下新增名為logout的method節(jié)點(diǎn)
2、logout的method節(jié)點(diǎn)定義如下
3、在快嘉源碼目錄下執(zhí)行如下命令,重新生成Bundle代碼,并發(fā)布demo-bundle.jar到本地倉庫
cd demo mvn clean install -Pnocheck -pl Bundle4、在demo-service-impl工程上執(zhí)行Maven->>update project…
5、執(zhí)行完后,demo-service-impl工程下的UserServiceImpl報(bào)錯(cuò),出錯(cuò)信息和解決方法如截圖所示
6、我們?cè)赨serServiceImpl重載logout方法如下
7、做單元測(cè)試,單元測(cè)試類(src/test/java/com/fastjrun/demo/service/impl/UserServiceRestImplTeset.java)
先執(zhí)行登錄的單元測(cè)試用例testLogin
記錄下成功后的uuid:1b633c6889ec451eb0f00d63c7244177 再執(zhí)行登出的單元測(cè)試用例testlogout
執(zhí)行結(jié)果如下
8、單元測(cè)試完成后,參考快嘉框架v1.3使用手冊(cè)重新生成demo-Rest.war,新的war中提供了這次將提供了退出接口的服務(wù),這里筆者不再贅述如何用postman來測(cè)試驗(yàn)證,請(qǐng)讀者自行實(shí)踐。
至此,一個(gè)接口如何增加的例子就講完了,這個(gè)接口確實(shí)復(fù)用了自動(dòng)登錄接口中用到的核心服務(wù)CoreUserService提供的logout方法,所以實(shí)現(xiàn)起來很快;但即使沒有這個(gè)可復(fù)用的方法,重頭寫起工作量應(yīng)該也不會(huì)很大,總之,接口新增、修改、版本升級(jí)我們都可以在這個(gè)demo_user.xml文件進(jìn)行,然后再去調(diào)整因?yàn)檎{(diào)整這個(gè)文件后導(dǎo)致的實(shí)現(xiàn)類的變化即可。
用法二:表結(jié)構(gòu)變化
這里需要維護(hù)的是pdm文件,pdm文件變化后,在快嘉源碼目錄下執(zhí)行如下命令,將會(huì)重新生成Base代碼,并發(fā)布demo-base.jar到本地倉庫
cd demo mvn clean install -Pnocheck -pl BaseBase模塊中的代碼都是對(duì)應(yīng)于數(shù)據(jù)庫單表的實(shí)體bean和基于該實(shí)體bean的增刪改查的基本操作類,這里貼一份BaseUserDaoTest.java代碼,大家可以參考這份代碼研究一下Base中實(shí)體bean的基本操作類的相關(guān)用法
public class BaseUserDaoTest extends BaseSpringTestNGTest {@AutowiredBaseUserDao baseUserDao;@Testpublic void testInsert() {User user = new User();String curTime = TimeHelper.getCurrentTime(TimeHelper.DF17);Timestamp curDate = new Timestamp(System.currentTimeMillis());user.setCreateTime(curDate);user.setEmail("sa4@fastjrun.org");user.setLastLoginTime(curTime);user.setLastModifyTime(curDate);user.setLoginErrCount(0);user.setLoginName("sa3");user.setLoginPwd("1234566777");user.setMobileNo("03211111112");user.setNickName("sa3");user.setSex(2);user.setStatus("1");baseUserDao.insert(user);}@Testpublic void testSelectById() {User user = baseUserDao.selectById(38);log.info(user);}@Testpublic void testUpdateById() {User user = baseUserDao.selectById(38);log.info(user);Timestamp curDate = new Timestamp(System.currentTimeMillis());user.setCreateTime(curDate);user.setLastModifyTime(curDate);baseUserDao.updateById(user);User user2 = baseUserDao.selectById(38);log.info(user2);}@Testpublic void testDeleteById() {User user = baseUserDao.selectById(38);log.info(user);int res = baseUserDao.deleteById(1);log.info(res);User user2 = baseUserDao.selectById(1);log.info(user2);}@Testpublic void testTotalCount() {int res = baseUserDao.totalCount();log.info(res);}@Testpublic void testQueryForList() {List<User> list = baseUserDao.queryForList();if (list != null) {Iterator<User> itera = list.iterator();while (itera.hasNext()) {log.info(itera.next());}}}@Testpublic void testQueryForLimitList() {RowBounds rowBounds = new RowBounds(2, 4);List<User> list = baseUserDao.queryForLimitList(rowBounds);if (list != null) {Iterator<User> itera = list.iterator();while (itera.hasNext()) {log.info(itera.next());}}}@Testpublic void testTotalCountCondition() {int res = baseUserDao.totalCountCondition(" and sex =1");log.info(res);}@Testpublic void testQueryForListCondition() {List<User> list = baseUserDao.queryForListCondition(" and sex =0");if (list != null) {Iterator<User> itera = list.iterator();while (itera.hasNext()) {log.info(itera.next());}}}@Testpublic void testQueryForLimitListCondition() {RowBounds rowBounds = new RowBounds(2, 4);List<User> list = baseUserDao.queryForLimitListCondition(" and sex =1",rowBounds);if (list != null) {Iterator<User> itera = list.iterator();while (itera.hasNext()) {log.info(itera.next());}}list = baseUserDao.queryForLimitListCondition(" and sex =0",rowBounds);if (list != null) {Iterator<User> itera = list.iterator();while (itera.hasNext()) {log.info(itera.next());}}}@Testpublic void testQueryForListConditionMul() {final RowBounds rowBounds = new RowBounds(2, 4);final Semaphore semaphore = new Semaphore(3);ExecutorService executorService = Executors.newCachedThreadPool();List<Future<Boolean>> resultList = new ArrayList<Future<Boolean>>();for (int i = 0; i < 1000; i++) {try {semaphore.acquire();} catch (InterruptedException e1) {log.warn("can't acquire semaphore", e1);continue;}Callable<Boolean> run = new Callable<Boolean>() {public Boolean call() {try {testCondition(rowBounds);} catch (Exception e) {log.warn("BatchInsert Task for", e);} finally {// 訪問完后,釋放semaphore.release();}return true;}};Future<Boolean> future = executorService.submit(run);resultList.add(future);}Boolean isFinished = false;while (!isFinished) {for (Future<Boolean> fs : resultList) {try {isFinished = !isFinished && fs.get();log.debug(isFinished);if (!isFinished) {resultList.remove(fs);break;}} catch (InterruptedException e) {e.printStackTrace();} catch (ExecutionException e) {e.printStackTrace();}}}}private void testCondition(RowBounds rowBounds) {List<User> list = baseUserDao.queryForLimitListCondition(" and sex =0",rowBounds);if (list != null) {Iterator<User> itera = list.iterator();while (itera.hasNext()) {log.info(itera.next());}}}}轉(zhuǎn)載于:https://my.oschina.net/fastjrun/blog/888222
總結(jié)
以上是生活随笔為你收集整理的使用快嘉框架开发项目示例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【转载】设计模式_六大原则(学习)
- 下一篇: 网络爬虫(2)-- Java爬虫框架