SpringBoot 構建多 module webapp 項目
簡介
基於 SpringBoot 構建多 module webapp 項目,主要是實現代碼的分層,讓代碼邏輯看起來更加的清晰。下面主要講的是把一個 webapp 項目給分成三層。分別是:
web層:負責定義啓動類、controller、模板引擎(靜態資源、前端頁面)
commons 層:負責定義數據模型及公共代碼
biz 層:負責數據訪問層及業務實現
具體的代碼分層,可以根據自己的理解調整,上面只是提供一個參考。
一. 創建父級項目
1.新建 web 項目
藉助 idea 工具新建一個基於 maven 的 web 項目,假設命名爲“house”作爲父級項目。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-gFFZc8hW-1571453995351)(C:\Users\yy\Desktop\springboot\2.png)]
2.配置 pom.xml
父級項目只需要引入 springboot 的依賴。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
<relativePath/>
</parent>
二、創建 web 層 module
1.新建 module
右鍵項目,new -> Module,假設命名爲“house-web”。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-YSDfmAxn-1571453995353)(C:\Users\yy\Desktop\springboot\1.png)]
2.放什麼內容?
controller 層的 module 也就是 house-web,主要存放 controller 的代碼、靜態資源、頁面代碼、攔截器、log4j 日誌配置等,還有整個項目的啓動類!!!
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-1xcX1Ywa-1571453995355)(C:\Users\yy\Desktop\springboot\3.png)]
3.配置 pom.xml
由於該 module 是在父級項目的基礎上新建的,所以不需要再引入 springboot 的依賴了,可以根據自己的需求引入相關的依賴。比如,我項目裏的頁面顯示用到了 freemarker ,所有要引入 freemarker 的依賴。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
4.創建啓動類
啓動類一定要跟 controller 包同層,不然會報錯。圖示如上。
@SpringBootApplication
@EnableHttpClient
@EnableAsync
public class HouseApplication {
public static void main(String[] args) {
SpringApplication.run(HouseApplication.class, args);
}
}
5. application.yml 配置
server:
port: 8081
spring:
druid:
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/houses?characterEncoding=UTF-8&useSSL=false
username: root
password: root
#最大連接數
maxActive: 30
#最小連接數
minIdle: 5
#獲取連接的最大等待時間
maxWait: 10000
#解決 mysql 8小時的問題,
validationQuery: SELECT 'x'
#空閒連接檢查時間間隔
timeBetweenEvictionRunsMillis: 60000
#空閒連接最小空閒時間
minEvictableIdleTimeMillis: 300000
mybatis:
config-location: classpath:/mybatis/mybatis-config.xml
controller 層的 module 中的 application.yml 主要是配置一個端口號、數據庫連接和 mybatis 文件的掃描路徑。這裏配置掃描的 mybatis-config.xml 文件並不是放在當前 module 下,是放在後面的 house-biz (存放 service 層和 mapper層代碼)的 module 下。
三、創建 commons 層 module
1.新建 module
同上。
2.放什麼內容?
主要存放數據表對應的 javabean 類以及一些工具類,換言之,就是存放一些公共的代碼。
3.配置 pom.xml
<!-- 移除內置 Tomcat 引入 jetty -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
在 commons 層 module 中配置了 tomcat。
四、創建 biz 層 module
1.新建 module
同上。
2.放什麼內容?
主要是存放了數據庫連接(Druid)配置、mapper 層接口和 sql 代碼、service 層代碼、mybatis-config.xml 配置文件。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-IoWzUNl0-1571453995357)(C:\Users\yy\Desktop\springboot\5.png)]
3.配置 pom.xml
<!-- 阿里巴巴的數據庫連接池 druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
<!-- 引入 mybatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
主要是引入 druid 連接池、mybatis 和 mysql 連接的依賴,其他依賴根據自己需求引入。
4. Druid 的配置
import com.alibaba.druid.filter.Filter;
import com.alibaba.druid.filter.stat.StatFilter;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.google.common.collect.Lists;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class DruidConfig {
@ConfigurationProperties(prefix = "spring.druid")
@Bean(initMethod = "init",destroyMethod = "close")
public DruidDataSource dataSource(){
DruidDataSource dataSource = new DruidDataSource();
dataSource.setProxyFilters(Lists.newArrayList(statFilter()));
return dataSource;
}
@Bean
public Filter statFilter(){
StatFilter filter = new StatFilter();
filter.setSlowSqlMillis(1);
// druid 配置輸出慢SQL日誌記錄
// 例如Console上輸出的:slow sql 34 millis. SELECT id,name,email,phone FROM user[]
filter.setLogSlowSql(true);
filter.setMergeSql(true);
return filter;
}
@Bean
public ServletRegistrationBean servletRegistrationBean(){
return new ServletRegistrationBean(new StatViewServlet(),"/druid/*");
}
}
這裏配置 druid 主要是爲了使用 druid 提供的數據監控頁面,啓動項目後,我們可以通過: http://localhost:8080/druid 來訪問。
5. mybatis-config.xml 的配置
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<!-- 配置關閉緩存 -->
<setting name="cacheEnabled" value="false"/>
<!-- 使用列別名替換列名 默認:true -->
<setting name="useColumnLabel" value="true"/>
<setting name="mapUnderscoreToCamelCase" value="true" />
<setting name="useGeneratedKeys" value="true" />
<setting name="defaultExecutorType" value="REUSE" />
<!-- 事務超時時間 -->
<setting name="defaultStatementTimeout" value="600" />
</settings>
</configuration>
五、結尾
到這裏基本就配置完成了,可以寫個簡單的接口測試下哦~
Over