SpringBoot 構建多 module webapp 項目

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章