分布式鎖的方式有很多種,通常方案有:
資料庫表是由jpa自動生成的,實體如下:
@entity
@table(name = "lock", uniqueconstraints = ),name = "tag_uidx" })
public class lock
repository層只新增了兩個簡單的方法,根據tag刪除鎖和更新鎖(鎖過期)的操作,內容如下:
public inte***ce lockrepository extends jparepository, expireat= :# where tag = :# "
+ "and expireat <= :#")
@transactional
int update(@param("lock")lock lock);
}
如果建立時間大於過期時間,則鎖過期,需要重新整理鎖
service
這裡需要注意,事物的傳播屬性設定為requires_new,需要馬上提交。
public class lockserviceimpl implements lockservice
@override
@transactional(propagation = propagation.requires_new)
public void deletelock(final string tag)
@override
@transactional(propagation = propagation.requires_new)
public int updatelock(final lock lock)
}
manager
@component
public class lockmanagerimpl implements lockmanager catch (final dataintegrityviolationexception e)
}@override
public void release(final string tag)
}
springboot連線mysql資料庫相關報錯
mysql版本為5.7 當使用springboot提供的mysql驅動時,執行測試通過。但是報了乙個問題 如下圖 問題的原因是springboot版本推薦使用新的mysql驅動 com.mysql.cj.jdbc.driver 即在配置檔案中將 driver class name com.mysql...
SpringBoot整合Redis資料庫
redis物件序列化操作 package com.example.zcw.redis import org.springframework.core.convert.converter.converter import org.springframework.core.serializer.supp...
SpringBoot使用Redis資料庫
1 pom.xml檔案引入jar包,如下 org.springframework.boot spring boot starter data redis redis資料庫索引 預設為0 spring.redis.database 0 redis伺服器位址 spring.redis.host 172....