meta_ws使用教程

一、背景

針對目前各項目代碼結構混亂,導致維護難,他人拒絕接收的問題,本人制定出適合本公司現有的JavaWeb技術架構,整理出一個標準的架構。

二、目標

讓開發人員只需關注業務邏輯的實現

三、技術框架

  1. 基於Jdk1.8

  2. Web控制器Jersey2.25.1

  3. Spring4.3.11管理javaBean,持久層mybatis3.4.2

  4. 已經配置好常用的相關db:MySQL5.7.19、Elasticsearch5.5.3、MongoDB3.4.6、Redis3.2.10

  5. 第三方工具:Guava23.0,Gson2.8.1

  6. 基於Jersey Client封裝的HttpUtils(調用http接口),基於guava Cache封裝的CacheUtils(緩存使用),基於gson封裝的JsonUtils(序列化json)

  7. API生成框架Jeresey Swagger

四、主要體現

  1. 異常的統一處理,讓開發人員只需注重業務邏輯的實現,該拋異常的地方,不要上來就是超大的try-catch

  2. 針對elasticsearch、redis、mongo這些稍微複雜的配置,已經全部放在java代碼中配置(ConfigBeans.java),用起來簡單易懂。另外還附贈一個針對本公司的一個elasticsearch搜索解析器(EsParser.java)

  3. 直接Jersey-Swagger的集成使得restful接口文檔很是方便的生成,以便前後端調試接口

  4. 針對java後端調用http請求的,本人基於Jersey Client封裝成了一個方便簡單易用的HttpUtils

  5. 針對非持久的緩存,本人基於guava cache封裝了一個簡單易用的CacheUtils

  6. 其它還有事務、aop等配置,全是基於註解的方式,使得開發變得更加快速高效

五、使用步驟

  1. 與CVS斷開連接,修改項目名稱

    • 必須】右鍵meta_ws,依次選擇Team -> Disconnect… -> Also Delete the CVS meta infomation from the file system -> Yes
    • 必須】右鍵meta_ws,依次選擇Refactor -> Rename… -> OK
  2. 修改meta_ws.properties及com.hiekn.meta.app.App.java中相關配置項

    • 必須】base.package=com.hiekn.meta:Jersey與Swagger的掃描註解的基礎路徑
    • swagger.init=true:是否初始化Swagger
    • swagger.version=1.0.0:API的版本號
    • 必須】swagger.title=metaProject API:API的名稱
    • 必須】swagger.host=192.168.1.119:8080:Swagger訪問接口的host
    • 必須】swagger.base.path=/meta_ws/api:Swagger訪問接口的基礎路徑
說明:
    如果修改了servlet攔截基礎路徑即註解@ApplicationPath中的值,請同時修改swagger.base.path的值,
    例如:將其值改爲"/*",則swagger.base.path=/meta_ws
  1. 修改applicationContext.xml中相關配置
    • context:property-placeholder:該標籤時初始化數據庫配置文件,spring文件中只能有一個該標籤,文件名db.properties一般不用改,但是裏面的配置項得結合項目作相應的更改。如何讀取這些屬性值,請參考com.hiekn.meta.config.ConfigBeans.java
    • util:properties :該標籤是初始化項目相關的屬性文件,該標籤可以有多個。如何讀取這些屬性值,請參考com.hiekn.meta.config.CommonResource.java。請接合項目修改文件名稱
    • 必須】context:component-scan ,請修改base-package的值,該路徑下的註解會被spring識別。
    • 必須】sqlSessionFactory中mapperLocations中的值爲mybatis的*mapper.xml中的位置,請結合項目作相應修改。
說明:
    如果該mapper.xml文件與mapper接口文件在同一個包下,該屬性可以去掉
    如果有多個mapper.xml路徑,可以配置爲數組形式
  • 必須】org.mybatis.spring.mapper.MapperScannerConfigurer中basePackage中的值爲*mapper.java接口的位置,請結合項目作相應修改。同時得修改mapper文件中的namespace!

  • 必須】txManager,tx:annotation-driven ,txAdvice爲事務相關配置,不需要的可以全部去掉

  • 必須】aop:config ,aop:aspectj-autoproxye爲aop相關配置,不需要的可以全部去掉

    1. 修改pom.xml相關配置
  • 必須】結合項目修改groupId以及artifactId
  • 必須】如果不需要elasticsearch或者redis或者mongo,可以去掉ConfigBeans.java中相關配置同時去掉pom中引用的jar包
說明:
    如果全都不需要,可以刪掉該文件亦可以去掉註解@Configuration
  1. 修改日誌相關配置
    • 必須】修改log4j.properties和log4j2.xml中日誌文件名和路徑
將兩個日誌文件中的將meta_ws改成項目相應的即可
  • 保留log4j.properties是因爲一些老的框架還在使用,而我們自己的代碼,統一使用log4j2.xml
  • 必須】開發時禁用System.out.println(),請用log4j2代替,請參考com.hiekn.meta.service.impl.UserServcieImpl.java
  • 必須】若部署到生產環境,請將log4j2.xml中Console標籤下的ThresholdFilter標籤中的level屬性值改爲error
  • 設置第三方框架日誌的級別,請直接參考log4j2.xml

    1. 單元測試
  • 必須】若沒有使用事務請將com.hiekn.meta.test.TestBase.java文件中@Transactional去掉
  • 必須】TestBase是基礎,主要是初始化springjunit的,以便可以使用spring相關注解,所以不要在這裏寫測試代碼
  • 必須】具體業務代碼測試請參考com.hiekn.meta.test.UserServiceTest.java

    1. 其它
  • 【推薦】可以將建表語句統一放在/src/main/resources/meta.sql(文件名結合項目作修改),以便數據庫的維護
  • 必須】異常定義請參考com.hiekn.meta.bean.result.ErrorCode.java,統一異常處理請參考com.hiekn.demo.exception.ExceptionHandler.java
  • 必須】service接口寫法請參考com.hiekn.meta.service.UserService.java及實現,rest接口寫法請參考com.hiekn.meta.rest.UserRestApi.java

六、注意事項

  1. 必須】使用meta_ws請務必按照結構來寫,就拿SqlSession來說,官方的建議是開發人員直接使用Mapper接口映射dao,不用自己去實現dao。每個線程都應該有它自己的SqlSession實例。SqlSession的實例不能共享使用,它也是線程不安全的。因此最佳的範圍是請求或方法範圍。絕對不能將SqlSession實例的引用放在一個類的靜態字段或實例字段中。
  2. 必須】業務bean的注入請嚴格按照基於接口的形式,不要基於類的形式

七、Question

  1. 爲什麼要用斷言做單元測試?
  2. 開發時爲什麼要用log4j2替代System.out.println(“”)打印調式?
  3. log4j裏使用系統屬性catalina.base的好處是什麼?
  4. 在com.hiekn.meta.config.ConfigBeans.java中使用註解@Lazy有什麼好處?
  5. 在com.hiekn.meta.test.TestBase.java中使用@Transactional作用是什麼?
  6. spring動態代理有幾種?區別又是什麼?
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章