sprintboot 集成redis操作时 redisTemplate注入为空

问题描述

springboot2.*集成redis时,redis工具类中的redisTemplate注入后总是为空。

问题代码还原:


1、工具类定义成静态工具类,@Resource注入redisTemplate

/**
 * Redis工具类
 */

public final class RedisUtil {
    
    @Resource
    private RedisTemplate<String, Object> redisTemplate;
    
    // =============================common============================
    /**
     * 指定缓存失效时间
     * @param key 键
     * @param time 时间(秒)
     * @return
     */
    public boolean expire(String key, long time) {
        try {
            if (time > 0) {
                redisTemplate.expire(key, time, TimeUnit.SECONDS);      //redisTemplate为空
            }
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }
	//其它代码略
}

在使用该类时会发现redisTemplate一直为空

 

解决方案:

1、将工具类注入到spring容器

/**
 * Redis工具类
 */

//注入spring容器
public final class RedisUtil {
    
    @Resource
    private RedisTemplate<String, Object> redisTemplate;
    
    // =============================common============================
    /**
     * 指定缓存失效时间
     * @param key 键
     * @param time 时间(秒)
     * @return
     */
    public boolean expire(String key, long time) {
        try {
            if (time > 0) {
                redisTemplate.expire(key, time, TimeUnit.SECONDS);      //redisTemplate为空
            }
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }
	//其它代码略
}

2、再将工具类bean注入调用方

@RestController
public class HelloController {

    @Resource
    private RedisUtil redisUtil;    //工具类bean注入调用方

    @RequestMapping("/")
    public String index() {
        String cacheKey="test001";
        String val="test001val";
        //RedisUtil redisUtil = new RedisUtil();
        Date date = DateUtil.getNowDate();
        String strDate = DateUtil.dateToStr(date);
        long ts=0;
        try {
            ts = DateUtil.dateToStampInt(strDate)+100000;
        } catch (ParseException e) {
            e.printStackTrace();
        }
        redisUtil.set(cacheKey,val,ts);

        String testval =redisUtil.get(cacheKey).toString();
        return  testval;
        //return "Hello Spring Boot 2.0! test";
    }
}

至此问题解决

因为是用了自定义的 RedisTemplate<String, Object>,用springboot自带的 RedisTemplate<Object, Object>应该没有该问题,没有测试过 :)

 

--- end ---

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值