精华内容
下载资源
问答
  • Druid线程池配置

    2021-02-20 14:27:11
    Druid线程池配置 配置基本线程池 pom文件依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.14</...

    Druid线程池配置

    配置基本线程池

    pom文件依赖

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

    yml配置

    
    spring:
        datasource:
            name: test
            url: jdbc:mysql://ip:3306/demo?useUnicode=true&characterEncoding=utf8&failOverReadOnly=false&secondsBeforeRetryMaster=0&queriesBeforeRetryMaster=0
              &serverTimezone=Asia/Shanghai&useSSL=false&connectTimeout=3000&socketTimeout=3000&allowMultiQueries=true&rewriteBatchedStatements=true
            driver-class-name: com.mysql.cj.jdbc.Driver
            username: ---
            password: ---
            # 使用druid数据源
            type: com.alibaba.druid.pool.DruidDataSource
            #连接池的补充设置
            #初始化大小,最小,最大
            initialSize: 5
            minIdle: 5
            maxActive: 20
            # 配置获取连接等待超时的时间
            maxWait: 60000
            # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
            timeBetweenEvictionRunsMillis: 60000
            # 配置一个连接在池中最小生存的时间,单位是毫秒
            minEvictableIdleTimeMillis: 300000
            # 校验SQL,Oracle配置 spring.datasource.validationQuery=SELECT 1 FROM DUAL,如果不配validationQuery项,则下面三项配置无用
            validationQuery: select 'x'
            testWhileIdle: true
            testOnBorrow: false
            testOnReturn: false
            # 打开PSCache,并且指定每个连接上PSCache的大小
            poolPreparedStatements: true
            maxPoolPreparedStatementPerConnectionSize : 20
            # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙,wall开启会导致flyway初始化失败错误:sql注入,操作不被允许执行
            filters: stat
            connectionProperties : druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
    

    duridConfig

    @Configuration
    @Slf4j
    public class DruidConfig {
        @Bean
        @ConfigurationProperties(prefix = "spring.datasource")
        public DataSource druidDataSource() {
            return new DruidDataSource();
        }
    }
    

    配置Durid-spring监控

    修改duridConfig

    package com.cmbchina.woolparty.common.config;
    
    import com.alibaba.druid.pool.DruidDataSource;
    import com.alibaba.druid.support.http.StatViewServlet;
    import com.alibaba.druid.support.http.WebStatFilter;
    import lombok.extern.slf4j.Slf4j;
    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 javax.sql.DataSource;
    /**
    * 类描述: 配置Druid监控SQL 注释掉亦可以使用连接池功能 只是不能监控SQL
    */
    @Configuration
    @Slf4j
    public class DruidConfig {
        @Bean
        @ConfigurationProperties(prefix = "spring.datasource")
        public DataSource druidDataSource() {
            return new DruidDataSource();
        }
    
        @Bean
        public ServletRegistrationBean druidServlet() {
            log.info("=================init Druid Servlet Configuration=================");
            ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
            // IP白名单
            //servletRegistrationBean.addInitParameter("allow", "127.0.0.1");
            // IP黑名单(共同存在时,deny优先于allow)
            //servletRegistrationBean.addInitParameter("deny", "192.168.1.100");
            //控制台管理用户
    //        servletRegistrationBean.addInitParameter("loginUsername", "admin");
    //        servletRegistrationBean.addInitParameter("loginPassword", "123456");
            //是否能够重置数据 禁用HTML页面上的“Reset All”功能
            //servletRegistrationBean.addInitParameter("resetEnable", "false");
            return servletRegistrationBean;
        }
    
        @Bean
        public FilterRegistrationBean filterRegistrationBean() {
            FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter());
            // 添加过滤规则
            filterRegistrationBean.addUrlPatterns("/*");
            // 添加不需要忽略的格式信息
            filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
            return filterRegistrationBean;
        }
    }
    
    

    DruidAspectConfig 配置Druid和Spring关联监控配置

    package com.cmbchina.woolparty.common.config;
    
    import com.alibaba.druid.support.spring.stat.DruidStatInterceptor;
    import org.springframework.aop.support.DefaultPointcutAdvisor;
    import org.springframework.aop.support.JdkRegexpMethodPointcut;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.EnableAspectJAutoProxy;
    import org.springframework.context.annotation.Scope;
    
    @Configuration
    @EnableAspectJAutoProxy(proxyTargetClass = true)
    public class DruidAspectConfig {
        @Bean
        public DruidStatInterceptor druidStatInterceptor() {
            DruidStatInterceptor dsInterceptor = new DruidStatInterceptor();
            return dsInterceptor;
        }
        @Bean
        @Scope("prototype")
        public JdkRegexpMethodPointcut druidStatPointcut() {
            JdkRegexpMethodPointcut pointcut = new JdkRegexpMethodPointcut();
            pointcut.setPatterns("com.cmbchina.woolparty.controller.*","com.cmbchina.woolparty.service.*");
            return pointcut;
        }
        @Bean
        public DefaultPointcutAdvisor druidStatAdvisor(DruidStatInterceptor druidStatInterceptor, JdkRegexpMethodPointcut druidStatPointcut) {
            DefaultPointcutAdvisor defaultPointAdvisor = new DefaultPointcutAdvisor();
            defaultPointAdvisor.setPointcut(druidStatPointcut);
            defaultPointAdvisor.setAdvice(druidStatInterceptor);
            return defaultPointAdvisor;
        }
    }
    

    项目常用地址及使用说明

    • swagger(接口调试地址):http://localhost:8080/swagger-ui.html
    • druid(SQL及Spring监控地址):http://localhost:8080/druid/index.html
    • metrics(SpringBoot监控运维地址): http://127.0.0.1:8080/browser/index.html 在Explorer输入/actuator即可
    展开全文
  • DruidDataSource配置及其常见问题汇总

    万次阅读 2018-08-01 16:24:15
    Spring学习总结(21)——Spring集成阿里巴巴数据库连接池DruidDataSource配置及其常见问题汇总 2017年01月13日 12:03:51 阅读数:6212 一、参考配置如下  &lt;bean id="dataSource" class="...

    Spring学习总结(21)——Spring集成阿里巴巴数据库连接池DruidDataSource配置及其常见问题汇总

    2017年01月13日 12:03:51

    阅读数:6212

    一、参考配置如下

       <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-             method="init" destroy-method="close">

          <!-- 数据库驱动 -->

          <property name="driverClassName" value="${jdbc.driverClassName}" />

          <!-- 基本属性 url、user、password -->

          <property name="url" value="${jdbc_url}" />

          <property name="username" value="${jdbc_user}" />

          <property name="password" value="${jdbc_password}" />

     

          <!-- 配置初始化大小、最小、最大 -->

          <property name="initialSize" value="1" />

          <property name="minIdle" value="1" />

          <property name="maxActive" value="20" />

     

          <!-- 配置获取连接等待超时的时间 -->

          <property name="maxWait" value="60000" />

     

          <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->

          <property name="timeBetweenEvictionRunsMillis" value="60000" />

     

          <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->

          <property name="minEvictableIdleTimeMillis" value="300000" />

     

          <property name="validationQuery" value="SELECT 'x'" />

          <property name="testWhileIdle" value="true" />

          <property name="testOnBorrow" value="false" />

          <property name="testOnReturn" value="false" />

     

          <!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->

          <property name="poolPreparedStatements" value="true" />

          <property name="maxPoolPreparedStatementPerConnectionSize" value="20" />

     

          <!-- 配置监控统计拦截的filters -->

          <property name="filters" value="stat" />

      </bean>

    通常来说,只需要修改initialSize、minIdle、maxActive。如果用Oracle,则把poolPreparedStatements配置为true,mysql可以配置为false。分库分表较多的数据库,建议配置为false。

    二、druid常见问题汇总:

    https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98

     

    (1). Druid是什么?

     

    Druid是Java语言中最好的数据库连接池。Druid能够提供强大的监控和扩展功能。

    (2). 在哪里下载druid

    (3). 怎么获取Druid的源码

    Druid是一个开源项目,源码托管在github上,源代码仓库地址是 https://github.com/alibaba/druid。同时每次Druid发布正式版本和快照的时候,都会把源码打包,你可以从上面的下载地址中找到相关版本的源码

    (4). 怎么配置maven

    Druid 0.1.18 之后版本都发布到maven中央仓库中,所以你只需要在项目的pom.xml中加上dependency就可以了。例如:

     
    1. <dependency>

    2. <groupId>com.alibaba</groupId>

    3. <artifactId>druid</artifactId>

    4. <version>${druid-version}</version>

    5. </dependency>

    6.  

    也可以选择 Maven仓库查找公共的仓库地址:http://www.mvnrepository.com/artifact/com.alibaba/druid

    (5). 怎么打开Druid的监控统计功能

    Druid的监控统计功能是通过filter-chain扩展实现,如果你要打开监控统计功能,配置StatFilter,具体看这里:https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_StatFilter

    (6). 怎样使用Druid的内置监控页面

    内置监控页面是一个Servlet,具体配置看这里:https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_StatViewServlet%E9%85%8D%E7%BD%AE

    (7). 内置监控中的Web和Spring关联监控怎么配置?

    (8). 怎么配置防御SQL注入攻击

    Druid提供了WallFilter,它是基于SQL语义分析来实现防御SQL注入攻击的。具体配置看这里:https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE-wallfilter

    (9). Druid有没有参考配置

    不同的业务场景需求不同,你可以使用我们的参考配置,但建议你仔细阅读相关文档,了解清楚之后做定制配置。https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_DruidDataSource%E5%8F%82%E8%80%83%E9%85%8D%E7%BD%AE

    (10). 我想日志记录JDBC执行的SQL,如何配置

    Druid提供了Log4jFilter、CommonsLogFilter和Slf4jFilter,具体配置看这里https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_LogFilter

    (11). 我的程序可能产生连接泄漏了,有什么办法?

    Druid提供了多种监测连接泄漏的手段,具体看这里:https://github.com/alibaba/druid/wiki/%E8%BF%9E%E6%8E%A5%E6%B3%84%E6%BC%8F%E7%9B%91%E6%B5%8B

    (12). 在Druid中使用PSCache会有内存占用过大问题么?

    连接Oracle数据库,打开PSCache,在其他的数据库连接池都会存在内存占用过多的问题,Druid是唯一解决这个问题的连接池。具体看这里:https://github.com/alibaba/druid/wiki/Oracle%E6%95%B0%E6%8D%AE%E5%BA%93%E4%B8%8BPreparedStatementCache%E5%86%85%E5%AD%98%E9%97%AE%E9%A2%98%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88

    (13). 有没有和其他数据库连接池的对比?

    (14). 从其他连接池迁移要注意什么?

    (15). Druid中有没有类似Jboss DataSource中的ExceptionSorter

    ExceptionSorter是JBoss DataSource中的优秀特性,Druid也有一样功能的ExceptionSorter,但不用手动配置,自动识别生效的。具体看这里:https://github.com/alibaba/druid/wiki/ExceptionSorter_cn

    (16). Druid中的maxIdle为什么是没用的?

    maxIdle是Druid为了方便DBCP用户迁移而增加的,maxIdle是一个混乱的概念。连接池只应该有maxPoolSize和minPoolSize,druid只保留了maxActive和minIdle,分别相当于maxPoolSize和minPoolSize。

    (17). 我的应用配置的是JNDI数据源,可以用DruidDataSource么?

    DruidDataSource支持JNDI配置,具体看这里:https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_JNDI_Tomcat 
    具体实现的类是这个:com.alibaba.druid.pool.DruidDataSourceFactory,你可以阅读代码加深理解。

    (18). 我的应用已使用DBCP,是代码中写死的,怎样更换为Druid?

    可以的,Druid提供了一个中完全平滑迁移DBCP的办法。

    这种用法,使得可以在一些非自己开发的应用中使用Druid,例如在sonar中部署druid,sonar是一个使用jruby开发的web应用,写死了DBCP,只能够通过这种方法来更换。

    (19). 我想试用快照版本,怎么获取?

    直接获取快照版本的地址是:http://code.alibabatech.com/mvn/snapshots/com/alibaba/druid/ ,使用快照版本建议加入我们QQ群 92748305,遇到问题直接反馈给我们。

    (20). 有一些SQL执行很慢,我希望日志记录下来,怎么设置?

    在StatFilter配置中有慢SQL执行日志记录,看这里https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_StatFilter

    (21). 我希望加密我的数据库密码怎么办?

    运维和DBA都不希望把密码明文直接写在配置文件中,Druid提供了数据库秘密加密的功能。具体看这里:https://github.com/alibaba/druid/wiki/%E4%BD%BF%E7%94%A8ConfigFilter

    (22). 如何参与Druid的开发

    Druid是一个通过github开源的项目,github的特性,使得你很容易参与其中。这里有详细说明https://github.com/alibaba/druid/wiki/%E5%A6%82%E4%BD%95%E5%8F%82%E4%B8%8E

    (23). Druid的发布周期是怎样?

    Druid是一个活跃的项目,长期维护。每个月有一个发布窗口,除非遇到重大bug和非常紧急的需求,否则都是每个月最多发布一次。如果没有足够多的需求,发布窗口就不会被使用。

    (24). 如果DruidDataSource在init的时候失败了,不再使用,是否需要close

    是的,如果DruidDataSource不再使用,必须调用close来释放资源,释放的资源包括关闭Create和Destory线程。

    (25). DruidDataSource支持哪些数据库?

    理论上说,支持所有有jdbc驱动的数据库。实际测试过的有

    数据库支持状态
    mysql支持,大规模使用
    oracle支持,大规模使用
    sqlserver支持
    postgres支持
    db2支持
    h2支持
    derby支持
    sqlite支持
    sybase支持

    (26). Oracle下jdbc executeBatch时,更新行数计算不正确

    使用jdbc的executeBatch 方法,如果数据库为oracle,则无论是否成功更新到数据,返回值都是-2,而不是真正被sql更新到的记录数,这是Oracle JDBC Driver的问题,Druid不作特殊处理。

    (27). Druid如何自动根据URL自动识别DriverClass的

    Druid是根据url前缀来识别DriverClass的,这样使得配置更方便简洁。

    前缀DriverCLass描述信息
    jdbc:odpscom.aliyun.odps.jdbc.OdpsDriver 
    jdbc:derbyorg.apache.derby.jdbc.EmbeddedDriver 
    jdbc:mysqlcom.mysql.jdbc.Driver 
    jdbc:oracleoracle.jdbc.driver.OracleDriver 
    jdbc:microsoftcom.microsoft.jdbc.sqlserver.SQLServerDriver 
    jdbc:sybase:Tdscom.sybase.jdbc2.jdbc.SybDriver 
    jdbc:jtdsnet.sourceforge.jtds.jdbc.Driver 
    jdbc:postgresqlorg.postgresql.Driver 
    jdbc:fakecom.alibaba.druid.mock.MockDriver 
    jdbc:mockcom.alibaba.druid.mock.MockDriver 
    jdbc:hsqldborg.hsqldb.jdbcDriver 
    jdbc:db2COM.ibm.db2.jdbc.app.DB2DriverDB2的JDBC Driver十分混乱,这个匹配不一定对
    jdbc:sqliteorg.sqlite.JDBC 
    jdbc:ingrescom.ingres.jdbc.IngresDriver 
    jdbc:h2org.h2.Driver 
    jdbc:mckoicom.mckoi.JDBCDriver 
    jdbc:cloudscapeCOM.cloudscape.core.JDBCDriver 
    jdbc:informix-sqlicom.informix.jdbc.IfxDriver 
    jdbc:timestencom.timesten.jdbc.TimesTenDriver 
    jdbc:as400com.ibm.as400.access.AS400JDBCDriver 
    jdbc:sapdbcom.sap.dbtech.jdbc.DriverSapDB 
    jdbc:JSQLConnectcom.jnetdirect.jsql.JSQLDriver 
    jdbc:JTurbocom.newatlanta.jturbo.driver.Driver 
    jdbc:firebirdsqlorg.firebirdsql.jdbc.FBDriver 
    jdbc:interbaseinterbase.interclient.Driver 
    jdbc:pointbasecom.pointbase.jdbc.jdbcUniversalDriver 
    jdbc:edbcca.edbc.jdbc.EdbcDriver 
    jdbc:mimer:multi1com.mimer.jdbc.Driver 

    (28). 如何保存监控记录

    https://github.com/alibaba/druid/wiki/%E6%80%8E%E4%B9%88%E4%BF%9D%E5%AD%98Druid%E7%9A%84%E7%9B%91%E6%8E%A7%E8%AE%B0%E5%BD%95

    (29). 我想Log输出SQL执行的信息怎么办?

    https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_LogFilter

    (30). 如何配置Druid内置的log实现

    https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AEdruid%E5%86%85%E7%BD%AE%E7%9A%84log%E5%AE%9E%E7%8E%B0

     

    31. 如何在Spring Boot中集成Druid连接池和监控?

     

    使用Druid Spring Boot Starter,文档地址:https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter

     

    展开全文
  • Druid参考配置

    2019-06-29 01:01:55
    pom中的maven dependency <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.9</ver...

     

    pom中的maven dependency

            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>1.1.9</version>
            </dependency>

    druid连接池,wiki推荐的参考配置

    来自https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_DruidDataSource%E5%8F%82%E8%80%83%E9%85%8D%E7%BD%AE
    DruidDataSource参考配置
    温绍锦 edited this page on 5 Mar · 6 revisions
    以下是一个参考的连接池配置:

      <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> 
          <!-- 基本属性 url、user、password -->
          <property name="url" value="${jdbc_url}" />
          <property name="username" value="${jdbc_user}" />
          <property name="password" value="${jdbc_password}" />
            
          <!-- 配置初始化大小、最小、最大 -->
          <property name="initialSize" value="1" />
          <property name="minIdle" value="1" /> 
          <property name="maxActive" value="20" />
       
          <!-- 配置获取连接等待超时的时间 -->
          <property name="maxWait" value="60000" />
       
          <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
          <property name="timeBetweenEvictionRunsMillis" value="60000" />
       
          <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
          <property name="minEvictableIdleTimeMillis" value="300000" />
        
          <property name="validationQuery" value="SELECT 'x'" />
          <property name="testWhileIdle" value="true" />
          <property name="testOnBorrow" value="false" />
          <property name="testOnReturn" value="false" />
       
          <!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->
          <property name="poolPreparedStatements" value="true" />
          <property name="maxPoolPreparedStatementPerConnectionSize" value="20" />
       
          <!-- 配置监控统计拦截的filters -->
          <property name="filters" value="stat" /> 
      </bean>


    通常来说,只需要修改initialSize、minIdle、maxActive。

    注意事项

        如果用Oracle,则把poolPreparedStatements配置为true,mysql可以配置为false。分库分表较多的数据库,建议配置为false。
        removeabandoned不建议在生产环境中打开

     

    转载于:https://www.cnblogs.com/godwithus/p/8870762.html

    展开全文
  • Druid 加密配置

    千次阅读 2019-11-23 13:50:14
    Druid 加密配置 前言 总结 具体步骤 1. 生产密钥 2. 环境配置 1. 依赖配置: 2. druid和spring配置: 3. druid实现原理 相关错误 参考资料 前言 一般来说, 链接数据库的密码是明文存放的, 这样不安全, 任意获取到...

    前言

    一般来说, 链接数据库的密码是明文存放的, 这样不安全, 任意获取到密码配置的人都可以获取到数据库的连接密码, 导致不安全的产生. druid有密码加密功能, 可以解决这个问题. druid使用rsa加密方式进行密码保护.(并不规范: 在后续问题中会讲)

    总结

    要配置druid密钥,
    a. 配置connectionProperties属性: config.decrypt=true;config.decrypt.key=公钥
    b. spring.datasource.password设置用私钥加密后的密码
    注意:

    1. 尽量不要用 druid自带的加密解密方式, 可以在 druid的自定义配置类里面加上自己的解密方法.
    2. 如果一定要用druid自带的rsa加密解密方式, 请不要用自带的默认公钥/私钥
    3. 另外druid自带的加密, 可以使用自定义"com.alibaba.druid.util.DruidPasswordCallback", 来实现自己的加密解密实现.

    具体步骤

    1. 生产密钥

    参考资料: 1. druid加密测试类

    2. 环境配置

    这里主要有1. 依赖配置. 2. 参数配置.

    1. 依赖配置:

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
       <modelVersion>4.0.0</modelVersion>
       <parent>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-parent</artifactId>
           <version>2.1.4.RELEASE</version>
           <relativePath/>
           <!-- lookup parent from repository -->
       </parent>
       <groupId>com.example</groupId>
       <artifactId>spring-boot-mybitis-demo</artifactId>
       <version>0.0.1-SNAPSHOT</version>
       <packaging>war</packaging>
       <name>spring-boot-mybitis-demo</name>
       <description>Demo project for Spring Boot</description>
    
       <properties>
       	<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
       	<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
       	<java.version>1.8</java.version>
       	<!-- 数据源 -->
       	<druid>1.1.20</druid>
       </properties>
    
       <dependencies>
           <dependency>
               <groupId>org.springframework.boot</groupId>
               <artifactId>spring-boot-starter-web</artifactId>
           </dependency>
       	<dependency>
       		<groupId>org.springframework.boot</groupId>
       		<artifactId>spring-boot-configuration-processor</artifactId>
       		<optional>true</optional>
       	</dependency>
       	<dependency>
       		<groupId>org.springframework.boot</groupId>
       		<artifactId>spring-boot-devtools</artifactId>
       		<scope>runtime</scope>
       		<optional>true</optional>
       	</dependency>
           <dependency>
               <groupId>org.springframework.boot</groupId>
               <artifactId>spring-boot-starter-test</artifactId>
               <scope>test</scope>
           </dependency>
    
           <!-- Mysql 驱动-->
           <dependency>
               <groupId>mysql</groupId>
               <artifactId>mysql-connector-java</artifactId>
               <scope>runtime</scope>
           </dependency>
            <!-- H2 驱动-->
       	<dependency>
       		<groupId>com.h2database</groupId>
       		<artifactId>h2</artifactId>
       		<scope>runtime</scope>
       	</dependency>
    		<!-- Druid 数据连接池依赖 -->
       	<dependency>
       		<groupId>com.alibaba</groupId>
       		<artifactId>druid</artifactId>
       		<version>${druid}</version>
       	</dependency>
       </dependencies>
    
       <build>
           <plugins>
               <plugin>
                   <groupId>org.springframework.boot</groupId>
                   <artifactId>spring-boot-maven-plugin</artifactId>
               </plugin>
           </plugins>
       </build>
    
    </project>
    
    

    2. druid和spring配置:

    需要特别说明的是, 我导入的不是druid-starter, spring boot不会自动注入druid的配置, 需要写个druidconfig类进行配置.
    这里有2个关注点:

    1. 配置中的属性spring.datasource.password
    #spring配置
    spring:
    devtools:
      restart:
        enabled: true
    #数据源配置
    datasource:
      driverClassName: org.h2.Driver
      url: jdbc:h2:mem:manage_db_test
      username: sa
      password: g31I5n/mlZBjZ3exuGppj12e9ofGUsTas12Xel4v+QB4uL04NqShZRLo1JqSLE9AjjdHgip/4p83GfQYdlf7VaIuVqbueSwIGSpqJu4eI/DKwdO6PqM4SUGoTXbkl4rbEC5SoNgOSZC+jk2PtFW3lEKBHXAkVWnvDAidD9Znd+GNMb7uHOYxKQxPkWyKI1eYYjAn9r70VAX5JYpCnINhcLG1p6EgzI0jXZSzyw2BW3eVdgaDfSHAYqL0inxGcvheXW65LuPHNbNSM2tK2md6mmG1U8GhAvUF/to3pax6QfJ7Lt1EEBb+fCKShQTFOO8i8bXV4TyIVkwlmxm3r9BnXA==
      type: com.alibaba.druid.pool.DruidDataSource
    

    spring.datasource.password: 配置加密后的密码(私钥),省略

    1. druid配置中的属性connectProperties
    connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500;config.decrypt=true;config.decrypt.key=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4P05ueQepxMJdZtm73eFEmL0wTZb7XN+PL7qdvttPhRrgSPLyTGh4sELFCLurOBC2R/rTysJ0K8Z5wuC1N2RYZ+SRQIIa9FvdlO30VrCstfJUGKlsuOqFKqcdm4nG/qOOAu0OKX2MYiwCnoyNl9fLS4jb6I9aNFJRAzlkzKXTH2gVuQxTyKT9z08uMfuxi7BxrTTY9+Ypqp8hqHDo+mN4i1CFKBx0xmUEp9TasiFCPabdbX2KmoPpH2iZZrvg0wSIxwRN42fwmuz+vZYytxq8x0vqFMr2GTpqMCBLYI3Q4JT2YHIfNc7y1LaHJliogL9HlPqz0Aox087vOTjomuXxQIDAQAB
    

    config.decrypt(开启druid自带加密,必须):开启加密: true
    config.decrypt.key(开启druid自带加密,必须):设置加密密钥(公钥),省略
    config.file(开启druid自带加密,可选): 可以设置配置文件,适合管理配置或集群配置, 比如: 1. 文件路径 2. 网络地址(集群配置)
    password(开启druid自带加密,可选): 密码配置, 可以在spring.datasource.password中不配置, 而在connectionProperties中配置

    以下是详细配置

    #spring配置
    spring:
     devtools:
       restart:
         enabled: true
     #数据源配置
     datasource:
       driverClassName: org.h2.Driver
       url: jdbc:h2:mem:manage_db_test
       username: sa
       password: g31I5n/mlZBjZ3exuGppj12e9ofGUsTas12Xel4v+QB4uL04NqShZRLo1JqSLE9AjjdHgip/4p83GfQYdlf7VaIuVqbueSwIGSpqJu4eI/DKwdO6PqM4SUGoTXbkl4rbEC5SoNgOSZC+jk2PtFW3lEKBHXAkVWnvDAidD9Znd+GNMb7uHOYxKQxPkWyKI1eYYjAn9r70VAX5JYpCnINhcLG1p6EgzI0jXZSzyw2BW3eVdgaDfSHAYqL0inxGcvheXW65LuPHNbNSM2tK2md6mmG1U8GhAvUF/to3pax6QfJ7Lt1EEBb+fCKShQTFOO8i8bXV4TyIVkwlmxm3r9BnXA==
       type: com.alibaba.druid.pool.DruidDataSource
       ##数据初始化设置
       #进行该配置后,每次启动程序,程序都会运行
       schema: classpath:db/schema.sql
       #进行该配置后,每次启动程序,程序都会运行
       data: classpath:db/data.sql
       #表明使用的数据库平台是h2
       platform: h2
       ## druid 配置,Spring Boot 默认是不注入不了这些属性值的,需要自己绑定#druid 数据源专有配置
       druid:
         initialSize: 5
         minIdle: 5
         maxActive: 20
         # 配置获取连接等待超时的时间
         maxWait: 60000
         # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
         timeBetweenEvictionRunsMillis: 60000
         # 配置一个连接在池中最小生存的时间,单位是毫秒
         minEvictableIdleTimeMillis: 300000
         validationQuery: SELECT 1 FROM DUAL
         #申请连接的时候检测,建议配置为true,不影响性能,并且保证安全性
         testWhileIdle: true
         #获取连接时执行检测,建议关闭,影响性能
         testOnBorrow: false
         #归还连接时执行检测,建议关闭,影响性能
         testOnReturn: false
         #是否开启PSCache,PSCache对支持游标的数据库性能提升巨大,oracle建议开启,mysql下建议关闭
         poolPreparedStatements: true
         #开启poolPreparedStatements后生效
         maxPoolPreparedStatementPerConnectionSize: 20
         #配置监控统计拦截的filters,stat:监控统计、log4j:日志记录、wall:防御sql注入,去掉后监控界面sql无法统计,'wall'用于防火墙
         #config是为了数据库加密
         filters: stat,wall,log4j2,config
         # 合并多个DruidDataSource的监控数据 
         useGlobalDataSourceStat: false
         # 通过connectProperties属性来打开mergeSql功能;慢SQL记录: 500毫秒
         connectionProperties: "druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500;config.decrypt=true;config.decrypt.key=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4P05ueQepxMJdZtm73eFEmL0wTZb7XN+PL7qdvttPhRrgSPLyTGh4sELFCLurOBC2R/rTysJ0K8Z5wuC1N2RYZ+SRQIIa9FvdlO30VrCstfJUGKlsuOqFKqcdm4nG/qOOAu0OKX2MYiwCnoyNl9fLS4jb6I9aNFJRAzlkzKXTH2gVuQxTyKT9z08uMfuxi7BxrTTY9+Ypqp8hqHDo+mN4i1CFKBx0xmUEp9TasiFCPabdbX2KmoPpH2iZZrvg0wSIxwRN42fwmuz+vZYytxq8x0vqFMr2GTpqMCBLYI3Q4JT2YHIfNc7y1LaHJliogL9HlPqz0Aox087vOTjomuXxQIDAQAB"
         # Druid StatViewServlet配置
         stat-view-servlet:
           enabled: true
           url-pattern: /druid/*
           reset-enable: true
           login-username: admin
           login-password: admin
           allow: '127.0.0.1,10.0.0.1'
           deny: '10.0.0.1'
         # Druid WebStatFilter配置
         web-stat-filter:
           enabled: true
           url-pattern: /*
           exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,*.html'
           # profileEnable能够监控单个url调用的sql列表
           profileEnable: true
    

    3. druid实现原理

    具体流程, 请查看源代码:
    com.alibaba.druid.filter.config.ConfigFilter
    com.alibaba.druid.filter.config.ConfigTools

    相关错误

    1. DER input, Integer tag error
      异常信息:
    Exception in thread “main” java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: IOException : DER input, Integer tag error 
    

    这是由于, druid使用的是私钥加密, 公钥解密, 如果反了就会出错, 这也是druid加密不规范的地方, 具体是什么原因请看[参考资料2].

    1. Decryption error
      异常信息:
    javax.crypto.BadPaddingException: Decryption error
    	at sun.security.rsa.RSAPadding.unpadV15(RSAPadding.java:380)
    	at sun.security.rsa.RSAPadding.unpad(RSAPadding.java:291)
    	at com.sun.crypto.provider.RSACipher.doFinal(RSACipher.java:356)
    	at com.sun.crypto.provider.RSACipher.engineDoFinal(RSACipher.java:389)
    	at javax.crypto.Cipher.doFinal(Cipher.java:2165)
    	at com.alibaba.druid.filter.config.ConfigTools.decrypt(ConfigTools.java:151)
    	at com.alibaba.druid.filter.config.ConfigTools.decrypt(ConfigTools.java:65)
    	at com.example.spring.boot.mybatis.util.code.ConfigToolsDemo.demo2(ConfigToolsDemo.java:44)
    	at com.example.spring.boot.mybatis.util.code.ConfigToolsDemo.main(ConfigToolsDemo.java:76)
    

    这是由于, 密码密钥不匹配检查加密解密流程.

    参考资料

    1. druid加密测试类: https://blog.csdn.net/kwaeh/article/details/103213447
    2. 历史原因, 使用私钥加密, 公钥解密. https://github.com/alibaba/druid/issues/960
    3. druid参考资料: https://github.com/alibaba/druid/wiki/使用ConfigFilter
    展开全文
  • springboot2 与 Druid 有关配置1. 构成1.1 pom.xml 文件1.2 application.properties 文件1.3 y_student.sql 文件1.4 DruidConfig.java 文件1.5 Springboot04ApplicationTests.java 文件1.6 YStudentController.java ...
  • pom中添加Druid数据源的依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.17</version> </...
  • druid 傻瓜配置详解 转载:Druid介绍及入门 [https://blog.csdn.net/qq_27466827/article/details/82777112] 1.pom添加依赖 <dependency> <groupId>com.alibaba</groupId> <...
  • DruidDataSource配置 阿里数据源

    万次阅读 2015-12-29 18:37:29
    maven pom 配置 com.alibaba druid 1.0.13 数据源配置: 最后有详细说明参数的作用 destroy-method="close"> --> /> --> --> 注意:...
  • #数据库连接配置 spring: datasource: username: root password: 1234 url: jdbc:mysql://localhost:3306/lianxi?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC driver-class-name: ...
  • 打开pom.xml,将maven配置进去,配置完会自动联网下载该包相关的类,需稍等片刻 该包获取的地址为: https://mvnrepository.com/artifact/com.alibaba/druid 可以在该地址自行选择druid的版本, 在这里我用的是最新...
  • 各种Druid详细配置讲解

    千次阅读 2017-12-01 14:50:53
    1. Druid是什么? Druid是Java语言中最好的数据库连接池。Druid能够提供强大的监控和扩展功能。 2. 在哪里下载druid 正式版本下载: maven中央仓库: http://central.maven.org/maven2/com/alibaba/druid/  ...
  • Spring boot之使用Druid配置SQL监控

    千次阅读 2017-07-19 10:57:05
    1,pom.xml文件中引入Druid依赖 dependency> groupId>com.alibabagroupId> artifactId>druid-spring-boot-starterartifactId> version>1.1.1version> dependency> 2,application.properties中配置druid参数
  • springboot整合druid配置数据访问监控
  • Mysql Druid配置

    千次阅读 2019-11-04 11:28:22
    文章目录第一步:通过start.spring.io新建一个spring boot项目第二步:配置pom.xml文件第三步:配置application.properties第四步:访问http://localhost:8080/druid/login.html显示源码地址 第一步:通过start.spring.io...
  • pom文件中增加druid的引入依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.13</version> &...
  • 1、pom.xml文件引入如下配置:截图及代码如下: <?xml version="1.0" encoding="UTF-8"?> <project xmlns=...
  • 整合Druid ...修改pom引入druid数据源: <!-- https://mvnrepository.com/artifact/com.alibaba/druid --> <dependency> <groupId>com.alibaba</groupId> <artifa...
  • Spring boot之使用Druid配置SQL监控 Druid是一个关系型数据库连接池,它是阿里巴巴的一个开源项目。Druid支持所有JDBC兼容数据库,包括了Oracle、MySQL、PostgreSQL、SQL Server、H2等。 Druid在监控、可扩展性...
  • 一 导入pom.xml &lt;!-- druid --&gt; &lt;dependency&gt; &lt;groupId&gt;com.alibaba&lt;/groupId&gt; &lt;artifactId&gt;druid&lt;/artifactId&gt; &...
  • springboot druid 配置

    2021-08-15 20:36:08
    Druid是阿里巴巴开发的一个连接池,他提供了一个高效、功能强大、...首先pom引入依赖 <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.
  • spring-boot 连接池 druid配置及监控

    万次阅读 2017-01-04 12:06:18
    连接池 Druid 简介 Druid是Java中最好的数据库连接池,并且能够提供强大的监控和扩展功能。业界把Druid和HikariCP做对比后,虽说HikarCP的性能比Druid高,但是因为Druid包括很多维度的统计和分析功能,所以也是大家...
  • SpringData-整合Druid配置数据源监控
  • pom文件中引入依赖 在application.yml里边添加配置 想要在yml里边配置更多,则需要: 但是这并不能起作用,还应该这样做: 做一个完整的上图的代码: 导入druid数据源 @Configuration ...
  • springboot集成druid连接池配置

    万次阅读 2019-06-02 23:53:00
    springboot集成druid连接池配置 在开发项目中如果数据库选型为mysql,很大概率下连接池会使用druid 这里介绍springboot集成durid springboot集成druid配置 需要引入的pom <dependency> <groupId>...
  • 1.引入pom文件 &lt;!-- mysql-connector-java MySQL数据库 --&gt; &lt;dependency&gt; &lt;groupId&gt;mysql&lt;/groupId&gt; &lt;artifactId&gt;mysql-connector-java...
  • pom.xml &lt;!-- alibaba的druid数据库连接池 --&gt; &lt;dependency&gt; &lt;groupId&gt;com.alibaba&lt;/groupId&gt; &lt;artifactId&gt;druid-spring-boot-...
  • 版权声明:本文为博主原创文章,无需授权即可转载,甚至无需保留以上...Druid数据源配置和监控配置一、Druid1、Druid是什么2、Druid的Maven1)Maven2)pom3、Druid的github源码地址二、Druid配置及详解1、applica...
  • Druid 介绍及配置

    千次阅读 2018-12-13 16:02:42
    Druid 介绍及配置 1. Druid是什么? Druid是Java语言中最好的数据库连接池。Druid能够提供强大的监控和扩展功能。 2. 在哪里下载druid 正式版本下载: maven中央仓库: ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 24,755
精华内容 9,902
热门标签
关键字:

druidpom配置