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

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