第三章 Java框架整合--企業中的項目架構以及多環境分配

来源:http://www.cnblogs.com/java-zhao/archive/2016/01/08/5115136.html
-Advertisement-
Play Games

1、業務模塊與數據模塊分離在實際開發中,我們項目的架構業務模塊和數據模塊是分離的,舉個例子,假設我們的項目有"人員管理模塊"和"酒店管理模塊"兩個模塊,按照上一章的介紹,我們會建立下圖所示的項目結構:其中,人員管理模塊的controller、service、dao、mapper都在一個項目中,而在實...


1、業務模塊與數據模塊分離

在實際開發中,我們項目的架構業務模塊和數據模塊是分離的,舉個例子,假設我們的項目有"人員管理模塊"和"酒店管理模塊"兩個模塊,按照上一章的介紹,我們會建立下圖所示的項目結構:

其中,人員管理模塊的controller、service、dao、mapper都在一個項目中,而在實際使用中,我們會將數據模塊分離出來,即將以上兩個子模塊的service、dao、mapper拿出來,放在一個子項目中,形成如下的項目結構:

註意以下幾點:

  • 包的命名最好是com.xxx.mapper.user和不是com.xxx.user.mapper,前者在spring.xml中配置mybatis時更方便,具體見spring.xml的中的註釋
  • 在controller那一層的項目是需要部署的,即是war,而下邊的數據模塊是作為war的一個jar,所以在war層的pom.xml需要將下邊的數據模塊作為一個jar來引入到項目中
  • service層到底是放在業務模塊處還是放在數據模塊處,這個根據需求而定,一般而言,都放在數據模塊處,方便彼此service的調用,如userService調用hotelService,如果這個時候把兩個service分別放在各自的業務模塊層中,相互的調用就要通過RPC了,當然,有的時候可能有些與其他模塊都不調用的service放在war層可能會好一些。
  • 將來編寫的緩存模塊類、通用模塊類、RPC工具類等都會作為jar被war層調用。

 

2、實現

我將上一章的項目做了修改,將ssmm項目改成了userManagement項目,並將userManagement項目實現了業務模塊和數據模塊的分離,具體的操作參照第一章和第二章的相關內容,這裡直接給出項目結構和各個文件。

2.1、項目結構

2.2、代碼實現

2.2.1、ssmm0

