1. 前言
SpringBoot 是一个开源的、全面的、易学的 Java 服务端框架,它通过简化配置流程,提高开发效率,最小化了系统间的耦合。而 Druid 和 Redis 都是非常流行且广泛使用的数据存储和缓存解决方案。本文将介绍如何在 SpringBoot 中整合 Druid 数据库连接池和 Redis 缓存,帮助您更好地处理数据存储和缓存。
2. 整合 Druid
2.1 引入依赖
首先,我们需要在 Maven 项目的 pom.xml
文件中引入 Druid 数据库连接池的依赖:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.5</version>
</dependency>
2.2 配置数据库连接池
在 SpringBoot 项目中,我们可以在 application.yml
文件中配置数据源和连接池。这里以 MySQL 为例:
spring:
datasource:
url: jdbc:mysql://localhost:3306/test?useSSL=false&characterEncoding=utf8&serverTimezone=Asia/Shanghai
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource # 使用 Druid 数据源
druid:
initial-size: 10 # 初始连接池大小
min-idle: 5 # 最小空闲连接数
max-active: 20 # 最大活跃连接数
test-on-borrow: true # 从连接池中获取连接时检查连接的有效性
validation-query: SELECT 1 # 测试查询
log-filter:
loggerName: druid.sql
connectionLogEnabled: false # 不打印连接日志
这里使用了 Alibaba 开发的 Druid 数据库连接池,可以通过配置 initial-size、min-idle、max-active 来控制其大小和可用性。另外,我们还可以开启 test-on-borrow,在从连接池中获取连接时自动测试其有效性,validation-query 可以指定测试查询。
3. 整合 Redis
3.1 引入 Redis 依赖
在 Maven 项目的 pom.xml
文件中引入 Redis 的依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
3.2 配置 Redis
在 SpringBoot 项目中,我们可以在 application.yml
文件中配置 Redis。以下是配置模板:
spring:
redis:
host: localhost
port: 6379
timeout: 3000 # 连接超时时间
password: # Redis 密码
pool:
max-idle: 8
min-idle: 0
max-active: 8
max-wait: -1 # 设置阻塞等待时间(-1 表示不限制)
test-on-borrow: true # 在从池中取出连接前进行检验,确保连接可用
这里我们配置了 Redis 服务器的地址、端口、密码以及连接池的大小,其中 max-wait 表示最长等待时间。如果设为 -1,则表示一定要拿到连接,否则会一直等待。test-on-borrow 表示在从池中取出连接前是否进行检验。
4. 整合代码示例
下面是一个简单的 SpringBoot 项目示例,它整合了 Druid 数据库连接池和 Redis 缓存,并提供了一个测试 API。
4.1 创建 User 实体类
public class User {
private String id;
private String name;
// 省略 getter/setter 方法
}
4.2 创建数据访问层(Dao)
使用 Spring Data Redis 提供了 Redis 的操作接口,这里我们通过 RedisTemplate
实现了对 Redis 的存取操作。可以通过 @Cacheable
、@CachePut
等注解来缓存数据。
@Repository
public class UserDao {
@Autowired
private RedisTemplate<String, User> redisTemplate;
private static final String KEY_PREFIX = "user:";
public void save(User user) {
String key = getRedisKey(user.getId());
redisTemplate.opsForValue().set(key, user);
}
@Cacheable(value = "userCache", key = "#id")
public User get(String id) {
String key = getRedisKey(id);
return redisTemplate.opsForValue().get(key);
}
@CachePut(value = "userCache", key = "#user.id")
public User update(User user) {
String key = getRedisKey(user.getId());
redisTemplate.opsForValue().set(key, user);
return user;
}
private String getRedisKey(String id) {
return KEY_PREFIX + id;
}
}
4.3 创建业务层(Service)
在 UserService 中,我们可以定义一些业务方法,用来操作 User 数据实体中的数据,同时借助 UserDao 中的方法实现对 Redis 缓存的操作。
@Service
public class UserService {
@Autowired
private UserDao userDao;
public void save(User user) {
userDao.save(user);
}
public User get(String id) {
return userDao.get(id);
}
public User update(User user) {
return userDao.update(user);
}
public void delete(String id) {
String key = userDao.getRedisKey(id);
redisTemplate.delete(key);
}
}
4.4 创建控制器(Controller)
这里我们通过注入 UserService 实例,提供了一个简单的测试 API,用来测试 Redis 缓存的效果。
@RestController
@RequestMapping("/api/user")
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/get/{id}")
public User get(@PathVariable("id") String id) {
return userService.get(id);
}
@PostMapping("/save")
public void save(@RequestBody User user) {
userService.save(user);
}
@PutMapping("/update")
public User update(@RequestBody User user) {
return userService.update(user);
}
@DeleteMapping("/delete/{id}")
public void delete(@PathVariable("id") String id) {
userService.delete(id);
}
}
5. 总结
本文介绍了如何在 SpringBoot 项目中整合 Druid 数据库连接池和 Redis 缓存。通过简单地配置和开发,我们就可以节省大量的时间,提高系统的可用性和稳定性。