日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用快嘉框架开发项目示例

發布時間:2025/4/5 编程问答 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用快嘉框架开发项目示例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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節點定義如下

<method name="logout" version="" path="logout" remark="登出"><request><object name="head" new="false"class="com.fastjrun.packet.BaseRestRequestHead"></object><object name="body" new="true"class="packet.user.LogoutRestRequestBody"><field name="uuid" dataType="java.lang.String" length="64"canBeNull="false" remark="登錄憑證" /></object></request><response><object name="head" new="false"class="com.fastjrun.packet.BaseRestResponseHead"></object></response> </method>

3、在快嘉源碼目錄下執行如下命令,重新生成Bundle代碼,并發布demo-bundle.jar到本地倉庫

cd demo mvn clean install -Pnocheck -pl Bundle

4、在demo-service-impl工程上執行Maven->>update project…

5、執行完后,demo-service-impl工程下的UserServiceImpl報錯,出錯信息和解決方法如截圖所示
6、我們在UserServiceImpl重載logout方法如下

@Override public BaseRestResponse<BaseRestDefaultResponseBody> logout(BaseRestRequest<LogoutRestRequestBody> request) {String uuid=request.getBody().getUuid(); String deviceId = request.getHead().getDeviceId();this.coreUserService.logOut(uuid, deviceId); return RestResponseHelper.getSuccessResult(); }

7、做單元測試,單元測試類(src/test/java/com/fastjrun/demo/service/impl/UserServiceRestImplTeset.java)
先執行登錄的單元測試用例testLogin

記錄下成功后的uuid:1b633c6889ec451eb0f00d63c7244177 再執行登出的單元測試用例testlogout

@Test public void testLogout() {BaseRestRequest<LogoutRestRequestBody> request = new BaseRestRequest<LogoutRestRequestBody>();BaseRestRequestHead head = new BaseRestRequestHead();LogoutRestRequestBody body = new LogoutRestRequestBody();body.setUuid("1b633c6889ec451eb0f00d63c7244177");String deviceId = "servicetest";head.setDeviceId(deviceId);request.setHead(head);request.setBody(body);BaseRestResponse<BaseRestDefaultResponseBody> result = userServiceRest.logout(request);JSONObject jsonObject = JSONObject.fromObject(result);log.info(jsonObject);}

執行結果如下

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 Base

Base模塊中的代碼都是對應于數據庫單表的實體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

總結

以上是生活随笔為你收集整理的使用快嘉框架开发项目示例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。