SpringBoot如何整合Druid、Redis

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 缓存。通过简单地配置和开发,我们就可以节省大量的时间,提高系统的可用性和稳定性。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

数据库标签