SpringBoot - 静态工具类中注入 RedisTemplate

静态属性不能直接注入,可以通过其set方法进行注入。(注意生成的set方法需要去掉static)。

在工具类里直接注入RedisTemplate,两种方法:

(1)使用@Autowired

private static RedisTemplate redisTemplate;

@Autowired
public void setRedisTemplate(RedisTemplate redisTemplate) {
    JwtUtil.redisTemplate = redisTemplate;
}

(2)使用@Resource

private static RedisTemplate redisTemplate;

@Resource
public void setRedisTemplate(RedisTemplate redisTemplate) {
    JwtUtil.redisTemplate = redisTemplate;
}

接着需要将该工具类作为一个spring管理的bean,这个必须,不然无法注入成功。

只需要在该工具类上添加注解 @Component

完整示例代码:

@Component
public class JwtUtil {

   private static RedisTemplate redisTemplate;

    @Autowired
    public void setRedisTemplate(RedisTemplate redisTemplate) {
        JwtUtil.redisTemplate = redisTemplate;
    }
}

接着就可以正常使用了。

还有更简单的方法,可以直接使用 SpringContextHolder,不过需要做一些额外配置。

public class JwtUtil {
    private static RestTemplate restTemplate = SpringContextHolder.getBean(RestTemplate.class);
}
### 如何在 Spring Boot 中配置 RedisTemplate #### 配置依赖 为了使用 `RedisTemplate`,需要引入必要的 Maven 或 Gradle 依赖项。以下是基于 Maven 的依赖示例: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <!-- 如果使用 Lettuce 连接池 --> <dependency> <groupId>io.lettuce.core</groupId> <artifactId>lettuce-core</artifactId> </dependency> ``` 上述依赖会自动导入所需的库来支持 Redis 操作。 --- #### 自定义 RedisTemplate 配置 默认情况下,Spring Boot 提供了一个开箱即用的 `RedisTemplate` 实现。如果需要自定义其行为,则可以通过创建一个配置类来进行调整。以下是一个完整的配置示例: ```java import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer; import org.springframework.data.redis.serializer.StringRedisSerializer; @Configuration public class RedisConfig { @Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) { RedisTemplate<String, Object> template = new RedisTemplate<>(); // 设置连接工厂 template.setConnectionFactory(connectionFactory); // 使用 String 类型作为 key 序列化器 template.setKeySerializer(new StringRedisSerializer()); template.setHashKeySerializer(new StringRedisSerializer()); // 使用 JSON 格式的序列化器处理 value 值 template.setValueSerializer(new GenericJackson2JsonRedisSerializer()); template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer()); return template; } } ``` 此代码片段展示了如何设置键和值的序列化方式[^1]。通过指定不同的序列化器(如 `StringRedisSerializer` 和 `GenericJackson2JsonRedisSerializer`),可以灵活控制存储到 Redis 中的数据格式。 --- #### 注入并初始化 RedisTemplate 通常,在实际项目中可能希望将 `RedisTemplate` 赋予静态变量以便于全局访问。下面展示了一种实现方式: ```java @Component public class RedisUtil { private static RedisTemplate<String, Object> redisTemplate; @Autowired public void setRedisTemplate(RedisTemplate<String, Object> redisTemplate) { RedisUtil.redisTemplate = redisTemplate; } /** * 获取 Redis 缓存中的某个值 */ public static Object get(String key) { return redisTemplate.opsForValue().get(key); } /** * 存储键值对至 Redis */ public static void set(String key, Object value) { redisTemplate.opsForValue().set(key, value); } } ``` 在此工具类中,`@Autowired` 注解用于将容器管理的 `RedisTemplate` 实例注入到静态字段中[^3]。这样可以在整个应用程序范围内轻松调用该实例的方法。 --- #### 测试 RedisTemplate 功能 完成以上配置后,可通过简单的单元测试验证功能是否正常工作: ```java @SpringBootTest class RedisTest { @Autowired private RedisTemplate<String, Object> redisTemplate; @Test void testSetAndGet() throws Exception { String key = "test_key"; String value = "test_value"; // 存储数据 redisTemplate.opsForValue().set(key, value); // 获取数据 Object result = redisTemplate.opsForValue().get(key); Assertions.assertEquals(value, result.toString()); } } ``` 这段代码演示了基本的操作流程:先保存一条记录再读取它以确认一致性[^2]。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陆克和他的那些代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值