以下是“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注入攻击。