maven pom.xml 引入依賴包
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>2.9.3</version>
</dependency>
spring bean 配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:redisson="http://redisson.org/schema/redisson"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://redisson.org/schema/redisson
http://redisson.org/schema/redisson/redisson.xsd"
default-autowire="byName">
<!--redission 相關配置 請勿改動 -->
<redisson:client id="redissonClient">
<redisson:single-server address="redis://${redis.ip}:${redis.port}" />
</redisson:client>
</beans>
偽代碼:
import org.apache.log4j.Logger; import org.redisson.api.RLock; import org.redisson.api.RedissonClient; import org.springframework.beans.factory.annotation.Autowired; import net.sf.json.JSONArray; import net.sf.json.JSONObject; public class RedissonLockImpl{ private static final Logger logger = Logger.getLogger(RedissonLockImp.class); @Autowired private RedissonClient redissonClient; private static final String LOCK_INVOICE_PREFIX = "yonyou_invoice_lock_"; public void lockDH(JSONObject param){ /** redission分布式鎖,防止並發操作同一訂單開具發票 */ RLock lock = redissonClient.getLock(LOCK_INVOICE_PREFIX + data.getTenancy_id() + "_" + param.optString("DH")); try{ boolean flag = lock.tryLock(2, TimeUnit.MINUTES); if (flag) { //查庫判斷是否已經取消 validate = issueElectronicInvoiceValid(data,result,param); if(!validate) { return; } //組裝h5 URL reqUrl = buildUrl(data,result,param); if(StringUtils.isBlank(reqUrl)) { result.setMsg("獲取開票地址失敗:\n"+result.getMsg()); return; } logger.info(reqUrl); } else { logger.info("未獲取到鎖業務結束.."); } }catch(Exception e){ logger.error("生成電子發票過程異常:", e); throw new Exception(e.getMessage()); }finally{ lock.unlock(); } } }