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