上篇SpringBoot--初入SpringBoot中对SpringBoot如何配置有了初步的了解,只需要配置下pom文件,写一个SpringBoot启动类,就可以启动服务进行访问了,再来看下当初的pom文件导入的依赖:
代码语言:javascript复制 <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
这边导入了一个spring-boot-starter-web,SpringBoot中称之为启动器,导入该启动器后,就相当于整合了SpringMVC和Spring,而以前复杂的配置都交由SpringBoot管理
启动器分为两种:
- 以spring-boot-starter为前缀的启动器:SpringBoot内置的启动器
- 以spring-boot-starter为后缀的启动器:第三方框架为支持SpringBoot的启动器
有了这些启动器,配置第三方框架将会变得非常简单
一、配置MyBatis
1. 导入MyBatis启动器
代码语言:javascript复制 <dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.3</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.21</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency>
2. yml中配置数据库连接信息和MyBatis包扫描路径
代码语言:javascript复制spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/mydb?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:
mapper-locations: classpath:mybatis/*.xml #指定映射文件路径
type-aliases-package: com.aruba.bean
3. 定义员工实体类
代码语言:javascript复制@Data
@AllArgsConstructor
@NoArgsConstructor
public class Emp implements Serializable {
/**
* 员工编号
*/
private Integer empno;
/**
* 姓名
*/
private String ename;
/**
* 职位
*/
private String job;
/**
* 上级
*/
private Integer mgr;
/**
* 入职日期
*/
private Date hiredate;
/**
* 薪水
*/
private Double sal;
/**
* 奖金
*/
private Double comm;
/**
* 部门编号
*/
private Integer deptno;
}
4. 定义Mapper接口
代码语言:javascript复制@Mapper
public interface EmpMapper {
@Select("select * from emp")
List<Emp> findAllEmp();
}
5. 定义Service层接口和实现类
接口:
代码语言:javascript复制public interface EmpService {
List<Emp> findAllEmp();
}
实现类:
代码语言:javascript复制@Service
public class EmpServiceImpl implements EmpService {
@Autowired
private EmpMapper empMapper;
@Override
public List<Emp> findAllEmp() {
return empMapper.findAllEmp();
}
}
6. 定义Controller层
代码语言:javascript复制@Controller
public class EmpController {
@Autowired
private EmpService empService;
@RequestMapping("findAllEmp")
@ResponseBody
public List<Emp> findAllEmp() {
return empService.findAllEmp();
}
}
浏览器访问:
二、配置Logback
SpringBoot默认使用Logback作为日志管理,web启动器中集成了它,只需要在resources目录下新建配置文件:logback.xml
内容为:
代码语言:javascript复制<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
<property name="LOG_HOME" value="${catalina.base}/logs/"/>
<!-- 控制台输出 -->
<appender name="Stdout" class="ch.qos.logback.core.ConsoleAppender">
<!-- 日志输出格式 -->
<layout class="ch.qos.logback.classic.PatternLayout">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
</pattern>
</layout>
</appender>
<!-- 按照每天生成日志文件 -->
<appender name="RollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件输出的文件名-->
<FileNamePattern>${LOG_HOME}/server.%d{yyyy-MM-dd}.log</FileNamePattern>
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
</pattern>
</layout>
<!--日志文件最大的大小-->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</MaxFileSize>
</triggeringPolicy>
</appender>
<!-- 日志输出级别 -->
<root level="info">
<appender-ref ref="Stdout"/>
<!--暂时不需要输出到文件-->
<!--<appender-ref ref="RollingFile"/>-->
</root>
<logger name="com.aruba.mapper" level="DEBUG"></logger>
<!--日志异步到数据库 -->
<!--<appender name="DB" class="ch.qos.logback.classic.db.DBAppender">
日志异步到数据库
<connectionSource class="ch.qos.logback.core.db.DriverManagerConnectionSource">
连接池
<dataSource class="com.mchange.v2.c3p0.ComboPooledDataSource">
<driverClass>com.mysql.jdbc.Driver</driverClass>
<url>jdbc:mysql://127.0.0.1:3306/databaseName</url>
<user>root</user>
<password>root</password>
</dataSource>
</connectionSource>
</appender> -->
</configuration>
需要修改的为logger标签中的包名
三、配置PageHelper
PageHelper是一个帮助我们进行分页操作的框架,配置了PageHelper,在Mapper中进行分页只需要一行代码
1. 导入PageHelper启动器
代码语言:javascript复制<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.4.2</version>
</dependency>
2. Controller层中定义分页接口
代码语言:javascript复制 @RequestMapping("findEmpByPage/{pageSize}/{pageNum}")
@ResponseBody
public List<Emp> findEmpByPage(@PathVariable("pageSize") Integer pageSize,
@PathVariable("pageNum") Integer pageNum) {
return empService.findEmpByPage(pageSize, pageNum);
}
3. Service层实现接口
代码语言:javascript复制 @Override
public List<Emp> findEmpByPage(Integer pageSize, Integer pageNum) {
PageHelper.startPage(pageNum, pageSize);
List<Emp> list = empMapper.findAllEmp();
return list;
}
对比就增加了PageHelper.startPage(pageNum, pageSize);这一句代码
调用结果:
4. 获取其他信息
PageHelper还可以获取额外的信息,如总大小,总页数等
代码语言:javascript复制 @Override
public List<Emp> findEmpByPage(Integer pageSize, Integer pageNum) {
Page<Emp> page = PageHelper.startPage(pageNum, pageSize);
List<Emp> list = empMapper.findAllEmp();
// Page对象获取
System.out.println("当前页:" page.getPageNum());
System.out.println("总页数" page.getPages());
System.out.println("页大小:" page.getPageSize());
System.out.println("总记录数:" page.getTotal());
System.out.println("当前页数据" page.getResult());
// PageInfo对象获取
PageInfo<Emp> empPageInfo = new PageInfo<>(list);
System.out.println("当前页:" empPageInfo.getPageNum());
System.out.println("总页数" empPageInfo.getPages());
System.out.println("页大小:" empPageInfo.getPageSize());
System.out.println("总记录数:" empPageInfo.getTotal());
System.out.println("当前页数据" empPageInfo.getList());
return list;
}
控制台打印:
四、配置Druid
阿里的德鲁伊连接池,之前以及使用过了,配置也很简单
1. 导入Druid启动器
代码语言:javascript复制<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
2. yml中配置
代码语言:javascript复制spring:
datasource:
# 使用阿里的Druid连接池
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
# 填写你数据库的url、登录名、密码和数据库名
url: jdbc:mysql://127.0.0.1:3306/mydb?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
username: root
password: root
druid:
# 连接池的配置信息
# 初始化大小,最小,最大
initial-size: 5
min-idle: 5
maxActive: 20
# 配置获取连接等待超时的时间
maxWait: 60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
timeBetweenEvictionRunsMillis: 60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
# 打开PSCache,并且指定每个连接上PSCache的大小
poolPreparedStatements: true
maxPoolPreparedStatementPerConnectionSize: 20
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
filters: stat,wall,slf4j
# 通过connectProperties属性来打开mergeSql功能;慢SQL记录
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
# 配置DruidStatFilter
web-stat-filter:
enabled: true
url-pattern: "/*"
exclusions: "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*"
# 配置DruidStatViewServlet
stat-view-servlet:
url-pattern: "/druid/*"
# IP白名单(没有配置或者为空,则允许所有访问)
allow: 127.0.0.1,192.168.8.109
# IP黑名单 (存在共同时,deny优先于allow)
deny: 192.168.1.188
# 禁用HTML页面上的“Reset All”功能
reset-enable: false
# 登录名
login-username: admin
# 登录密码
login-password: 123456
配置完后启动,可以进入Druid的管理网页:
项目地址:
https://gitee.com/aruba/spring-boot-study.git