pom.xml

  1 <?xml version="1.0" encoding="UTF-8"?>
  2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  4 
  5     <modelVersion>4.0.0</modelVersion>
  6 
  7     <groupId>com.xxx</groupId>
  8     <artifactId>ssmm0</artifactId>
  9     <version>1.0-SNAPSHOT</version>
 10 
 11     <name>ssmm0</name>
 12     <packaging>pom</packaging><!-- 父模塊 -->
 13 
 14     <!-- 管理子模塊 -->
 15     <modules>
 16         <module>userManagement</module><!-- 具體業務1-人員管理系統 -->
 17         <module>data</module><!-- 封裝數據操作 -->
 18     </modules>
 19 
 20     <properties>
 21         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 22         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
 23     </properties>
 24 
 25     <!-- dependencyManagement不會引入實際的依賴,只是作為一個依賴池,供其和其子類使用 -->
 26     <dependencyManagement>
 27         <dependencies>
 28             <!-- json -->
 29             <dependency>
 30                 <groupId>com.alibaba</groupId>
 31                 <artifactId>fastjson</artifactId>
 32                 <version>1.1.39</version>
 33             </dependency>
 34             <!-- servlet -->
 35             <dependency>
 36                 <groupId>javax.servlet</groupId>
 37                 <artifactId>javax.servlet-api</artifactId>
 38                 <version>3.0.1</version>
 39                 <scope>provided</scope>
 40             </dependency>
 41             <!-- spring -->
 42             <dependency>
 43                 <groupId>org.springframework</groupId>
 44                 <artifactId>spring-core</artifactId>
 45                 <version>3.2.6.RELEASE</version>
 46             </dependency>
 47             <dependency>
 48                 <groupId>org.springframework</groupId>
 49                 <artifactId>spring-beans</artifactId>
 50                 <version>3.2.6.RELEASE</version>
 51             </dependency>
 52             <dependency>
 53                 <groupId>org.springframework</groupId>
 54                 <artifactId>spring-context</artifactId>
 55                 <version>3.2.6.RELEASE</version>
 56             </dependency>
 57             <dependency>
 58                 <groupId>org.springframework</groupId>
 59                 <artifactId>spring-web</artifactId>
 60                 <version>3.2.6.RELEASE</version>
 61             </dependency>
 62             <dependency>
 63                 <groupId>org.springframework</groupId>
 64                 <artifactId>spring-webmvc</artifactId>
 65                 <version>3.2.6.RELEASE</version>
 66             </dependency>
 67             <!-- 這個是使用velocity的必備包 -->
 68             <dependency>
 69                 <groupId>org.springframework</groupId>
 70                 <artifactId>spring-context-support</artifactId>
 71                 <version>3.2.6.RELEASE</version>
 72             </dependency>
 73             <!-- mysql -->
 74             <dependency>
 75                 <groupId>mysql</groupId>
 76                 <artifactId>mysql-connector-java</artifactId>
 77                 <version>5.1.27</version>
 78                 <scope>runtime</scope>
 79             </dependency>
 80             <!-- 數據源 -->
 81             <dependency>
 82                 <groupId>org.apache.tomcat</groupId>
 83                 <artifactId>tomcat-jdbc</artifactId>
 84                 <version>7.0.47</version>
 85             </dependency>
 86             <!-- mybatis -->
 87             <dependency>
 88                 <groupId>org.mybatis</groupId>
 89                 <artifactId>mybatis</artifactId>
 90                 <version>3.1.1</version>
 91             </dependency>
 92             <dependency>
 93                 <groupId>org.mybatis</groupId>
 94                 <artifactId>mybatis-spring</artifactId>
 95                 <version>1.1.1</version>
 96             </dependency>
 97             <!-- velocity -->
 98             <dependency>
 99                 <groupId>org.apache.velocity</groupId>
