springboot使用druid详解

  • Post category:other

以下是“Spring Boot使用Druid详解”的完整攻略:

1. Druid概述

Druid是阿里巴巴开源的一个数据库连接池和监控平台。它提供了比传统的连接池更强大的功能,如监控、防御SQL注入攻击、支持多种数据源等。

2. Spring Boot集成Druid

Spring Boot集成Druid非常简单,只需要在pom.xml文件中添加Druid的依赖,然后在application.properties文件中配置数据源即可。以下是一些常用的配置项:

# 数据源配置
spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

# Druid配置
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.druid.initial-size=5
spring.datasource.druid.min-idle=5
spring.datasource.druid.max-active=20
spring.datasource.druid.test-on-borrow=true
spring.datasource.druid.test-while-idle=true
spring.datasource.druid.time-between-eviction-runs-millis=60000
spring.datasource.druid.min-evictable-idle-time-millis=300000
spring.datasource.druid.validation-query=SELECT 1 FROM DUAL
spring.datasource.druid.filters=stat,wall,log4j
spring.datasource.druid.connection-properties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000

在上面的配置中,我们配置了一个MySQL数据源,并使用Druid作为连接池。我们设置了连接池的一些参数,如初始连接数、最小空闲连接数、最大活动连接数等。我们还设置了Druid的一些监控和防御SQL注入攻击的参数。

2.1 配置Druid监控

Druid提供了一个监控平台,可以查看连接池的状态、SQL执行情况等。要启用Druid监控,我们需要添加以下依赖:

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

然后在application.properties文件中添加以下配置:

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

在上面的配置中,我们启用了Druid监控,并设置了监控页面的访问路径和登录用户名、密码。

2.2 使用Druid的过滤器

Druid提供了一些过滤器,可以对SQL进行监控、防御SQL注入攻击等。以下是一些常用的过滤器:

  • stat:统计SQL执行情况。
  • wall:防御SQL注入攻击。
  • log4j:将SQL执行情况输出到log4j日志中。

以下是一个示例,演示如何使用Druid的过滤器:

# Druid过滤器配置
spring.datasource.druid.filters=stat,wall,log4j
spring.datasource.druid.connection-properties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000

在上面的配置中,我们启用了Druid的三个过滤器,并设置了一些过滤器的参数。

3. 示例

3.1 示例1:使用Druid监控SQL执行情况

在上面的配置中,我们已经启用了Druid的监控功能。现在我们来演示如何使用Druid监控SQL执行情况。

首先,我们需要在application.properties文件中添加以下配置:

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

然后,我们在代码中执行一些SQL语句,例如:

@Autowired
private JdbcTemplate jdbcTemplate;

public void test() {
    String sql = "SELECT * FROM user";
    List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
    System.out.println(list);
}

最后,我们访问Druid监控页面,查看SQL执行情况。在浏览器中输入http://localhost:8080/druid,然后输入登录用户名和密码,即可进入Druid监控页面。在页面中,我们可以查看SQL执行情况、连接池状态等信息。

3.2 示例2:使用Druid防御SQL注入攻击

Druid提供了一个过滤器wall,可以防御SQL注入攻击。以下是一个示例,演示如何使用wall过滤器:

# Druid过滤器配置
spring.datasource.druid.filters=wall
spring.datasource.druid.connection-properties=config.decrypt=true;config.decrypt.key=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJfzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJzJwIDAQAB

在上面的配置中,我们启用了wall过滤器,并设置了一些参数。然后,我们在代码中执行一些SQL语句,例如:

@Autowired
private JdbcTemplate jdbcTemplate;

public void test() {
    String username = "admin'; DROP TABLE user; --";
    String password = "123456";
    String sql = "SELECT * FROM user WHERE username='" + username + "' AND password='" + password + "'";
    List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
    System.out.println(list);
}

在上面的代码中,我们故意构造了一个SQL注入攻击的语句。然而,由于我们启用了wall过滤器,Druid会自动防御这种攻击,保护我们的数据库不受攻击。

4. 总结

Druid是阿里巴巴开源的一个数据库连接池和监控平台,它提供了比传统的连接池更强大的功能。Spring Boot集成Druid非常简单,只需要在pom.xml文件中添加Druid的依赖,然后在application.properties文件中配置数据源即可。开发者可以根据具体需求选择合适的配置项和过滤器,以便更好地使用Druid。在使用Druid时,我们可以使用Druid的监控功能查看SQL执行情况,也可以使用Druid的过滤器防御SQL注入攻击。