druid 数据库连接池是由阿里提供,由于其性能很高并且提供了强大的监控功能,所以被越来越多的应用。
第一次配置,很简单。也没有花太多时间,最坑的是 druid 监控的配置处理时:
# 这里一定要配置为 "/druid/*",而不是"/druid",浏览器会报错404!
ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(
new StatViewServlet(), "/druid/*");
#这里一定要配置为 "/druid/*",如果是"/druid",浏览器会报错404!
第一步 配置pom.xml文件
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.17</version>
</dependency>
同时配置 mybatis 启动包 和 mysql 连接包
<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>
<scope>runtime</scope>
</dependency>
<!--日志配置 将数据库SQL执行打印出来,还需要新增一个配置文件 logback-spring.xml start -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
</dependency>
<!--日志配置 将数据库SQL执行打印出来,还需要新增一个配置文件 logback-spring.xml end-->
第二步 配置application.properties
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
# 配合Druid监控的过滤配置filters ,去掉后监控界面sql无法统计,'wall'用于防火墙
spring.datasource.filters=stat,wall,log4j
同时配置 mybatis
spring.datasource.url = jdbc:mysql://**数据库ip**:3306/mldn?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true
spring.datasource.username = root
spring.datasource.password = root
spring.datasource.initialSize=5
spring.datasource.minIdle=5
spring.datasource.maxActive=50
spring.datasource.maxWait=60000
spring.datasource.timeBetweenEvictionRunsMillis=60000
spring.datasource.minEvictableIdleTimeMillis=300000
spring.datasource.validationQuery=SELECT 1 FROM DUAL
spring.datasource.testWhileIdle=true
spring.datasource.testOnBorrow=true
spring.datasource.testOnReturn=false
spring.datasource.poolPreparedStatements=false
spring.datasource.maxPoolPreparedStatementPerConnectionSize=20
# 配合Druid监控的过滤配置filters ,去掉后监控界面sql无法统计,'wall'用于防火墙
spring.datasource.filters=stat,wall,log4j
# connectProperties
spring.datasources.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
# Mybatis配置
# Mybatis所有操作类的别名所在包
mybatis.typeAliasesPackage=com.example.demo.bean
# Mybatis所有的映射文件
mybatis.mapperLocations=classpath:mapper/**/*.xml
# Mybatis配置文件所在路径
mybatis.config-location=classpath:mybatis-config.xml
当然还要有Mybatis配置文件:src\main\resources\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="logImpl" value="STDOUT_LOGGING" />-->
<setting name="logImpl" value="SLF4J" />
</settings>
<typeAliases>
<typeAlias alias="Integer" type="java.lang.Integer" />
<typeAlias alias="Long" type="java.lang.Long" />
<typeAlias alias="HashMap" type="java.util.HashMap" />
<typeAlias alias="LinkedHashMap" type="java.util.LinkedHashMap" />
<typeAlias alias="ArrayList" type="java.util.ArrayList" />
<typeAlias alias="LinkedList" type="java.util.LinkedList" />
</typeAliases>
</configuration>
logback配置文件:src\main\resources\logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true">
<!-- 尽量别用绝对路径,如果带参数不同容器路径解释可能不同 -->
<property name="LOG_HOME" value="../logs" />
<springProperty scope="context" name="logLevel" source="log.level"/>
<appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</layout>
</appender>
<!-- 按照每天生成日志文件 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${LOG_HOME}/CcxDecision_%d{yyyy-MM-dd}.log</FileNamePattern>
<MaxHistory>180</MaxHistory>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</layout>
</appender>
<!--设置具体包的日志级别-->
<springProfile name="dev,product">
**<logger name="com.example.demo" level="debug" />** <!-- 配置自己项目 -->
<logger name="org.springframework.web" level="debug"/>
<logger name="io.lettuce.core.RedisClient" level="debug" />
<logger name="org.apache.http.wire" level="debug" />
<logger name="com.mycompany.myapp.mapper.MyMapper" level="DEBUG"/>
</springProfile>
<root level="${logLevel}"> <!-- root将级别为“INFO”及大于“INFO”的日志信息交给已经配置好的名为“Console”的appender处理,“Console”appender将信息打印到Console; -->
<appender-ref ref="Console" /> <!-- 标识这个appender将会添加到这个logger -->
<appender-ref ref="FILE" />
</root>
</configuration>
最终在我们项目logs下可以看到日志文件
第三步
新增一个 druid 配置类,设置 DruidDataSource。
DruidConfig.java
package com.example.demo.config;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import javax.sql.DataSource;
import java.sql.SQLException;
@Configuration
public class DruidConfig {
// 主要实现WEB监控的配置处理
@Bean
public ServletRegistrationBean druidServlet() {
ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(
new StatViewServlet(), "/druid"); //进行druid监控的配置处理操作
servletRegistrationBean.addInitParameter("allow",
"127.0.0.1,10.0.5.58"); // 白名单
servletRegistrationBean.addInitParameter("deny", "192.168.1.200"); // 黑名单
servletRegistrationBean.addInitParameter("loginUsername", "druid"); // druid的用户名
servletRegistrationBean.addInitParameter("loginPassword", "druid"); // druid的密码
servletRegistrationBean.addInitParameter("resetEnable", "false"); // 是否可以重置数据源
return servletRegistrationBean;
}
// 主要实现文件监控的配置处理
@Bean
public FilterRegistrationBean filterRegistrationBean() {
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
filterRegistrationBean.setFilter(new WebStatFilter());
filterRegistrationBean.addUrlPatterns("/*"); // 所有请求进行监控处理
filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.css,/druid/*");// 不监控的格式
return filterRegistrationBean;
}
// 将所有前缀为spring.datasource下的配置项都加载到DataSource中
@ConfigurationProperties(prefix = "spring.datasource")
@Bean
public DataSource druidDataSource() {
return new DruidDataSource();
}
}
注意:非常关键的监控配置:
ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(
new StatViewServlet(), "/druid/*");
#这里一定要配置为 "/druid/*",如果是"/druid",浏览器会报错404!
第四步 验证
输入地址:http://localhost/druid/login.html
登陆成功,可以很清晰的看到我刚刚执行的SQL:(自己写一个查询方法,进入druid监控前,先执行几次)