SpringBoot基於資料庫實現簡單的分布式鎖

2021-10-10 20:21:07 字數 1130 閱讀 2763

分布式鎖的方式有很多種,通常方案有:

資料庫表是由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....