Spring Distribute Lock

Spring Distribute Lock.

License

License

GroupId

GroupId

com.github.blackshadowwalker.spring
ArtifactId

ArtifactId

spring-distributelock
Last Version

Last Version

1.1.0
Release Date

Release Date

Type

Type

jar
Description

Description

Spring Distribute Lock
Spring Distribute Lock.
Project URL

Project URL

https://github.com/blackshadowwalker/spring-distributelock
Source Code Management

Source Code Management

https://github.com/blackshadowwalker/spring-distributelock

Download spring-distributelock

How to add to project

<!-- https://jarcasting.com/artifacts/com.github.blackshadowwalker.spring/spring-distributelock/ -->
<dependency>
    <groupId>com.github.blackshadowwalker.spring</groupId>
    <artifactId>spring-distributelock</artifactId>
    <version>1.1.0</version>
</dependency>
// https://jarcasting.com/artifacts/com.github.blackshadowwalker.spring/spring-distributelock/
implementation 'com.github.blackshadowwalker.spring:spring-distributelock:1.1.0'
// https://jarcasting.com/artifacts/com.github.blackshadowwalker.spring/spring-distributelock/
implementation ("com.github.blackshadowwalker.spring:spring-distributelock:1.1.0")
'com.github.blackshadowwalker.spring:spring-distributelock:jar:1.1.0'
<dependency org="com.github.blackshadowwalker.spring" name="spring-distributelock" rev="1.1.0">
  <artifact name="spring-distributelock" type="jar" />
</dependency>
@Grapes(
@Grab(group='com.github.blackshadowwalker.spring', module='spring-distributelock', version='1.1.0')
)
libraryDependencies += "com.github.blackshadowwalker.spring" % "spring-distributelock" % "1.1.0"
[com.github.blackshadowwalker.spring/spring-distributelock "1.1.0"]

Dependencies

compile (9)

Group / Artifact Type Version
org.springframework : spring-core jar 4.2.5.RELEASE
org.springframework : spring-context jar 4.2.5.RELEASE
org.springframework : spring-aop jar 4.2.5.RELEASE
org.springframework : spring-beans jar 4.2.5.RELEASE
org.springframework : spring-expression jar 4.2.5.RELEASE
org.springframework.data : spring-data-redis jar 1.6.2.RELEASE
redis.clients : jedis jar 2.7.2
commons-logging : commons-logging jar 1.2
org.aspectj : aspectjweaver jar 1.8.7

test (5)

Group / Artifact Type Version
org.springframework : spring-test jar 4.2.5.RELEASE
junit : junit jar 4.10
org.slf4j : jcl-over-slf4j jar 1.7.12
org.slf4j : jul-to-slf4j jar 1.7.12
ch.qos.logback : logback-classic jar 1.1.6

Project Modules

There are no modules declared in this project.

Spring DistributeLock

Version

jdk

Spring

1. Description

This is a distribute lock with spring. Lock key support spel. Default implement is Redis.

DistributeLock:

maven

<dependency>
    <groupId>com.github.blackshadowwalker.spring</groupId>
    <artifactId>spring-distributelock</artifactId>
    <version>1.1.0</version>
</dependency>
public @interface DistributeLock {

	/**
	 * The lock Name, if empty the value is `targetClass.getName() + "#" + method.getName()`.
	 *
	 * @return
	 */
	String value() default "";

	/**
	 * Lock key (Spel), if empty keyGenerator will be work.
	 */
	String key() default "";

	/**
	 * The error msg if get lock failed(new LockException(errMsg))
	 * if empty will not throw LockException, just return false;
	 * @return
	 */
	String errMsg() default "Failed Get Lock";

	/**
	 * Timeout when getLock (seconds)
	 *
	 * @return
	 */
	long timeout() default 20;

	/**
     * key expire time (seconds) if gt; 0
     *
     * @return key expire time in seconds
     */
    long expire() default -1;

     /**
     * auto unlock , if false please set expire &gt 0
     * @return
     */
    boolean autoUnLock() default true;

}
public @interface DistributeLocks {

    DistributeLock[] value();

}

2. Usage

2.1 config

spring xml config

<bean id="lockManager" class="com.github.blackshadowwalker.spring.distributelock.redis.RedisLockManager"
          p:lockPrefix="${lock.prefix}"
          p:cacheLock="false"
          p:redisTemplate-ref="stringRedisTemplate" />

<aop:aspectj-autoproxy proxy-target-class="false"/>
<bean class="com.github.blackshadowwalker.spring.distributelock.interceptor.LockAspectSupport" p:lockManager-ref="lockManager" />

2.2 define lock annotation

e.g:

DistributeLock

@DistributeLock(value = "updateUserStatus", key = "#userId", timeout = 10, expire = 60, errMsg = "更新失败,请刷新重试")
public Integer updateUserStatus(Long userId, Integer status) throws Exception {
    ...
    return ...;
}

DistributeLocks

@DistributeLocks({
    @DistributeLock(value = "KEY1", key = "#userId", timeout = 10, expire = 60, errorCode = "401", errMsg = "更新失败,请刷新重试"),
    @DistributeLock(value = "KEY2", key = "#status", timeout = 10, expire = 60, errorCode = "402", errMsg = "更新失败,请刷新重试")
})
public Integer updateUserStatus(Long userId, Integer status) throws Exception {
    ...
    return ...;
}

Versions

Version
1.1.0
1.0.9
1.0.8
1.0.5
1.0.4
1.0.3