使用快嘉框架开发项目示例
2019獨角獸企業重金招聘Python工程師標準>>>
開發前準備
- 在本機配置好快嘉框架,參考快嘉框架v1.3更新及使用手冊
- 開發工具及安裝規劃,參考開發工具及安裝規劃
將快嘉demo導入eclipse,調試demo-Rest和demo-batch
eclipse導入快嘉框架代碼
選擇existing maven projects
選擇快嘉框架源碼目錄,不要導入base和bundle模塊
導入eclipse后,項目視圖大概如下所示,maven工程需要時間較長,請等待
maven工程全部導入后,整個eclipse視圖大概如下所示
有個插件用法的錯誤提示,不用管它,點“resovled all later” 按鈕,彈出界面如下,點“OK”按鈕關閉掉。
eclipse調試demo-Rest
如果沒啥問題,正常顯示如下
有可能會出如下問題
這個是eclipse工作空間下的demo-Rest部署目錄(一般是${eclipseWorkspace}.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\demo-Rest\WEB-INF)沒有同步更新web.xml導致,我理解是eclipse的maven插件對profile的支持還沒有很完善,按照以下方法處理就可以了,處理完后能持續用好長一段時間,這個問題在調試的過程中可能還會出現,出現一次處理一次就好了。
源碼目錄demo/Rest/Main下執行“mvn clean package -Pnocheck,local”后,target目錄下會生成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調試demo-batch
在demo-batch工程里打開com.fastjrun.demo.BatchInit類,該參數提供了main函數
配置運行參數
點“Run”按鈕
確保兩個任務正常執行
用法:接口變化
#### 在demo_user.xml中新增退出接口定義,在name為userServiceRest的節點下新增名為logout的method節點
2、logout的method節點定義如下
3、在快嘉源碼目錄下執行如下命令,重新生成Bundle代碼,并發布demo-bundle.jar到本地倉庫
cd demo mvn clean install -Pnocheck -pl Bundle4、在demo-service-impl工程上執行Maven->>update project…
5、執行完后,demo-service-impl工程下的UserServiceImpl報錯,出錯信息和解決方法如截圖所示
6、我們在UserServiceImpl重載logout方法如下
7、做單元測試,單元測試類(src/test/java/com/fastjrun/demo/service/impl/UserServiceRestImplTeset.java)
先執行登錄的單元測試用例testLogin
記錄下成功后的uuid:1b633c6889ec451eb0f00d63c7244177 再執行登出的單元測試用例testlogout
執行結果如下
8、單元測試完成后,參考快嘉框架v1.3使用手冊重新生成demo-Rest.war,新的war中提供了這次將提供了退出接口的服務,這里筆者不再贅述如何用postman來測試驗證,請讀者自行實踐。
至此,一個接口如何增加的例子就講完了,這個接口確實復用了自動登錄接口中用到的核心服務CoreUserService提供的logout方法,所以實現起來很快;但即使沒有這個可復用的方法,重頭寫起工作量應該也不會很大,總之,接口新增、修改、版本升級我們都可以在這個demo_user.xml文件進行,然后再去調整因為調整這個文件后導致的實現類的變化即可。
用法二:表結構變化
這里需要維護的是pdm文件,pdm文件變化后,在快嘉源碼目錄下執行如下命令,將會重新生成Base代碼,并發布demo-base.jar到本地倉庫
cd demo mvn clean install -Pnocheck -pl BaseBase模塊中的代碼都是對應于數據庫單表的實體bean和基于該實體bean的增刪改查的基本操作類,這里貼一份BaseUserDaoTest.java代碼,大家可以參考這份代碼研究一下Base中實體bean的基本操作類的相關用法
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());}}}}轉載于:https://my.oschina.net/fastjrun/blog/888222
總結
以上是生活随笔為你收集整理的使用快嘉框架开发项目示例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【转载】设计模式_六大原则(学习)
- 下一篇: FileInputStream、File