import lombok.extern.slf4j.Slf4j;
import org.redisson.Redisson;
import org.redisson.api.RLock;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import java.util.concurrent.TimeUnit;
/**
* 自己手写()
*/
@Slf4j
public class RedisLockServer {
@Autowired
private RedisTemplate<String,String> redisTemplate;
@Autowired(required = false)
private Redisson redisson;
public String redisLock(String goodID){
RLock rLock = redisson.getLock(goodID);
//加锁 5秒
rLock.lock(5, TimeUnit.SECONDS);
//业务代码 查询库存
int goodTotal = Integer.parseInt(redisTemplate.opsForValue().get(goodID));
if (goodTotal>0){
redisTemplate.opsForValue().set(goodID,String.valueOf(--goodTotal));
System.out.println("卖出一份,剩余库存:"+goodTotal);
}else{
System.out.println(" 售空 ");
}
//业务完成 释放锁
rLock.unlock();
return String.valueOf(goodTotal);
}
}
class TestRedis{
public static void main(String[] args) {
RedisLockServer redisLockServer = new RedisLockServer();
for (int i=0;i<100;i++){
redisLockServer.redisLock("goodShop");
}
}
}
Exception in thread "main" java.lang.NullPointerException
at com.knife.redis.RedisLockServer.redisLock(RedisLockServer.java:27)
at com.knife.redis.TestRedis.main(RedisLockServer.java:48)
Process finished with exit code 1
空指针 我bug走了一下是注入Redisson是空的 求解决 !