spring boot整合mybatis -配置 druid 数据源

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&amp;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监控前,先执行几次)
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/csdn_0911/article/details/82828607