SpringBoot之使用Druid连接池以及SQL监控和spring监控 一、引入maven依赖 二、在application.properties配置文件中加入druid配置 三、配置webServlet 四、配置webFitler 五、扫描filter和servlet 六、不使用spring boot自动配置功能,手动初始化DataSource 八、spring监控之方法名正则匹配拦截配置  九、引入配置 十、controller 十一、Mapper和mapper xml  十二、测试

SpringBoot之使用Druid连接池以及SQL监控和spring监控
一、引入maven依赖
二、在application.properties配置文件中加入druid配置
三、配置webServlet
四、配置webFitler
五、扫描filter和servlet
六、不使用spring boot自动配置功能,手动初始化DataSource
八、spring监控之方法名正则匹配拦截配置
 九、引入配置
十、controller
十一、Mapper和mapper xml
 十二、测试
<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
        </dependency>
    
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <scope>provided</scope>
        </dependency>


        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.0.18</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.2.2</version>
        </dependency>
    </dependencies>
SpringBoot之使用Druid连接池以及SQL监控和spring监控
一、引入maven依赖
二、在application.properties配置文件中加入druid配置
三、配置webServlet
四、配置webFitler
五、扫描filter和servlet
六、不使用spring boot自动配置功能,手动初始化DataSource
八、spring监控之方法名正则匹配拦截配置
 九、引入配置
十、controller
十一、Mapper和mapper xml
 十二、测试

二、在application.properties配置文件中加入druid配置

SpringBoot之使用Druid连接池以及SQL监控和spring监控
一、引入maven依赖
二、在application.properties配置文件中加入druid配置
三、配置webServlet
四、配置webFitler
五、扫描filter和servlet
六、不使用spring boot自动配置功能,手动初始化DataSource
八、spring监控之方法名正则匹配拦截配置
 九、引入配置
十、controller
十一、Mapper和mapper xml
 十二、测试
##########################  mysql   ##########################
spring.datasource.url=jdbc:mysql://localhost/db_boot?useUnicode=true&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

logging.level.com.shyroke.mapper=debug


