該項目是一整套整合 Dubbo+Zookeeper+SpringMVC+Spring+MyBatis 支持分布式的高效率便捷開發(fā)RPC框架,使開發(fā)人員更專注于業(yè)務(wù),達到面向業(yè)務(wù)開發(fā)。
項目使用 Maven 構(gòu)建,便于項目管理,可支持 Oracle、MySql 等主流數(shù)據(jù)庫。
項目模塊化分層明確,代碼規(guī)范,便于后期維護等工作。
前端展示界面采用基于 Boostrap 實現(xiàn)的響應(yīng)式布局,并集成了一系列的動畫效果插件,整體界面簡潔、美觀大方并可優(yōu)雅的與后臺完成交互操作。
項目目標是為中小型企業(yè)打造全方位的J2EE企業(yè)級開發(fā)解決方案,提高工作效率。
該項目是yan-demo單節(jié)點項目的升級版,支持分布式,持續(xù)更新中,敬請期待...
近期更新內(nèi)容
- beta 1.0.0:項目整體改造,升級為RPC架構(gòu)。(注:若想查看非RPC版請移步至https:///micyo202/yan)
- beta 0.1.0:模塊優(yōu)化,刪除不必要的模塊,優(yōu)化代碼(模塊詳情參考:三、項目結(jié)構(gòu))
- beta 0.0.5:前端添加ECharts,便于圖形化展示
- beta 0.0.4:添加JMS(ActiveMQ)消息服務(wù)(目前僅測試方法,暫無業(yè)務(wù)流轉(zhuǎn),后期逐漸完善細化)
- beta 0.0.3:添加Solr搜索引擎服務(wù)(基本的全文檢索功能,可根據(jù)實際需求情況進行二次開發(fā),后期本人再逐漸完善)
- beta 0.0.2:優(yōu)化整體代碼、添加更多注釋,結(jié)構(gòu)更清晰、代碼更易懂
- beta 0.0.1:將原有yan-demo項目重構(gòu),保留原有功能,模塊拆分、優(yōu)化項目結(jié)構(gòu)
項目所需工具及版本 *
一、項目開發(fā)環(huán)境&工具(Environment&Tools)
- MacOS Sierra / Windows 7
- MySql 5.7
- JDK 1.8
- CentOS 7
- IntelliJ IDEA 2017.2.5 / Eclipse 4.6.1
- Navicat Premium 11.1.12
- Maven 3.3.9
- Jetty 9.4.6.v20170531 / Tomcat 9.0.1
二、技術(shù)選型(Technology)
1.服務(wù)端技術(shù)(Server)
2.前端技術(shù)(Web)
三、項目結(jié)構(gòu)(Construction)
四、項目入門(Introduction)
- 下載項目,并且導(dǎo)入到IDE開發(fā)工具中(建議使用:IntelliJ IDEA)
- 使用 Maven 構(gòu)建項目
- 創(chuàng)建數(shù)據(jù)庫并執(zhí)行 yan-dao 模塊中 resources/database 路徑下的 yan.sql文件,創(chuàng)建整個項目必要的表(如:用戶表、資源表、日志記錄表等...)
- 分別修改 yan-dao、yan-service、yan-web 模塊中 resources/properties路徑下的 *.properties 配置文件(具體修改方法及對應(yīng)屬性解釋,詳見 - 五、配置說明)
- 完成以上步驟就可以正常部署啟動服務(wù)了:
a). 啟動 zookeeper 服務(wù)(必要服務(wù),不啟動該服務(wù)導(dǎo)致項目無法正常運行)
b). 啟動 activemq 服務(wù)(非必要服務(wù),若不啟動該服務(wù),則項目運行中會有jms監(jiān)聽器異常,但不影響整體能)
c). 啟動 solr 服務(wù)(非必要服務(wù),若不啟動該服務(wù),則搜索引擎無法使用,但不影響整體功能)
[以上服務(wù)具體配置及啟動命令,這里我不多做闡述了,不知道的可自行百度搜索] - 啟動完以上基礎(chǔ)的服務(wù)后,就可以運行項目了
a). 首先啟動 yan-service,直接運行該模塊中的 com.yan.service.ServiceApp.main() 方法來啟動
b). 其次啟動 yan-web ,可(使用 jetty / tomcat 均可)[詳細部署過程在這里就不多做闡述了],啟動成功后即可訪問web應(yīng)用界面。接下來進入開發(fā)階段 - 根據(jù)實際業(yè)務(wù)需求,在對應(yīng)的數(shù)據(jù)庫中創(chuàng)建業(yè)務(wù)表,表命名規(guī)范:“模塊名_表名” 如:SYS_RESOURCE(系統(tǒng)模塊資源表)
- 修改 yan-dao 模塊中 resources 路徑下的 generatorConfig.xml 中的 targetPackage 包名及 tableName 表名,使用 MyBatis generator 插件生成對應(yīng)的持久層模塊代碼(Maven 執(zhí)行命令:mvn mybatis-generator:generate),具體配置請參考MyBatis GeneratorXML Configuration
- 在 yan-api 模塊中 src/main/java 路徑下創(chuàng)建對應(yīng)的接口
- 在 yan-service 模塊中 src/main/java 路徑下創(chuàng)建對應(yīng)的接口服務(wù)實現(xiàn)類,并在 src/main/resources/META-INF/spring 路徑下的 spring-dubbo-provider.xml 配置中添加聲明暴露對應(yīng)服務(wù)接口
- 在 yan-web 模塊中 src/main/java 路徑下創(chuàng)建對應(yīng)的 controller 控制器,該控制器類命名規(guī)范以 Controller 結(jié)尾,繼承 BaseController 類,編寫 controller 控制器業(yè)務(wù)處理代碼(具體使用參考 - 七、示例代碼),并在 src/main/resources/spring/config 路徑下的 spring-dubbo-customer.xml 配置中添加聲明暴露對應(yīng)服務(wù)接口
- 在 yan-web 模塊中 src/main/webapp/views 路徑下創(chuàng)建對應(yīng)的jsp頁面,并編寫前端頁面展示代碼
五、配置說明(Properties)
yan-dao 模塊 resources/properties 中配置文件說明
| 名稱(Key值) | 描述 |
|---|
| mbg.path | mybatis generator 插件生成代碼的路徑(絕對路徑) |
| mbg.db.username | mybatis generator 插件連接數(shù)據(jù)庫的用戶名 |
| mbg.db.password | mybatis generator 插件連接數(shù)據(jù)庫的密碼 |
| mbg.db.driverClassName | mybatis generator 插件連接數(shù)據(jù)庫的驅(qū)動 |
| mbg.db.url | mybatis generator 插件連接數(shù)據(jù)庫的地址 |
yan-service 模塊 resources/properties 中配置文件說明
| 名稱(Key值) | 描述 |
|---|
| default.datasource.username | 默認數(shù)據(jù)庫用戶名 |
| default.datasource.password | 默認數(shù)據(jù)庫密碼 |
| default.datasource.driverClassName | 默認數(shù)據(jù)庫驅(qū)動類 |
| default.datasource.url | 默認數(shù)據(jù)庫鏈接地址 |
| dextend.datasource.username | 擴展數(shù)據(jù)庫用戶名(用于多數(shù)據(jù)源切換) |
| dextend.datasource.password | 擴展數(shù)據(jù)庫密碼(用于多數(shù)據(jù)源切換) |
| dextend.datasource.driverClassName | 擴展數(shù)據(jù)庫驅(qū)動類(用于多數(shù)據(jù)源切換) |
| dextend.datasource.url | 擴展數(shù)據(jù)庫鏈接地址(用于多數(shù)據(jù)源切換) |
| datasource.initialSize | 初始化時建立物理連接的個數(shù) |
| datasource.minIdle | 最小連接池數(shù)量 |
| datasource.maxActive | 最大連接池數(shù)量 |
| datasource.maxWait | 獲取連接時最大等待時間,單位毫秒 |
| datasource.timeBetweenEvictionRunsMillis | 配置間隔多久才進行一次檢測,檢測需要關(guān)閉的空閑連接,單位是毫秒 |
| datasource.minEvictableIdleTimeMillis | 配置一個連接在池中最小生存的時間,單位是毫秒 |
| datasource.validationQuery | 用來檢測連接是否有效的sql |
| datasource.testWhileIdle | 建議配置為true,不影響性能,并且保證安全性 |
| datasource.testOnBorrow | 申請連接時執(zhí)行validationQuery檢測連接是否有效,做了這個配置會降低性能。 |
| datasource.testOnReturn | 歸還連接時執(zhí)行validationQuery檢測連接是否有效,做了這個配置會降低性能 |
| datasource.poolPreparedStatements | 是否緩存preparedStatement,也就是PSCache |
| datasource.maxPoolPreparedStatementPerConnectionSize | 每個連接上PSCache的大小 |
| datasource.filters | 屬性類型是字符串,通過別名的方式配置擴展插件,常用的插件有:監(jiān)控統(tǒng)計用的filter:stat日志用的filter:log4j防御sql注入的filter:wall |
| - | - |
| dubbo.application.name | dubbo 應(yīng)用服務(wù)提供者名稱 |
| dubbo.protocol.port | dubbo 協(xié)議暴露服務(wù)的端口 |
| dubbo.registry.address | dubbo 使用 zookeeper 注冊中心暴露服務(wù)的地址 |
| - | - |
| jms.brokerURL | activeMQ 服務(wù)地址 |
| jms.userName | activeMQ 服務(wù)管理端用戶名 |
| jms.password | activeMQ 服務(wù)管理端密碼 |
yan-web 模塊 resources/properties 中配置文件說明
| 名稱(Key值) | 描述 |
|---|
| jms.brokerURL | activeMQ 服務(wù)地址 |
| jms.userName | activeMQ 服務(wù)管理端用戶名 |
| jms.password | activeMQ 服務(wù)管理端密碼 |
| - | - |
| logback.name | 日志文件前綴名稱(一般使用項目名稱,便于區(qū)分) |
| logback.path | 日志存放路徑(絕對路徑) |
| logback.maxHistory | 日志最大的歷史天數(shù) |
| logback.db.username | 日志寫入數(shù)據(jù)庫時連接數(shù)據(jù)庫的用戶名 |
| logback.db.password | 日志寫入數(shù)據(jù)庫時連接數(shù)據(jù)庫的密碼 |
| logback.db.driverClassName | 日志寫入數(shù)據(jù)庫時連接數(shù)據(jù)庫的驅(qū)動 |
| logback.db.url | 日志寫入數(shù)據(jù)庫時連接數(shù)據(jù)庫的url |
| - | - |
| setting.upload | 文件上傳路徑(絕對路徑) |
| - | - |
| solr.builder | Solr搜索引擎服務(wù)地址 |
六、常用方法(Methods)
方法均在繼承于BaseController的controller類中使用this.metodName或直接使用methodName來進行調(diào)用(注:methodName代表需要調(diào)用的方法名稱,方法名稱見下表)
| 方法名 | 參數(shù) | 返回值 | 描述 |
|---|
| getSession | 無 | HttpSession 服務(wù)器會話 | 獲取服務(wù)器會話 session 對象 |
| setSession | session 服務(wù)器會話 | 無 | 設(shè)置服務(wù)器會話 session 對象 |
| getRequest | 無 | HttpServletRequest 用戶請求 | 獲取用戶請求 request 對象 |
| setRequest | request 用戶請求 | 無 | 設(shè)置用戶請求 request 對象 |
| getResponse | 無 | HttpServletResponse 服務(wù)器響應(yīng)結(jié)果 | 獲取服務(wù)器響應(yīng)結(jié)果 response 對象 |
| setResponse | response 服務(wù)器響應(yīng)結(jié)果 | 無 | 設(shè)置服務(wù)器響應(yīng)結(jié)果 response 對象 |
| getSessionUser | 無 | TbSysUser 用戶對象 | 獲取登錄成功后 session 中的存儲的用戶信息 |
| - | - | - | - |
| getService | 無 | DelegateService 通用 Service,查看自定義 sqlMap 的代理 service 對象 | 獲取 delegateService 對象 |
| resultPage | list 查詢到的分頁結(jié)果,為 Page 對象 | PageModel<T> 自定義的分頁模型,T 為查詢的對象 | 分頁結(jié)果集對象 |
| resultMsg | status 狀態(tài)值(可根據(jù)需求任意設(shè)置,無強制標準);msg 消息內(nèi)容;res 返回的對象 | MsgModel 自定義消息模型 | 消息返回對象 |
| fileUpLoad | request 上傳方法中傳遞的 request 對象,并非父類中的 request 對象 | List<String> 上傳文件成功后的新文件名稱,以集合形式返回 | 文件上傳方法,支持多個文件上傳 |
| fileDownLoad | fileName 需要下載的文件名稱 | ResponseEntity<byte[]> 下載的文件,在瀏覽器會進行下載 | 文件下載方法 |
| - | - | - | - |
| isNull | obj 需要進行判斷的對象 | boolean 為null或空返回 true,否則返回 false | 判斷對象是否為null,或空 |
| obj2Str | obj 需要轉(zhuǎn)換的對象 | String 對象的值(為null則返回"") | 對象轉(zhuǎn)換為 String,通常用于獲取 Map 集合中的對象時使用 |
| getUUID | 無 | String 32位主鍵字符串 | 生成 uuid 主鍵,長度為32位,且為大寫模式 |
| base64Encoder | str 需要進行編碼的字符串 | String 進行編碼后的結(jié)果字符串 | 對字符串進行 base64 編碼 |
| base64Decoder | str 已進行 base64 編碼的編碼字符串 | String 解碼后的原字符串 | 對字符串進行 base64 解碼 |
| md5 | str 需要進行 md5 加密的字符串 | String 加密后的結(jié)果 | 對字符串進行 md5 加密算法 |
| currentDate | pattern 獲取系統(tǒng)時間的格式,如:yyyy-MM-dd HH:mm:ss | String 返回格式化后的當前時間 | 獲取系統(tǒng)當前時間 |
| timeStamp2Date | timestamp 需要進行轉(zhuǎn)換的時間戳;pattern 轉(zhuǎn)換后的格式 | String 格式化后的日期 | 時間戳轉(zhuǎn)換成日期 |
| date2TimeStamp | dateStr 需要進行轉(zhuǎn)換的日期字符串;pattern 日期的格式 | String 轉(zhuǎn)換后的時間戳 | 日期轉(zhuǎn)換為時間戳 |
| readFromFile | filePath 文件路徑(絕對路徑) | String 讀取的文件內(nèi)容 | 從指定文件中讀取文件內(nèi)容 |
| writeToFile | content 需要寫入文件中的內(nèi)容 | filePath 文件路徑(絕對路徑) | 將內(nèi)容寫入到指定文件中(寫入會覆蓋文件原有內(nèi)容,建議先讀取,再寫入,將讀取的內(nèi)容與需要寫入的內(nèi)容并在一起進行寫入) |
| generatePath | path 文件夾路徑(絕對路徑) | 無 | 生成指定路徑文件夾,先進行判斷文件夾是否存在,若不存在則創(chuàng)建對應(yīng)目錄的文件夾,若存在則不進行任何操作 |
| generateFile | path 文件路徑(絕對路徑) | 無 | 生成指定路徑的文件,先進行判斷文件是否存在,若不存在則進行創(chuàng)建文件,若存在則不進行任何操作 |
| propertiesValue | key 資源文件中的 key 值 | String 讀取到的 key 對應(yīng)的 value 值 | 讀取 properties 文件中的值,讀取 classpath 下 /properties/config.properties 配置文件 |
| propertiesValue | resource 資源文件路徑(對應(yīng) classpath 中的路徑);key 資源文件中的 key 值 | String 讀取到的 key 對應(yīng)的 value 值 | 讀取指定路徑 properties 文件中的值,會從 classpath 路徑下進行查找資源文件 |
七、示例代碼(Codes)
創(chuàng)建一個繼承與BaseController的控制器
獲取日志日志記錄Logger對象
獲取service對象
分頁查詢后臺代碼
分頁查詢前臺代碼
文件上傳
文件下載(在jsp頁面使用通用的下載方法,使用restful風(fēng)格)
自定義文件下載后臺方法
常用 delegateService 方法
常用對象 service 方法
更多方法使用請參考項目中的示例代碼
八、效果預(yù)覽(Preview)