接触了druid后,一开始一知半解,而且配置复杂,都不清楚每种配置的实现了那些问题,经过整理总结如下

# 项目contextPath
server.servlet.context-path=/
# 服务端口
server.port=8189

######Druid数据源配置######
#连接池
spring.datasource.type = com.alibaba.druid.pool.DruidDataSource
# JDBC配置
spring.datasource.url=jdbc:sqlserver://xxx.xxx.xxx.xxx;SelectMethod=cursor;Databasename=??????
spring.datasource.username=xx
spring.datasource.password=xxx

# 生成的公钥
public-key = MFwwDQYJKoZIhvcNAQE==
# 配置 connection-properties,启用加密,配置公钥。
spring.datasource.druid.connection-properties = config.decrypt=true;config.decrypt.key=${public-key}
# 必须启用ConfigFilter,否则加密无效
spring.datasource.druid.filter.config.enabled = true

spring.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver

# 连接池配置,配置_DruidDataSource参考配置
spring.datasource.druid.initial-size=5
spring.datasource.druid.max-active=20
spring.datasource.druid.min-idle=1
  ##获取连接等待超时的时间
spring.datasource.druid.max-wait=60000
spring.datasource.druid.pool-prepared-statements=true
spring.datasource.druid.max-pool-prepared-statement-per-connection-size=5
spring.datasource.druid.validation-query=select 1
spring.datasource.druid.validation-query-timeout=1
spring.datasource.druid.test-on-borrow=false
spring.datasource.druid.test-on-return=false
spring.datasource.druid.test-while-idle=true
  ##间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
spring.datasource.druid.time-between-eviction-runs-millis=60000
  ##一个连接在池中最小生存的时间,单位是毫秒
spring.datasource.druid.min-evictable-idle-time-millis=30001
spring.datasource.druid.async-close-connection-enable=true
  ##监控统计拦截的filters,去掉后监控界面sql无法统计,’wall’用于防火墙
spring.datasource.druid.filters=stat,wall,log4j

######Druid监控配置######
#StatViewServlet配置
spring.datasource.druid.stat-view-servlet.enabled=true
spring.datasource.druid.stat-view-servlet.url-pattern=/druid/*
spring.datasource.druid.stat-view-servlet.reset-enable=false
spring.datasource.druid.stat-view-servlet.login-username=admin
spring.datasource.druid.stat-view-servlet.login-password=admin
spring.datasource.druid.stat-view-servlet.allow=
spring.datasource.druid.stat-view-servlet.deny=

#配置_statFilter
spring.datasource.druid.filter.stat.enabled=true
spring.datasource.druid.filter.stat.db-type=sqlserver
#慢SQL记录
spring.datasource.druid.filter.stat.log-slow-sql=true
spring.datasource.druid.filter.stat.slow-sql-millis=2000

# 监控过滤器
spring.datasource.druid.web-stat-filter.enabled = true
spring.datasource.druid.web-stat-filter.exclusions=*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*

# 配置_Druid和Spring关联监控配置
#如果spring.datasource.druid.aop-patterns要代理的类没有定义interface请设置spring.aop.proxy-target-class=true
spring.datasource.druid.aop-patterns=cn.cncfr.druid_demo.service.*

#身份标识 从session中获取
spring.datasource.druid.web-stat-filter.principal-session-name=username
#身份标识 从cookie中获取 例如cookie中存gk=xiaoming 设置属性为gk即可
#user信息保存在cookie中,你可以配置principalCookieName,使得druid知道当前的user是谁
spring.datasource.druid.web-stat-filter.principal-cookie-name=username
#配置profileEnable能够监控单个url调用的sql列表。
spring.datasource.druid.web-stat-filter.profile-enable=true



##################################
#
#THYMLEAF spring boot 2.x
#
##################################
spring.aop.proxy-target-class=true
spring.thymeleaf.mode=HTML
#关闭thymeleaf的缓存,不然在开发过程中修改页面不会立刻生效需要重启,生产可配置为true
spring.thymeleaf.cache=false

#JPA
#防止字段驼峰转换为_
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
#字段全大写的情况
spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl
spring.jpa.database = sql_server
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=false

注意几点:
1.pom引入时,只引入,不要引入durid

 <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.2.8</version>
        </dependency>

2.关于数据库密码加密,设置完加密密码和publickey后,还要设置

# 配置 connection-properties,启用加密,配置公钥。
spring.datasource.druid.connection-properties = config.decrypt=true;config.decrypt.key=${public-key}
# 必须启用ConfigFilter,否则加密无效
spring.datasource.druid.filter.config.enabled = true

否则,加密密码无效
3.新版本不要通过@Configuration来配置DataSource,否则管理页面中,SQL监控页面中会没有数据.
4. 当时通过配置DruidConfig,SQL监控页面始终没有数据显示,调试两天,发现console中,druid.common.js中的replace函数报错,导致显示,改用3的方案后正常了

 @Configuration
  @ConfigurationProperties(prefix = "spring.datasource") //读取     application.properties里的内容
  public class DruidConfig {
    private Logger logger = LoggerFactory.getLogger(DruidConfig.class);  

 //注册 Servlet 组件
    //配置Druid的监控
    //配置一个管理后台的Servlet
    @Bean
    public ServletRegistrationBean statViewServlet(){
        ServletRegistrationBean servletRegistrationBean =
                new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
        /*servletRegistrationBean.addInitParameter("allow", "192.168.1.3"); //白名单IP*/
        servletRegistrationBean.addInitParameter("allow", "");//白名单
        servletRegistrationBean.addInitParameter("deny", "");//黑名单
        servletRegistrationBean.addInitParameter("loginUsername", "admin");
        servletRegistrationBean.addInitParameter("loginPassword", "admin");
        servletRegistrationBean.addInitParameter("resetEnable", "false");//是否可以重置数据源
        return servletRegistrationBean;
    } // 注册 Filter 组件
    @Bean
    public FilterRegistrationBean statFilter(){
        // 创建过滤器
        FilterRegistrationBean<WebStatFilter> filterRegistrationBean = new FilterRegistrationBean<WebStatFilter>(new WebStatFilter());
        // 设置过滤器过滤路径
        filterRegistrationBean.addUrlPatterns("/*");
        // 忽略过滤的形式
        filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
        return filterRegistrationBean;

    }


    //配置数据源

    @Bean
    public DataSource dataSource() throws Exception {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
        dataSource.setUrl(url);
        dataSource.setUsername(username);
        dataSource.setPassword(ConfigTools.decrypt(publickey, password));
        dataSource.setMaxActive(maxActive);
        dataSource.setInitialSize(initialSize);

        try {
            //dataSource.setFilters(filters);
            dataSource.addFilters("stat");
            dataSource.addFilters("wall");
        } catch (SQLException e) {
            //do nothing
            logger.error("注入filter失败");
        }
        dataSource.setMaxWait(maxWait);
        dataSource.setMinIdle(minIdle);
        System.out.println("================Druid数据源已配置成功=============");
        return dataSource;
    }
![sql监控页效果](https://img-blog.csdnimg.cn/13d24e5a2a8e4b44aea1ab81cae7d32e.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAeGlqaWFyag==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
![spring监控页效果](https://img-blog.csdnimg.cn/d48060461c574daaac1a3ed5d1305577.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAeGlqaWFyag==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