##########################  mybatis   ##########################
mybatis.mapper-locations=classpath:mybatis/*.xml

##########################  druid配置   ##########################
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource

# 初始化大小,最小,最大  
spring.datasource.initialSize=5
spring.datasource.minIdle=5
spring.datasource.maxActive=20
# 配置获取连接等待超时的时间  
spring.datasource.maxWait=60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒  
spring.datasource.timeBetweenEvictionRunsMillis=60000
# 配置一个连接在池中最小生存的时间,单位是毫秒  
spring.datasource.minEvictableIdleTimeMillis=300000
# 校验SQL,Oracle配置 spring.datasource.validationQuery=SELECT 1 FROM DUAL,如果不配validationQuery项,则下面三项配置无用  
spring.datasource.validationQuery=SELECT 'x'
spring.datasource.testWhileIdle=true
spring.datasource.testOnBorrow=false
spring.datasource.testOnReturn=false
# 打开PSCache,并且指定每个连接上PSCache的大小  
spring.datasource.poolPreparedStatements=true
spring.datasource.maxPoolPreparedStatementPerConnectionSize=20
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙  
spring.datasource.filters=stat,wall,log4j
# 通过connectProperties属性来打开mergeSql功能;慢SQL记录  
spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
# 合并多个DruidDataSource的监控数据  
spring.datasource.useGlobalDataSourceStat=true
SpringBoot之使用Druid连接池以及SQL监控和spring监控
一、引入maven依赖
二、在application.properties配置文件中加入druid配置
三、配置webServlet
四、配置webFitler
五、扫描filter和servlet
六、不使用spring boot自动配置功能,手动初始化DataSource
八、spring监控之方法名正则匹配拦截配置
 九、引入配置
十、controller
十一、Mapper和mapper xml
 十二、测试

三、配置webServlet

SpringBoot之使用Druid连接池以及SQL监控和spring监控
一、引入maven依赖
二、在application.properties配置文件中加入druid配置
三、配置webServlet
四、配置webFitler
五、扫描filter和servlet
六、不使用spring boot自动配置功能,手动初始化DataSource
八、spring监控之方法名正则匹配拦截配置
 九、引入配置
十、controller
十一、Mapper和mapper xml
 十二、测试
package com.shyroke.servlet;

import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;

import com.alibaba.druid.support.http.StatViewServlet;
@WebServlet(urlPatterns = "/druid/*", 
    initParams={
//            @WebInitParam(name="allow",value="192.168.16.110,127.0.0.1"),// IP白名单 (没有配置或者为空,则允许所有访问)
//            @WebInitParam(name="deny",value="192.168.16.111"),// IP黑名单 (存在共同时,deny优先于allow)
            @WebInitParam(name="loginUsername",value="admin"),// 用户名
            @WebInitParam(name="loginPassword",value="admin"),// 密码
            @WebInitParam(name="resetEnable",value="false")// 禁用HTML页面上的“Reset All”功能
    })
public class DruidServlet extends StatViewServlet {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

}
SpringBoot之使用Druid连接池以及SQL监控和spring监控
一、引入maven依赖
二、在application.properties配置文件中加入druid配置
三、配置webServlet
四、配置webFitler
五、扫描filter和servlet
六、不使用spring boot自动配置功能,手动初始化DataSource
八、spring监控之方法名正则匹配拦截配置
 九、引入配置
十、controller
十一、Mapper和mapper xml
 十二、测试

四、配置webFitler

SpringBoot之使用Druid连接池以及SQL监控和spring监控
一、引入maven依赖
二、在application.properties配置文件中加入druid配置
三、配置webServlet
四、配置webFitler
五、扫描filter和servlet
六、不使用spring boot自动配置功能,手动初始化DataSource
八、spring监控之方法名正则匹配拦截配置
 九、引入配置
十、controller
十一、Mapper和mapper xml
 十二、测试
package com.shyroke.filter;

import javax.servlet.annotation.WebFilter;
import javax.servlet.annotation.WebInitParam;

import com.alibaba.druid.support.http.WebStatFilter;

@WebFilter(filterName="druidWebStatFilter",urlPatterns="/*",
initParams={
    @WebInitParam(name="exclusions",value="*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*")// 忽略资源
})
public class DruidFilter extends WebStatFilter {

}
SpringBoot之使用Druid连接池以及SQL监控和spring监控
一、引入maven依赖
二、在application.properties配置文件中加入druid配置
三、配置webServlet
四、配置webFitler
五、扫描filter和servlet
六、不使用spring boot自动配置功能,手动初始化DataSource
八、spring监控之方法名正则匹配拦截配置
 九、引入配置
十、controller
十一、Mapper和mapper xml
 十二、测试

五、扫描filter和servlet

SpringBoot之使用Druid连接池以及SQL监控和spring监控
一、引入maven依赖
二、在application.properties配置文件中加入druid配置
三、配置webServlet
四、配置webFitler
五、扫描filter和servlet
六、不使用spring boot自动配置功能,手动初始化DataSource
八、spring监控之方法名正则匹配拦截配置
 九、引入配置
十、controller
十一、Mapper和mapper xml
 十二、测试
@SpringBootApplication
@ServletComponentScan
@ImportResource(locations = { "classpath:druid-bean.xml" }) public class SpringbootMybatisDruidApplication { public static void main(String[] args) { SpringApplication.run(SpringbootMybatisDruidApplication.class, args); } }
SpringBoot之使用Druid连接池以及SQL监控和spring监控
一、引入maven依赖
二、在application.properties配置文件中加入druid配置
三、配置webServlet
四、配置webFitler
五、扫描filter和servlet
六、不使用spring boot自动配置功能,手动初始化DataSource
八、spring监控之方法名正则匹配拦截配置
 九、引入配置
十、controller
十一、Mapper和mapper xml
 十二、测试

六、不使用spring boot自动配置功能,手动初始化DataSource

  • 描如果不使用代码手动初始化DataSource的话,监控界面的SQL监控会没有数据("是spring boot的bug???") 
SpringBoot之使用Druid连接池以及SQL监控和spring监控
一、引入maven依赖
二、在application.properties配置文件中加入druid配置
三、配置webServlet
四、配置webFitler
五、扫描filter和servlet
六、不使用spring boot自动配置功能,手动初始化DataSource
八、spring监控之方法名正则匹配拦截配置
 九、引入配置
十、controller
十一、Mapper和mapper xml
 十二、测试
package com.shyroke.configuration;

import java.sql.SQLException;

import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;

import com.alibaba.druid.pool.DruidDataSource;

@Configuration  
public class DruidConfigration {  
    @Value("${spring.datasource.url}")  
    private String dbUrl;  
    @Value("${spring.datasource.username}")  
    private String username;  
    @Value("${spring.datasource.password}")  
    private String password;  
    @Value("${spring.datasource.driver-class-name}")  
    private String driverClassName;  
    @Value("${spring.datasource.initialSize}")  
    private int initialSize;  
    @Value("${spring.datasource.minIdle}")  
    private int minIdle;  
    @Value("${spring.datasource.maxActive}")  
    private int maxActive;  
    @Value("${spring.datasource.maxWait}")  
    private int maxWait;  
    @Value("${spring.datasource.timeBetweenEvictionRunsMillis}")  
    private int timeBetweenEvictionRunsMillis;  
    @Value("${spring.datasource.minEvictableIdleTimeMillis}")  
    private int minEvictableIdleTimeMillis;  
    @Value("${spring.datasource.validationQuery}")  
    private String validationQuery;  
    @Value("${spring.datasource.testWhileIdle}")  
    private boolean testWhileIdle;  
    @Value("${spring.datasource.testOnBorrow}")  
    private boolean testOnBorrow;  
    @Value("${spring.datasource.testOnReturn}")  
    private boolean testOnReturn;  
    @Value("${spring.datasource.poolPreparedStatements}")  
    private boolean poolPreparedStatements;  
    @Value("${spring.datasource.maxPoolPreparedStatementPerConnectionSize}")  
    private int maxPoolPreparedStatementPerConnectionSize;  
    @Value("${spring.datasource.filters}")  
    private String filters;  
    @Value("${spring.datasource.connectionProperties}")  
    private String connectionProperties;  
    @Value("${spring.datasource.useGlobalDataSourceStat}")  
    private boolean useGlobalDataSourceStat;  
  
    @Bean     //声明其为Bean实例  
    @Primary  //在同样的DataSource中,首先使用被标注的DataSource  
    public DataSource dataSource(){  
        DruidDataSource datasource = new DruidDataSource();  
        datasource.setUrl(this.dbUrl);  
        datasource.setUsername(username);  
        datasource.setPassword(password);  
        datasource.setDriverClassName(driverClassName);  
  
        //configuration  
        datasource.setInitialSize(initialSize);  
        datasource.setMinIdle(minIdle);  
        datasource.setMaxActive(maxActive);  
        datasource.setMaxWait(maxWait);  
        datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);  
        datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);  
        datasource.setValidationQuery(validationQuery);  
        datasource.setTestWhileIdle(testWhileIdle);  
        datasource.setTestOnBorrow(testOnBorrow);  
        datasource.setTestOnReturn(testOnReturn);  
        datasource.setPoolPreparedStatements(poolPreparedStatements);  
        datasource.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize);  
        datasource.setUseGlobalDataSourceStat(useGlobalDataSourceStat);  
        try {  
            datasource.setFilters(filters);  
        } catch (SQLException e) {  
            System.err.println("druid configuration initialization filter: "+ e);  
        }  
        datasource.setConnectionProperties(connectionProperties);  
        return datasource;  
    }  
}  
SpringBoot之使用Druid连接池以及SQL监控和spring监控
一、引入maven依赖
二、在application.properties配置文件中加入druid配置
三、配置webServlet
四、配置webFitler
五、扫描filter和servlet
六、不使用spring boot自动配置功能,手动初始化DataSource
八、spring监控之方法名正则匹配拦截配置
 九、引入配置
十、controller
十一、Mapper和mapper xml
 十二、测试
  •  至此,SQL监控完成

八、spring监控之方法名正则匹配拦截配置

SpringBoot之使用Druid连接池以及SQL监控和spring监控
一、引入maven依赖
二、在application.properties配置文件中加入druid配置
三、配置webServlet
四、配置webFitler
五、扫描filter和servlet
六、不使用spring boot自动配置功能,手动初始化DataSource
八、spring监控之方法名正则匹配拦截配置
 九、引入配置
十、controller
十一、Mapper和mapper xml
 十二、测试

SpringBoot之使用Druid连接池以及SQL监控和spring监控
一、引入maven依赖
二、在application.properties配置文件中加入druid配置
三、配置webServlet
四、配置webFitler
五、扫描filter和servlet
六、不使用spring boot自动配置功能,手动初始化DataSource
八、spring监控之方法名正则匹配拦截配置
 九、引入配置
十、controller
十一、Mapper和mapper xml
 十二、测试
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd">

    <!-- 配置_Druid和Spring关联监控配置 -->
    <bean 
        class="com.alibaba.druid.support.spring.stat.DruidStatInterceptor"></bean>

    <!-- 方法名正则匹配拦截配置 -->
    <bean 
        scope="prototype">
        <property name="patterns">
            <list>
                <value>com.shyroke.mapper.*</value>
            </list>
        </property>
    </bean>

    <aop:config proxy-target-class="true">
        <aop:advisor advice-ref="druid-stat-interceptor"
            pointcut-ref="druid-stat-pointcut" />
    </aop:config>

</beans>
SpringBoot之使用Druid连接池以及SQL监控和spring监控
一、引入maven依赖
二、在application.properties配置文件中加入druid配置
三、配置webServlet
四、配置webFitler
五、扫描filter和servlet
六、不使用spring boot自动配置功能,手动初始化DataSource
八、spring监控之方法名正则匹配拦截配置
 九、引入配置
十、controller
十一、Mapper和mapper xml
 十二、测试

 九、引入配置

SpringBoot之使用Druid连接池以及SQL监控和spring监控
一、引入maven依赖
二、在application.properties配置文件中加入druid配置
三、配置webServlet
四、配置webFitler
五、扫描filter和servlet
六、不使用spring boot自动配置功能,手动初始化DataSource
八、spring监控之方法名正则匹配拦截配置
 九、引入配置
十、controller
十一、Mapper和mapper xml
 十二、测试
@SpringBootApplication
@ServletComponentScan
@ImportResource(locations = { "classpath:druid-bean.xml" })
public class SpringbootMybatisDruidApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootMybatisDruidApplication.class, args);
    }
}
SpringBoot之使用Druid连接池以及SQL监控和spring监控
一、引入maven依赖
二、在application.properties配置文件中加入druid配置
三、配置webServlet
四、配置webFitler
五、扫描filter和servlet
六、不使用spring boot自动配置功能,手动初始化DataSource
八、spring监控之方法名正则匹配拦截配置
 九、引入配置
十、controller
十一、Mapper和mapper xml
 十二、测试

十、controller

SpringBoot之使用Druid连接池以及SQL监控和spring监控
一、引入maven依赖
二、在application.properties配置文件中加入druid配置
三、配置webServlet
四、配置webFitler
五、扫描filter和servlet
六、不使用spring boot自动配置功能,手动初始化DataSource
八、spring监控之方法名正则匹配拦截配置
 九、引入配置
十、controller
十一、Mapper和mapper xml
 十二、测试
package com.shyroke.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.shyroke.bean.User;
import com.shyroke.mapper.UserMapper;

@Controller
@RequestMapping(value="/user")
public class UserController {

    @Autowired
    private UserMapper userMapper;
    
    @ResponseBody
    @RequestMapping(value="/get")
    public User get() {
        return userMapper.getOne(1);
    }
    
    @ResponseBody
    @RequestMapping(value="/list")
    public List<User> list() {
        return userMapper.list();
    }
    
    
}
SpringBoot之使用Druid连接池以及SQL监控和spring监控
一、引入maven依赖
二、在application.properties配置文件中加入druid配置
三、配置webServlet
四、配置webFitler
五、扫描filter和servlet
六、不使用spring boot自动配置功能,手动初始化DataSource
八、spring监控之方法名正则匹配拦截配置
 九、引入配置
十、controller
十一、Mapper和mapper xml
 十二、测试

十一、Mapper和mapper xml

SpringBoot之使用Druid连接池以及SQL监控和spring监控
一、引入maven依赖
二、在application.properties配置文件中加入druid配置
三、配置webServlet
四、配置webFitler
五、扫描filter和servlet
六、不使用spring boot自动配置功能,手动初始化DataSource
八、spring监控之方法名正则匹配拦截配置
 九、引入配置
十、controller
十一、Mapper和mapper xml
 十二、测试
package com.shyroke.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import com.shyroke.bean.User;

@Mapper
public interface UserMapper{

    List<User> list();

    User getOne(int id);
    
}
SpringBoot之使用Druid连接池以及SQL监控和spring监控
一、引入maven依赖
二、在application.properties配置文件中加入druid配置
三、配置webServlet
四、配置webFitler
五、扫描filter和servlet
六、不使用spring boot自动配置功能,手动初始化DataSource
八、spring监控之方法名正则匹配拦截配置
 九、引入配置
十、controller
十一、Mapper和mapper xml
 十二、测试
  • 因为application.properties配置了mybatis.mapper-locations=classpath:mybatis/*.xml
SpringBoot之使用Druid连接池以及SQL监控和spring监控
一、引入maven依赖
二、在application.properties配置文件中加入druid配置
三、配置webServlet
四、配置webFitler
五、扫描filter和servlet
六、不使用spring boot自动配置功能,手动初始化DataSource
八、spring监控之方法名正则匹配拦截配置
 九、引入配置
十、controller
十一、Mapper和mapper xml
 十二、测试
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.shyroke.mapper.UserMapper">

    <resultMap type="com.shyroke.bean.User" >
        <id column="id" property="id" />
        <result column="user_name" property="userName" />
        <result column="pass_word" property="passWord" />
        <result column="date" property="date" />
    </resultMap>

    <select >
        select * from users
    </select>

    <select >
        select * from users where id=#{id}
    </select>

</mapper>
SpringBoot之使用Druid连接池以及SQL监控和spring监控
一、引入maven依赖
二、在application.properties配置文件中加入druid配置
三、配置webServlet
四、配置webFitler
五、扫描filter和servlet
六、不使用spring boot自动配置功能,手动初始化DataSource
八、spring监控之方法名正则匹配拦截配置
 九、引入配置
十、controller
十一、Mapper和mapper xml
 十二、测试

 十二、测试

SpringBoot之使用Druid连接池以及SQL监控和spring监控
一、引入maven依赖
二、在application.properties配置文件中加入druid配置
三、配置webServlet
四、配置webFitler
五、扫描filter和servlet
六、不使用spring boot自动配置功能,手动初始化DataSource
八、spring监控之方法名正则匹配拦截配置
 九、引入配置
十、controller
十一、Mapper和mapper xml
 十二、测试

  • 先访问“http://localhost:8080/user/list”,再查看SQL监控和spring监控

SpringBoot之使用Druid连接池以及SQL监控和spring监控
一、引入maven依赖
二、在application.properties配置文件中加入druid配置
三、配置webServlet
四、配置webFitler
五、扫描filter和servlet
六、不使用spring boot自动配置功能,手动初始化DataSource
八、spring监控之方法名正则匹配拦截配置
 九、引入配置
十、controller
十一、Mapper和mapper xml
 十二、测试

SpringBoot之使用Druid连接池以及SQL监控和spring监控
一、引入maven依赖
二、在application.properties配置文件中加入druid配置
三、配置webServlet
四、配置webFitler
五、扫描filter和servlet
六、不使用spring boot自动配置功能,手动初始化DataSource
八、spring监控之方法名正则匹配拦截配置
 九、引入配置
十、controller
十一、Mapper和mapper xml
 十二、测试

SpringBoot之使用Druid连接池以及SQL监控和spring监控
一、引入maven依赖
二、在application.properties配置文件中加入druid配置
三、配置webServlet
四、配置webFitler
五、扫描filter和servlet
六、不使用spring boot自动配置功能,手动初始化DataSource
八、spring监控之方法名正则匹配拦截配置
 九、引入配置
十、controller
十一、Mapper和mapper xml
 十二、测试