Redisson實現分布式鎖 --簡單


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();
		}
      }  

}

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM