您的位置:

详解德鲁伊连接池

一、德鲁伊连接池密码要改吗

德鲁伊连接池数据库配置文件中包含数据库密码,这样会导致密码泄露的风险,因此建议修改德鲁伊数据库密码。修改密码的具体步骤如下:

public class Test {
    public static void main(String[] args) {
        String password = "oldPassword"; //旧密码
        String newPassword = "newPassword"; //新密码
        String druidPassword = "XXX"; //加密后的密码

        String data = "jdbc:mysql://localhost:3306/druid";
        String encryptPassword = DruidPasswordUtil.encrypt(password, data); //加密
        if(encryptPassword .equals(druidPassword)) {
            String newEncryptPassword = DruidPasswordUtil.encrypt(newPassword, data); //加密新密码
            System.out.println(newEncryptPassword);
        }
    }
}

二、德鲁伊数据连接池配置

在使用德鲁伊数据连接池之前,需要在pom文件中引入德鲁伊依赖,具体如下:

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

德鲁伊数据连接池的配置主要包括:

1、连接池名称设置

2、JDBC驱动设置

3、数据库连接字符串设置

4、用户名和密码设置

5、连接池参数设置

6、过滤器设置

@Configuration
public class DruidConfig {
    private Logger logger = LoggerFactory.getLogger(DruidConfig.class);

    @Bean
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource druid() {
        return new DruidDataSource();
    }

    @Bean
    public ServletRegistrationBean statViewServlet() {
        //配置Druid监控平台
        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", "druid");
        //密码
        servletRegistrationBean.addInitParameter("loginPassword", "123456");
        //是否显示SQL监控
        servletRegistrationBean.addInitParameter("logSlowSql", "true");
        logger.info("开启Druid监控");
        return servletRegistrationBean;
    }

    @Bean
    public FilterRegistrationBean webStatFilter() {
        //配置Druid监控拦截器
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
        filterRegistrationBean.setFilter(new WebStatFilter());
        //过滤规则
        filterRegistrationBean.addUrlPatterns("/*");
        //过滤静态资源
        filterRegistrationBean.addInitParameter("exclusions", "*.css,*.js,*.html,/druid/*");
        return filterRegistrationBean;
    }

}

三、德鲁伊连接池教程

德鲁伊连接池是目前比较流行的Java连接池之一,它不仅可以完美整合一些主流框架,而且提供了很多高级特性。

德鲁伊连接池的使用流程如下:

1、添加德鲁伊连接池依赖

2、在配置文件中对德鲁伊连接池进行配置

3、在代码中获取连接池对象

4、从连接池对象中获取连接

5、将连接返回连接池

@Configuration
public class TestConfig {

    @Autowired
    private DataSource dataSource;

    @Bean
    public JdbcTemplate jdbcTemplate() {
        return new JdbcTemplate(dataSource);
    }

    public void test() {
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        try {
            //从连接池中获取连接
            conn = dataSource.getConnection();
            String sql = "SELECT * FROM user";
            pstmt = conn.prepareStatement(sql);
            rs = pstmt.executeQuery();
            while(rs.next()) {
                System.out.println("user_id:" + rs.getInt("user_id") + ",user_name:" + rs.getString("user_name"));
            }
        } catch(SQLException e) {
            e.printStackTrace();
        } finally {
            //将连接返回连接池
            try {
                if(rs != null) rs.close();
                if(pstmt != null) pstmt.close();
                if(conn != null) conn.close();
            } catch(SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

四、德鲁伊连接池有什么用

德鲁伊连接池主要用于解决数据库连接过多、连接被耗尽、效率低下等问题。通过使用连接池,可以避免频繁地创建、关闭数据库连接,提高了数据库连接的效率和稳定性。

五、德鲁伊连接池优缺点

德鲁伊连接池的优点有:

1、提高了数据库连接使用效率和稳定性

2、提供丰富的监控、统计功能,便于问题排查

3、配合Druid监控平台可以监控SQL语句

4、支持JDBC和Datasource数据源类型

德鲁伊连接池的缺点有:

1、需要在应用启动前进行初始化,占用一定的时间

2、默认配置较为保守,没有发挥出德鲁伊连接池的高级特性

六、德鲁伊连接池源码

德鲁伊连接池源码下载地址:

https://github.com/alibaba/druid

七、德鲁伊连接池配置参数

在使用德鲁伊连接池时,可以对连接池进行配置参数,从而达到更好的使用效果,主要的配置参数如下:

1、initialSize:初始化连接数量

2、minIdle:最小空闲连接数量

3、maxActive:最大连接数量

4、maxWait:获取连接等待超时时间

5、timeBetweenEvictionRunsMillis:连接空闲池中的最小生存时间

6、minEvictableIdleTimeMillis:连接池中连接最小空闲时间

7、validationQuery:用于验证连接是否可用的SQL语句

8、testWhileIdle:空闲连接是否进行验证

9、testOnBorrow:获取连接时是否进行验证

10、testOnReturn:归还连接时是否进行验证

八、德鲁伊连接池如何销毁

在应用关闭时,需要手动关闭德鲁伊连接池,避免连接池资源未被释放,而导致资源泄露。关闭连接池的详细代码如下:

@PreDestroy
public void destroy() {
    if(dataSource != null) {
        ((DruidDataSource) dataSource).close();
    }
}

九、德鲁伊连接池参数说明

德鲁伊连接池参数说明请参考官方文档:

https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_DruidDataSource%E5%8F%82%E6%95%B0