技术点:
一、redisTemplate的使用
二、redsiTemplate 分布式锁工具类
三、JAVA list 使用 stream的操作获取列表元素最大值
四、使用 Wrappers.lambdaUpdate数据库逻辑删除
一、redisTemplate
redis模版对象
springboot中通过
@Resource
private RedisTemplate<String, Object> redisTemplate;
进行注入使用
以redis分布式锁工具类为例
public class RedisLockUtils {
@Resource
private static RedisTemplate<String, Object> redisTemplate;
/**
* lockKey 锁 key
* value 身份标识(保证锁不会被其他人释放)
* expireTime 锁的有效时间
**/
public static Boolean lock(String lockKey, String value, long expireTime) {
try {
return redisTemplate.opsForValue().setIfAbsent(lockKey, value, expireTime, TimeUnit.SECONDS);
} catch (Exception e) {
throw new TrmException("redis获取分布式锁异常");
}
}
/**
* key 锁的key
* value 身份标识
* return 成功返回true 失败返回false
**/
public static Boolean unlock(String key, String value) {
// 获取当前锁的拥有者
Object currentValue = redisTemplate.opsForValue().get(key);
Boolean result = false;
// 判断value是否为锁的拥有者
if (StringUtils.isNotEmpty(String.valueOf(currentValue)) && currentValue.equals(value)) {
//删除锁
result = redisTemplate.opsForValue().getOperations().delete(key);
}
return result;
}
}
java
import java.util.concurrent.TimeUnit;
import javax.annotation.Resource;
import org.apache.commons.lang3.StringUtils;
import org.springframework.data.redis.core.RedisTemplate;
import cn.ctg.mobileApproval.exception.TrmException;
public class RedisLockUtils {
@Resource
private static RedisTemplate<String, Object> redisTemplate;
/**
* lockKey 锁 key
* value 身份标识(保证锁不会被其他人释放)
* expireTime 锁的有效时间
**/
public static Boolean lock(String lockKey, String value, long expireTime) {
try {
return redisTemplate.opsForValue().setIfAbsent(lockKey, value, expireTime, TimeUnit.SECONDS);
} catch (Exception e) {
throw new TrmException("redis获取分布式锁异常");
}
}
/**
* key 锁的key
* value 身份标识
* return 成功返回true 失败返回false
**/
public static Boolean unlock(String key, String value) {
// 获取当前锁的拥有者
Object currentValue = redisTemplate.opsForValue().get(key);
Boolean result = false;
// 判断value是否为锁的拥有者
if (StringUtils.isNotEmpty(String.valueOf(currentValue)) && currentValue.equals(value)) {
//删除锁
result = redisTemplate.opsForValue().getOperations().delete(key);
}
return result;
}
}
三、JAVA list 使用 stream的操作获取列表元素最大值示例
/**
* 获取一个列表中对象的最大值
* @param list
* @return
*/
private Map<String,Object> getListMaxValue(List<PaymentListQueryResult> list) {
PaymentListQueryResult max = list.stream().max(Comparator.comparing(PaymentListQueryResult::getSwdmbtr))
.orElse(null); // 如果列表为空,返回null
if (max != null) {
Map<String,Object> map = new HashMap<String,Object>();
map.put(max.getBukrsCode(), max.getSwdmbtr());
log.info("查询支付单列表返回结果最大金额公司代码:{},申请单号:{},金额:{}",max.getBukrsCode(),max.getApno(),max.getSwdmbtr());
//审批单渠道公司代码
redisTemplate.opsForValue().set("ID_FACE_CHANNEL::" +max.getApno(), max.getBukrsCode());
return map;
} else {
return null;
}
}
java
/**
* 获取一个列表中对象的最大值
* @param list
* @return
*/
private Map<String,Object> getListMaxValue(List<PaymentListQueryResult> list) {
PaymentListQueryResult max = list.stream().max(Comparator.comparing(PaymentListQueryResult::getSwdmbtr))
.orElse(null); // 如果列表为空,返回null
if (max != null) {
Map<String,Object> map = new HashMap<String,Object>();
map.put(max.getBukrsCode(), max.getSwdmbtr());
log.info("查询支付单列表返回结果最大金额公司代码:{},申请单号:{},金额:{}",max.getBukrsCode(),max.getApno(),max.getSwdmbtr());
//审批单渠道公司代码
redisTemplate.opsForValue().set("ID_FACE_CHANNEL::" +max.getApno(), max.getBukrsCode());
return map;
} else {
return null;
}
}
四、使用 Wrappers.lambdaUpdate数据库逻辑删除
java
ifaceCallChannelService.update(Wrappers.lambdaUpdate(FaceCallChannel.class)
.set(FaceCallChannel::getDelFlag, DelFlagEnum.DELETED.getValue())
.eq(FaceCallChannel::getDelFlag, DelFlagEnum.NOT_DELETE.getValue()));