100                 <artifactId>velocity</artifactId>
101                 <version>1.5</version>
102             </dependency>
103             <dependency>
104                 <groupId>velocity-tools</groupId>
105                 <artifactId>velocity-tools-generic</artifactId>
106                 <version>1.2</version>
107             </dependency>
108             <!-- 用於加解密 -->
109             <dependency>
110                 <groupId>commons-codec</groupId>
111                 <artifactId>commons-codec</artifactId>
112                 <version>1.7</version>
113             </dependency>
114             <dependency>
115                 <groupId>org.bouncycastle</groupId>
116                 <artifactId>bcprov-jdk15on</artifactId>
117                 <version>1.47</version>
118             </dependency>
119             <!-- 集合工具類 -->
120             <dependency>
121                 <groupId>org.apache.commons</groupId>
122                 <artifactId>commons-collections4</artifactId>
123                 <version>4.0</version>
124             </dependency>
125             <!-- http -->
126             <dependency>
127                 <groupId>org.apache.httpcomponents</groupId>
128                 <artifactId>httpclient</artifactId>
129                 <version>4.2.6</version>
130             </dependency>
131         </dependencies>
132     </dependencyManagement>
133     
134     <!-- 引入實際依賴 -->
135     <dependencies>
136         <!-- json -->
137         <dependency>
138             <groupId>com.alibaba</groupId>
139             <artifactId>fastjson</artifactId>
140         </dependency>
141         <!-- spring -->
142         <dependency>
143             <groupId>org.springframework</groupId>
144             <artifactId>spring-core</artifactId>
145         </dependency>
146         <dependency>
147             <groupId>org.springframework</groupId>
148             <artifactId>spring-beans</artifactId>
149         </dependency>
150         <dependency>
151             <groupId>org.springframework</groupId>
152             <artifactId>spring-context</artifactId>
153         </dependency>
154         <!-- 集合工具類 -->
155         <dependency>
156             <groupId>org.apache.commons</groupId>
157             <artifactId>commons-collections4</artifactId>
158         </dependency>
159     </dependencies>
160     
161     <build>
162         <resources>
163             <!-- 
164                 這裡配置了這一塊兒true,才可以讓指定文件(這裡是src/main/resources/*.xml)讀到pom.xml中的配置信息 ,
165                 值得註意的是,如果src/main/resources下還有其他文件,而你不想讓其讀pom.xml,
166                 你還必須得把src/main/resources下的其餘文件再配置一遍,配置為false(不可讀pom.xml),
167                 如下邊的註釋那樣,否則,會報這些文件(在這裡,就是*.properties)找不到的錯誤
168             -->
169             <resource>
170                 <directory>src/main/resources</directory>
171                 <filtering>true</filtering>
172                 <includes>
173                     <include>*.xml</include>
174                 </includes>
175             </resource>
176             <!-- <resource>
177                 <directory>src/main/resources</directory>
178                 <filtering>false</filtering>可以讀 ,若改為false就是不可讀
179                 <includes>
180                     <include>*.properties</include>
181                 </includes>
182             </resource> -->
183         </resources>
184     </build>
185     
186     <!-- 
187         profiles可以定義多個profile,然後每個profile對應不同的激活條件和配置信息,從而達到不同環境使用不同配置信息的效果 
188         註意兩點:
189         1)<activeByDefault>true</activeByDefault>這種情況表示伺服器啟動的時候就採用這一套env(在這裡,就是prod)
190         2)當我們啟動伺服器後,想採用開發模式,需切換maven的env為dev,如果env的配置本身就是dev,需要將env換成rc或prod,點擊apply,然後再將env切換成dev,點擊apply才行
191     -->
192     <profiles>
193         <!-- 開發env -->
194         <profile>
195             <id>dev</id>
196             <activation>
197                 <activeByDefault>false</activeByDefault>
198                 <property>
199                     <name>env</name>
200                     <value>dev</value>
201                 </property>
202             </activation>
203             <properties>
204                 <env>dev</env>
205 
206                 <jdbc.driverClassName>com.mysql.jdbc.Driver</jdbc.driverClassName>
207                 <!-- 
208                     對於jdbc.url中內容的配置,如果需要配置 &amp;時,有兩種方法:
209                     1)如下邊這樣,使用<![CDATA[XXX]]>包起來
210                     2)使用jdbc.properties文件來讀取此pom.xml,然後spring.xml再讀取jdbc.properties文件
211                     顯然,前者更方便,而且還省了一個jdbc.properties的文件,但是,有的時候,還是會用後者的;
212                     在使用後者的時候,註意三點:
213                     1)需要修改上邊的build中的內容
214                     2)需要在spring.xml中配置<context:property-placeholder location="classpath:jdbc.properties"/>
215                     3)jdbc.properties與spring.xml必須在一個項目中,不能將jdbc.properties放在ssmm0-data項目中,否則切換env就不能用了
216                 -->
217                 <jdbc.url><![CDATA[jdbc:mysql://127.0.0.1:3306/blog?zeroDateTimeBehavior=convertToNull&amp;useUnicode=true&amp;characterEncoding=utf-8]]></jdbc.url>
218                 <jdbc.username>root</jdbc.username>
219                 <jdbc.password>123456</jdbc.password>
220             </properties>
221         </profile>
222         <!-- 預上線env -->
223         <profile>
224             <id>rc</id>
225             <activation>
226                 <activeByDefault>false</activeByDefault>
227                 <property>
228                     <name>env</name>
229                     <value>rc</value>
230                 </property>
231             </activation>
232             <properties>
233                 <env>rc</env>
234 
235                 <jdbc.driverClassName>com.mysql.jdbc.Driver</jdbc.driverClassName>
236                 <!-- 假設的一個地址 -->
237                 <jdbc.url><![CDATA[jdbc:mysql://10.10.10.100:3306/blog?zeroDateTimeBehavior=convertToNull&amp;useUnicode=true&amp;characterEncoding=utf-8]]></jdbc.url>
238                 <jdbc.username>root2</jdbc.username>
239                 <jdbc.password>1234562</jdbc.password>
240             </properties>
241         </profile>
242         <!-- 線上env -->
243         <profile>
244             <id>prod</id>
245             <activation>
246                 <activeByDefault>true</activeByDefault>
247                 <property>
248                     <name>env</name>
249                     <value>prod</value>
250                 </property>
251             </activation>
252             <properties>
253                 <env>prod</env>
254                 
255                 <jdbc.driverClassName>com.mysql.jdbc.Driver</jdbc.driverClassName>
256                 <!-- 假設的一個地址 -->
257                 <jdbc.url><![CDATA[jdbc:mysql://99.99.99.999:3307/blog?zeroDateTimeBehavior=convertToNull&amp;useUnicode=true&amp;characterEncoding=utf-8]]></jdbc.url>
258                 <jdbc.username>sadhijhqwui</jdbc.username>
259                 <jdbc.password>zxczkchwihcznk=</jdbc.password>
260             </properties>
261         </
              
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.準備工作 (1)PHP 版本5.6.17 下載地址 PHP官網 (2)Nginx 版本1.8.0 下載地址 Nginx官網 (3)MySQL 版本5.7.10MySQL官網2.php的安裝與配置 直接解壓下載好的php包,到D盤wnmp目錄(D:\wnmp),這裡把解壓出來的文件夾重命名...
  • /*** 導入文件Action;*/private File excelFile;// 保存原始文件名private String excelFileFileName;// 保存原始文件名private String importResult;// 將Excel文件解析完畢後信息存放到這個User對...
  • ADO.NET在Java中的對應技術是JDBC,企業庫DataAccessApplicationBlock模塊在Java中的對應是spring-jdbc模塊,EntityFramework在Java中對應的ORM是Hibernate。關係資料庫、SQL、資料庫事務、分散式事務的概念都是通用的。1.J...
  • 提要01 IO流(BufferedWriter)02 IO流(BufferedReader)03 IO流(通過緩衝區複製文本文件)04 IO流(readLine的原理)05 IO流(MyBufferedReader)06 IO流(裝飾設計模式)07 IO流(裝飾和繼承的區別)01 IO流(Buffe...
  • 以前使用curl的多線程並不是真正的多線程,只是一種模擬的多線程,現在使用pthreads來實現真正意義上的多線程。下載: windows下: http://windows.php.net/downloads/pecl/releases/pthreads/0.0.45/ mac、unix、...
  • 如何將二維數組作為函數的參數傳遞,這是涉及到多維數組時經常要遇到的問題。長期來,我們往往知其然,但不知其所以然。這裡簡單總結一下。1.《C程式設計》中講到:可以用二維數組名作為實參或者形參,在被調用函數中對形參數組定義時可以指定所有維數的大小,也可以省略第一維的大小說明,如:void Func(in...
  • 博客地址:http://www.cnblogs.com/oumyye/問題一:==與equal的區別?==和 equals 都是比較的,而前者是運算符,後者則是一個方法,基本數據類型和引用數據類型都可以使用運算符==,而只有引用類型數據才可以使用 equals,下麵具體介紹一下兩者的用法以及區別.=...
  • 首先非常感謝11期的學長薜保庫提供了一種非常實用函數遞歸方法,讓實現三層菜單如此簡單,不過對所遍歷的嵌套字典或列表格式有所要求。有特定的環境下非常實用。 主要針對中國的各省市區進行展示,採用了百度的js介面: http://passport.baidu.com/js/site...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...