├── .gitattributes ├── aquarius-lock-starter ├── src │ └── main │ │ ├── resources │ │ └── META-INF │ │ │ └── spring.factories │ │ └── java │ │ └── com │ │ └── nepxion │ │ └── aquarius │ │ └── lock │ │ ├── annotation │ │ └── EnableLock.java │ │ ├── aop │ │ └── LockImportSelector.java │ │ └── configuration │ │ └── LockConfiguration.java └── pom.xml ├── aquarius-cache-starter ├── src │ └── main │ │ ├── resources │ │ └── META-INF │ │ │ └── spring.factories │ │ └── java │ │ └── com │ │ └── nepxion │ │ └── aquarius │ │ └── cache │ │ ├── configuration │ │ └── CacheConfiguration.java │ │ ├── annotation │ │ └── EnableCache.java │ │ └── aop │ │ └── CacheImportSelector.java └── pom.xml ├── aquarius-limit-starter ├── src │ └── main │ │ ├── resources │ │ └── META-INF │ │ │ └── spring.factories │ │ └── java │ │ └── com │ │ └── nepxion │ │ └── aquarius │ │ └── limit │ │ ├── annotation │ │ └── EnableLimit.java │ │ ├── configuration │ │ └── LimitConfiguration.java │ │ └── aop │ │ └── LimitImportSelector.java └── pom.xml ├── aquarius-common-redis ├── src │ └── main │ │ └── java │ │ └── com │ │ └── nepxion │ │ └── aquarius │ │ └── common │ │ ├── redis │ │ ├── constant │ │ │ └── RedisConstant.java │ │ ├── handler │ │ │ ├── RedisHandler.java │ │ │ └── RedisHandlerImpl.java │ │ ├── exception │ │ │ └── RedisException.java │ │ └── configuration │ │ │ └── RedisConfiguration.java │ │ └── redisson │ │ ├── adapter │ │ └── RedissonAdapter.java │ │ ├── constant │ │ └── RedissonConstant.java │ │ ├── handler │ │ ├── RedissonHandler.java │ │ └── RedissonHandlerImpl.java │ │ ├── exception │ │ └── RedissonException.java │ │ └── util │ │ └── RedissonUtil.java └── pom.xml ├── .gitignore ├── aquarius-id-generator-starter ├── src │ └── main │ │ ├── resources │ │ └── META-INF │ │ │ └── spring.factories │ │ └── java │ │ └── com │ │ └── nepxion │ │ └── aquarius │ │ └── idgenerator │ │ ├── constant │ │ └── IdGeneratorConstant.java │ │ ├── configuration │ │ ├── LocalIdGeneratorConfig.java │ │ ├── RedisIdGeneratorConfig.java │ │ └── ZookeeperIdGeneratorConfig.java │ │ ├── annotation │ │ ├── EnableLocalIdGenerator.java │ │ ├── EnableRedisIdGenerator.java │ │ └── EnableZookeeperIdGenerator.java │ │ └── aop │ │ ├── LocalIdGeneratorImportSelector.java │ │ ├── RedisIdGeneratorImportSelector.java │ │ └── ZookeeperIdGeneratorImportSelector.java └── pom.xml ├── aquarius-limit-aop ├── src │ └── main │ │ └── java │ │ └── com │ │ └── nepxion │ │ └── aquarius │ │ └── limit │ │ ├── LimitDelegate.java │ │ ├── LimitExecutor.java │ │ ├── constant │ │ └── LimitConstant.java │ │ ├── configuration │ │ └── LimitAopConfiguration.java │ │ ├── annotation │ │ └── Limit.java │ │ └── aop │ │ └── LimitAutoScanProxy.java └── pom.xml ├── aquarius-common ├── src │ └── main │ │ ├── resources │ │ └── com │ │ │ └── nepxion │ │ │ └── aquarius │ │ │ └── resource │ │ │ └── logo.txt │ │ └── java │ │ └── com │ │ └── nepxion │ │ └── aquarius │ │ └── common │ │ ├── util │ │ ├── KeyUtil.java │ │ ├── IOUtil.java │ │ ├── MathsUtil.java │ │ ├── StringUtil.java │ │ └── DateUtil.java │ │ ├── constant │ │ └── AquariusConstant.java │ │ ├── exception │ │ └── AquariusException.java │ │ ├── condition │ │ └── AquariusCondition.java │ │ ├── property │ │ └── AquariusContent.java │ │ ├── configuration │ │ └── AquariusConfiguration.java │ │ └── context │ │ └── AquariusContextAware.java └── pom.xml ├── aquarius-spring-boot-example ├── src │ └── main │ │ ├── java │ │ └── com │ │ │ └── nepxion │ │ │ └── aquarius │ │ │ └── example │ │ │ ├── limit │ │ │ ├── service │ │ │ │ ├── MyService7.java │ │ │ │ ├── MyService7Impl.java │ │ │ │ └── MyService8Impl.java │ │ │ ├── app1 │ │ │ │ └── LimitAopApplication.java │ │ │ └── app2 │ │ │ │ └── LimitApplication.java │ │ │ ├── lock │ │ │ ├── service │ │ │ │ ├── MyService3.java │ │ │ │ ├── MyService1.java │ │ │ │ ├── MyService3Impl.java │ │ │ │ ├── MyService1Impl.java │ │ │ │ ├── MyService4Impl.java │ │ │ │ └── MyService2Impl.java │ │ │ ├── app1 │ │ │ │ └── LockAopApplication.java │ │ │ └── app3 │ │ │ │ └── ReadWriteLockAopApplication.java │ │ │ ├── cache │ │ │ ├── service │ │ │ │ ├── MyService5.java │ │ │ │ ├── MyService5Impl.java │ │ │ │ └── MyService6Impl.java │ │ │ └── app1 │ │ │ │ └── CacheAopApplication.java │ │ │ └── adapter │ │ │ └── RedissonAdapterImpl.java │ │ └── resources │ │ ├── redisson.yaml │ │ ├── application.properties │ │ └── logback.xml └── pom.xml ├── aquarius-lock-aop ├── src │ └── main │ │ └── java │ │ └── com │ │ └── nepxion │ │ └── aquarius │ │ └── lock │ │ ├── LockDelegate.java │ │ ├── constant │ │ └── LockConstant.java │ │ ├── configuration │ │ └── LockAopConfiguration.java │ │ ├── entity │ │ └── LockType.java │ │ ├── LockExecutor.java │ │ ├── annotation │ │ ├── Lock.java │ │ ├── ReadLock.java │ │ └── WriteLock.java │ │ └── aop │ │ └── LockAutoScanProxy.java └── pom.xml ├── .github ├── workflows │ └── maven.yml └── stale.yml ├── aquarius-lock-local ├── src │ └── main │ │ └── java │ │ └── com │ │ └── nepxion │ │ └── aquarius │ │ └── lock │ │ └── local │ │ ├── condition │ │ └── LocalLockCondition.java │ │ ├── configuration │ │ └── LocalLockConfiguration.java │ │ └── impl │ │ └── LocalLockDelegateImpl.java └── pom.xml ├── aquarius-lock-redis ├── src │ └── main │ │ └── java │ │ └── com │ │ └── nepxion │ │ └── aquarius │ │ └── lock │ │ └── redis │ │ ├── condition │ │ └── RedisLockCondition.java │ │ ├── configuration │ │ └── RedisLockConfiguration.java │ │ └── impl │ │ └── RedisLockDelegateImpl.java └── pom.xml ├── aquarius-cache-redis ├── src │ └── main │ │ └── java │ │ └── com │ │ └── nepxion │ │ └── aquarius │ │ └── cache │ │ └── redis │ │ ├── condition │ │ └── RedisCacheCondition.java │ │ └── configuration │ │ ├── RedisCacheConfiguration.java │ │ └── RedissonCacheConfiguration.java └── pom.xml ├── aquarius-limit-local ├── src │ └── main │ │ └── java │ │ └── com │ │ └── nepxion │ │ └── aquarius │ │ └── limit │ │ └── local │ │ ├── condition │ │ └── LocalLimitCondition.java │ │ ├── configuration │ │ └── LocalLimitConfiguration.java │ │ └── impl │ │ └── LocalLimitDelegateImpl.java └── pom.xml ├── aquarius-limit-redis ├── src │ └── main │ │ └── java │ │ └── com │ │ └── nepxion │ │ └── aquarius │ │ └── limit │ │ └── redis │ │ ├── condition │ │ └── RedisLimitCondition.java │ │ ├── configuration │ │ └── RedisLimitConfiguration.java │ │ └── impl │ │ └── RedisLimitDelegateImpl.java └── pom.xml ├── aquarius-lock-zookeeper ├── src │ └── main │ │ └── java │ │ └── com │ │ └── nepxion │ │ └── aquarius │ │ └── lock │ │ └── zookeeper │ │ ├── condition │ │ └── ZookeeperLockCondition.java │ │ ├── configuration │ │ └── ZookeeperLockConfiguration.java │ │ └── impl │ │ └── ZookeeperLockDelegateImpl.java └── pom.xml ├── aquarius-spring-cloud-example └── src │ └── main │ ├── resources │ ├── redisson.yaml │ ├── logback.xml │ └── application.properties │ └── java │ └── com │ └── nepxion │ └── aquarius │ └── example │ ├── limit │ ├── LimitAopController.java │ └── LimitController.java │ ├── AquariusApplication.java │ ├── lock │ ├── LockAopController.java │ └── LockController.java │ ├── cache │ └── CacheAopController.java │ └── configuration │ └── WebMvcConfiguration.java ├── aquarius-cache-aop ├── src │ └── main │ │ └── java │ │ └── com │ │ └── nepxion │ │ └── aquarius │ │ └── cache │ │ ├── constant │ │ └── CacheConstant.java │ │ ├── CacheDelegate.java │ │ ├── annotation │ │ ├── CachePut.java │ │ ├── Cacheable.java │ │ └── CacheEvict.java │ │ ├── configuration │ │ └── CacheAopConfiguration.java │ │ └── aop │ │ └── CacheAutoScanProxy.java └── pom.xml ├── aquarius-id-generator-local ├── src │ └── main │ │ └── java │ │ └── com │ │ └── nepxion │ │ └── aquarius │ │ └── idgenerator │ │ └── local │ │ ├── configuration │ │ └── LocalIdGeneratorConfiguration.java │ │ └── LocalIdGenerator.java └── pom.xml ├── version.bat ├── aquarius-common-zookeeper ├── src │ └── main │ │ └── java │ │ └── com │ │ └── nepxion │ │ └── aquarius │ │ └── common │ │ └── curator │ │ ├── exception │ │ └── CuratorException.java │ │ ├── entity │ │ └── RetryTypeEnum.java │ │ ├── constant │ │ └── CuratorConstant.java │ │ └── handler │ │ └── CuratorHandler.java └── pom.xml ├── aquarius-id-generator-zookeeper ├── src │ └── main │ │ └── java │ │ └── com │ │ └── nepxion │ │ └── aquarius │ │ └── idgenerator │ │ └── zookeeper │ │ ├── ZookeeperIdGenerator.java │ │ └── configuration │ │ └── ZookeeperIdGeneratorConfiguration.java └── pom.xml ├── deploy.bat └── aquarius-id-generator-redis ├── pom.xml └── src └── main └── java └── com └── nepxion └── aquarius └── idgenerator └── redis ├── RedisIdGenerator.java └── configuration └── RedisIdGeneratorConfiguration.java /.gitattributes: -------------------------------------------------------------------------------- 1 | # Declare files that will always have UNIX line endings on checkout. 2 | *.sh text eol=lf -------------------------------------------------------------------------------- /aquarius-lock-starter/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | com.nepxion.aquarius.lock.annotation.EnableLock=\ 2 | com.nepxion.aquarius.lock.configuration.LockConfiguration -------------------------------------------------------------------------------- /aquarius-cache-starter/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | com.nepxion.aquarius.cache.annotation.EnableCache=\ 2 | com.nepxion.aquarius.cache.configuration.CacheConfiguration -------------------------------------------------------------------------------- /aquarius-limit-starter/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | com.nepxion.aquarius.limit.annotation.EnableLimit=\ 2 | com.nepxion.aquarius.limit.configuration.LimitConfiguration -------------------------------------------------------------------------------- /aquarius-common-redis/src/main/java/com/nepxion/aquarius/common/redis/constant/RedisConstant.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.common.redis.constant; 2 | 3 | /** 4 | *
Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | public class RedisConstant { 13 | 14 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Compiled class file 2 | *.class 3 | .classpath 4 | .springBeans 5 | .factorypath 6 | # Mobile Tools for Java (J2ME) 7 | .mtj.tmp/ 8 | 9 | *.class 10 | *.classpath 11 | *.project 12 | *.springBeans 13 | bin/ 14 | log/ 15 | test-output/ 16 | 17 | # Package Files # 18 | *.jar 19 | *.war 20 | *.ear 21 | *.zip 22 | *.tar.gz 23 | *.rar 24 | *.swp 25 | *.log 26 | *.ctxt 27 | # nodejs local modules 28 | .tags* 29 | .idea/ 30 | *.iml 31 | .gradle/ 32 | .settings/ 33 | target/ 34 | hs_err_pid* -------------------------------------------------------------------------------- /aquarius-id-generator-starter/src/main/resources/META-INF/spring.factories: -------------------------------------------------------------------------------- 1 | com.nepxion.aquarius.idgenerator.annotation.EnableLocalIdGenerator=\ 2 | com.nepxion.aquarius.idgenerator.configuration.LocalIdGeneratorConfig 3 | 4 | com.nepxion.aquarius.idgenerator.annotation.EnableRedisIdGenerator=\ 5 | com.nepxion.aquarius.idgenerator.configuration.RedisIdGeneratorConfig 6 | 7 | com.nepxion.aquarius.idgenerator.annotation.EnableZookeeperIdGenerator=\ 8 | com.nepxion.aquarius.idgenerator.configuration.ZookeeperIdGeneratorConfig -------------------------------------------------------------------------------- /aquarius-id-generator-starter/src/main/java/com/nepxion/aquarius/idgenerator/constant/IdGeneratorConstant.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.idgenerator.constant; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | public class IdGeneratorConstant { 13 | public static final String IDGENERATOR_ENABLED = "idgenerator.enabled"; 14 | } -------------------------------------------------------------------------------- /aquarius-common-redis/src/main/java/com/nepxion/aquarius/common/redisson/adapter/RedissonAdapter.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.common.redisson.adapter; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import com.nepxion.aquarius.common.redisson.handler.RedissonHandler; 13 | 14 | public interface RedissonAdapter { 15 | RedissonHandler getRedissonHandler(); 16 | } -------------------------------------------------------------------------------- /aquarius-common-redis/src/main/java/com/nepxion/aquarius/common/redisson/constant/RedissonConstant.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.common.redisson.constant; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | public class RedissonConstant { 13 | public static final String DEFAULT_PATH = "redisson.yaml"; 14 | public static final String PATH = "redisson.path"; 15 | } -------------------------------------------------------------------------------- /aquarius-limit-aop/src/main/java/com/nepxion/aquarius/limit/LimitDelegate.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.limit; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import org.aopalliance.intercept.MethodInvocation; 13 | 14 | public interface LimitDelegate { 15 | Object invoke(MethodInvocation invocation, String key, int limitPeriod, int limitCount) throws Throwable; 16 | } -------------------------------------------------------------------------------- /aquarius-common-redis/src/main/java/com/nepxion/aquarius/common/redis/handler/RedisHandler.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.common.redis.handler; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import org.springframework.data.redis.core.RedisTemplate; 13 | 14 | public interface RedisHandler { 15 | // 获取RedisTemplate 16 | RedisTemplateTitle: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import com.nepxion.aquarius.limit.annotation.Limit; 13 | 14 | public interface MyService7 { 15 | @Limit(name = "limit", key = "#id1 + \"-\" + #id2", limitPeriod = 10, limitCount = 5) 16 | String doA(String id1, String id2); 17 | } -------------------------------------------------------------------------------- /aquarius-spring-boot-example/src/main/java/com/nepxion/aquarius/example/lock/service/MyService3.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.example.lock.service; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import com.nepxion.aquarius.lock.annotation.ReadLock; 13 | 14 | public interface MyService3 { 15 | @ReadLock(name = "lock", key = "#id1 + \"-\" + #id2", leaseTime = 5000L, waitTime = 60000L, async = false, fair = false) 16 | String doR(String id1, String id2); 17 | } -------------------------------------------------------------------------------- /aquarius-lock-aop/src/main/java/com/nepxion/aquarius/lock/LockDelegate.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.lock; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import org.aopalliance.intercept.MethodInvocation; 13 | 14 | import com.nepxion.aquarius.lock.entity.LockType; 15 | 16 | public interface LockDelegate { 17 | Object invoke(MethodInvocation invocation, LockType lockType, String key, long leaseTime, long waitTime, boolean async, boolean fair) throws Throwable; 18 | } -------------------------------------------------------------------------------- /.github/workflows/maven.yml: -------------------------------------------------------------------------------- 1 | # This workflow will build a Java project with Maven 2 | # For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven 3 | 4 | name: build 5 | 6 | on: 7 | push: 8 | branches: [ master ] 9 | pull_request: 10 | branches: [ master ] 11 | 12 | jobs: 13 | build: 14 | 15 | runs-on: ubuntu-latest 16 | 17 | steps: 18 | - uses: actions/checkout@v2 19 | - name: Set up JDK 8 20 | uses: actions/setup-java@v2 21 | with: 22 | java-version: '8' 23 | distribution: 'adopt' 24 | - name: Build with Maven 25 | run: mvn -B package --file pom.xml -------------------------------------------------------------------------------- /aquarius-spring-boot-example/src/main/java/com/nepxion/aquarius/example/lock/service/MyService1.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.example.lock.service; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import com.nepxion.aquarius.lock.annotation.Lock; 13 | 14 | public interface MyService1 { 15 | @Lock(name = "lock", key = "#id1 + \"-\" + #id2", leaseTime = 5000L, waitTime = 60000L, async = false, fair = false) 16 | String doA(String id1, String id2); 17 | 18 | String doB(String id1, String id2); 19 | } -------------------------------------------------------------------------------- /aquarius-lock-local/src/main/java/com/nepxion/aquarius/lock/local/condition/LocalLockCondition.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.lock.local.condition; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import com.nepxion.aquarius.common.condition.AquariusCondition; 13 | import com.nepxion.aquarius.lock.constant.LockConstant; 14 | 15 | public class LocalLockCondition extends AquariusCondition { 16 | public LocalLockCondition() { 17 | super(LockConstant.LOCK_TYPE, LockConstant.LOCK_TYPE_LOCAL); 18 | } 19 | } -------------------------------------------------------------------------------- /aquarius-lock-redis/src/main/java/com/nepxion/aquarius/lock/redis/condition/RedisLockCondition.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.lock.redis.condition; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import com.nepxion.aquarius.common.condition.AquariusCondition; 13 | import com.nepxion.aquarius.lock.constant.LockConstant; 14 | 15 | public class RedisLockCondition extends AquariusCondition { 16 | public RedisLockCondition() { 17 | super(LockConstant.LOCK_TYPE, LockConstant.LOCK_TYPE_REDIS); 18 | } 19 | } -------------------------------------------------------------------------------- /aquarius-cache-redis/src/main/java/com/nepxion/aquarius/cache/redis/condition/RedisCacheCondition.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.cache.redis.condition; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import com.nepxion.aquarius.cache.constant.CacheConstant; 13 | import com.nepxion.aquarius.common.condition.AquariusCondition; 14 | 15 | public class RedisCacheCondition extends AquariusCondition { 16 | public RedisCacheCondition() { 17 | super(CacheConstant.CACHE_TYPE, CacheConstant.CACHE_TYPE_REDIS); 18 | } 19 | } -------------------------------------------------------------------------------- /aquarius-limit-local/src/main/java/com/nepxion/aquarius/limit/local/condition/LocalLimitCondition.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.limit.local.condition; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import com.nepxion.aquarius.common.condition.AquariusCondition; 13 | import com.nepxion.aquarius.limit.constant.LimitConstant; 14 | 15 | public class LocalLimitCondition extends AquariusCondition { 16 | public LocalLimitCondition() { 17 | super(LimitConstant.LIMIT_TYPE, LimitConstant.LIMIT_TYPE_LOCAL); 18 | } 19 | } -------------------------------------------------------------------------------- /aquarius-limit-redis/src/main/java/com/nepxion/aquarius/limit/redis/condition/RedisLimitCondition.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.limit.redis.condition; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import com.nepxion.aquarius.common.condition.AquariusCondition; 13 | import com.nepxion.aquarius.limit.constant.LimitConstant; 14 | 15 | public class RedisLimitCondition extends AquariusCondition { 16 | public RedisLimitCondition() { 17 | super(LimitConstant.LIMIT_TYPE, LimitConstant.LIMIT_TYPE_REDIS); 18 | } 19 | } -------------------------------------------------------------------------------- /aquarius-spring-boot-example/src/main/resources/redisson.yaml: -------------------------------------------------------------------------------- 1 | singleServerConfig: 2 | idleConnectionTimeout: 10000 3 | pingTimeout: 1000 4 | connectTimeout: 10000 5 | timeout: 3000 6 | retryAttempts: 3 7 | retryInterval: 1500 8 | reconnectionTimeout: 3000 9 | failedAttempts: 3 10 | password: null 11 | subscriptionsPerConnection: 5 12 | clientName: null 13 | address: "redis://127.0.0.1:6379" 14 | subscriptionConnectionMinimumIdleSize: 1 15 | subscriptionConnectionPoolSize: 50 16 | connectionMinimumIdleSize: 32 17 | connectionPoolSize: 64 18 | database: 0 19 | dnsMonitoringInterval: 5000 20 | threads: 0 21 | nettyThreads: 0 22 | codec: !Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import com.nepxion.aquarius.common.condition.AquariusCondition; 13 | import com.nepxion.aquarius.lock.constant.LockConstant; 14 | 15 | public class ZookeeperLockCondition extends AquariusCondition { 16 | public ZookeeperLockCondition() { 17 | super(LockConstant.LOCK_TYPE, LockConstant.LOCK_TYPE_ZOOKEEPER); 18 | } 19 | } -------------------------------------------------------------------------------- /aquarius-spring-cloud-example/src/main/resources/redisson.yaml: -------------------------------------------------------------------------------- 1 | singleServerConfig: 2 | idleConnectionTimeout: 10000 3 | pingTimeout: 1000 4 | connectTimeout: 10000 5 | timeout: 3000 6 | retryAttempts: 3 7 | retryInterval: 1500 8 | reconnectionTimeout: 3000 9 | failedAttempts: 3 10 | password: null 11 | subscriptionsPerConnection: 5 12 | clientName: null 13 | address: "redis://127.0.0.1:6379" 14 | subscriptionConnectionMinimumIdleSize: 1 15 | subscriptionConnectionPoolSize: 50 16 | connectionMinimumIdleSize: 32 17 | connectionPoolSize: 64 18 | database: 0 19 | dnsMonitoringInterval: 5000 20 | threads: 0 21 | nettyThreads: 0 22 | codec: !Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | public class KeyUtil { 13 | public static String getCompositeKey(String prefix, String name, String key) { 14 | return prefix + "_" + name + "_" + key; 15 | } 16 | 17 | public static String getCompositeWildcardKey(String prefix, String name) { 18 | return prefix + "_" + name + "*"; 19 | } 20 | 21 | public static String getCompositeWildcardKey(String key) { 22 | return key + "*"; 23 | } 24 | } -------------------------------------------------------------------------------- /aquarius-common/src/main/java/com/nepxion/aquarius/common/constant/AquariusConstant.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.common.constant; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | public class AquariusConstant { 13 | public static final String AQUARIUS_VERSION = "2.0.13"; 14 | 15 | public static final String ENCODING_UTF_8 = "UTF-8"; 16 | public static final String ENCODING_GBK = "GBK"; 17 | public static final String ENCODING_ISO_8859_1 = "ISO-8859-1"; 18 | 19 | public static final String PREFIX = "prefix"; 20 | 21 | public static final String FREQUENT_LOG_PRINT = "frequent.log.print"; 22 | } -------------------------------------------------------------------------------- /aquarius-common-redis/src/main/java/com/nepxion/aquarius/common/redis/handler/RedisHandlerImpl.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.common.redis.handler; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import org.springframework.beans.factory.annotation.Autowired; 13 | import org.springframework.data.redis.core.RedisTemplate; 14 | 15 | public class RedisHandlerImpl implements RedisHandler { 16 | @Autowired 17 | private RedisTemplateTitle: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import org.slf4j.Logger; 13 | import org.slf4j.LoggerFactory; 14 | import org.springframework.stereotype.Service; 15 | 16 | @Service("myService7Impl") 17 | public class MyService7Impl implements MyService7 { 18 | private static final Logger LOG = LoggerFactory.getLogger(MyService7Impl.class); 19 | 20 | @Override 21 | public String doA(String id1, String id2) { 22 | LOG.info("doA"); 23 | 24 | return "A"; 25 | } 26 | } -------------------------------------------------------------------------------- /aquarius-limit-aop/src/main/java/com/nepxion/aquarius/limit/LimitExecutor.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.limit; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | public interface LimitExecutor { 13 | /** 14 | * 在给定的时间段里最多的访问限制次数(超出次数返回false);等下个时间段开始,才允许再次被访问(返回true),周而复始 15 | * @param name 资源名字 16 | * @param key 资源Key 17 | * @param limitPeriod 给定的时间段(单位秒) 18 | * @param limitCount 最多的访问限制次数 19 | * @return boolean 20 | */ 21 | boolean tryAccess(String name, String key, int limitPeriod, int limitCount) throws Exception; 22 | 23 | boolean tryAccess(String compositeKey, int limitPeriod, int limitCount) throws Exception; 24 | } -------------------------------------------------------------------------------- /aquarius-id-generator-starter/src/main/java/com/nepxion/aquarius/idgenerator/configuration/LocalIdGeneratorConfig.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.idgenerator.configuration; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import org.springframework.context.annotation.Configuration; 13 | import org.springframework.context.annotation.Import; 14 | 15 | import com.nepxion.aquarius.common.configuration.AquariusConfiguration; 16 | import com.nepxion.aquarius.idgenerator.local.configuration.LocalIdGeneratorConfiguration; 17 | 18 | @Configuration 19 | @Import({ AquariusConfiguration.class, LocalIdGeneratorConfiguration.class }) 20 | public class LocalIdGeneratorConfig { 21 | 22 | } -------------------------------------------------------------------------------- /aquarius-id-generator-starter/src/main/java/com/nepxion/aquarius/idgenerator/configuration/RedisIdGeneratorConfig.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.idgenerator.configuration; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import org.springframework.context.annotation.Configuration; 13 | import org.springframework.context.annotation.Import; 14 | 15 | import com.nepxion.aquarius.common.configuration.AquariusConfiguration; 16 | import com.nepxion.aquarius.idgenerator.redis.configuration.RedisIdGeneratorConfiguration; 17 | 18 | @Configuration 19 | @Import({ AquariusConfiguration.class, RedisIdGeneratorConfiguration.class }) 20 | public class RedisIdGeneratorConfig { 21 | 22 | } -------------------------------------------------------------------------------- /aquarius-cache-aop/src/main/java/com/nepxion/aquarius/cache/constant/CacheConstant.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.cache.constant; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | public class CacheConstant { 13 | public static final String CACHE_ENABLED = "cache.enabled"; 14 | 15 | public static final String CACHE_TYPE = "cache.type"; 16 | 17 | public static final String CACHE_TYPE_REDIS = "redisCache"; 18 | 19 | public static final String CACHE_AOP_EXCEPTION_IGNORE = "cache.aop.exception.ignore"; 20 | 21 | public static final String CACHE_EXPIRE = "cache.expire"; 22 | 23 | public static final String CACHE_SCAN_PACKAGES = "cache.scan.packages"; 24 | } -------------------------------------------------------------------------------- /aquarius-limit-aop/src/main/java/com/nepxion/aquarius/limit/constant/LimitConstant.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.limit.constant; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | public class LimitConstant { 13 | public static final String LIMIT_ENABLED = "limit.enabled"; 14 | 15 | public static final String LIMIT_TYPE = "limit.type"; 16 | 17 | public static final String LIMIT_TYPE_REDIS = "redisLimit"; 18 | public static final String LIMIT_TYPE_LOCAL = "localLimit"; 19 | 20 | public static final String LIMIT_AOP_EXCEPTION_IGNORE = "limit.aop.exception.ignore"; 21 | 22 | public static final String LIMIT_SCAN_PACKAGES = "limit.scan.packages"; 23 | } -------------------------------------------------------------------------------- /aquarius-common-redis/src/main/java/com/nepxion/aquarius/common/redisson/handler/RedissonHandler.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.common.redisson.handler; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import org.redisson.api.RedissonClient; 13 | 14 | public interface RedissonHandler { 15 | // 关闭Redisson客户端连接 16 | void close(); 17 | 18 | // 获取Redisson客户端是否初始化 19 | boolean isInitialized(); 20 | 21 | // 获取Redisson客户端连接是否正常 22 | boolean isStarted(); 23 | 24 | // 检查Redisson是否是启动状态 25 | void validateStartedStatus(); 26 | 27 | // 检查Redisson是否是关闭状态 28 | void validateClosedStatus(); 29 | 30 | // 获取Redisson客户端 31 | RedissonClient getRedisson(); 32 | } -------------------------------------------------------------------------------- /aquarius-common/src/main/java/com/nepxion/aquarius/common/util/IOUtil.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.common.util; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import java.io.FileInputStream; 13 | import java.io.IOException; 14 | import java.io.InputStream; 15 | 16 | public class IOUtil { 17 | public static InputStream getInputStream(String path) throws IOException { 18 | // 从Resource路径获取 19 | InputStream inputStream = IOUtil.class.getClassLoader().getResourceAsStream(path); 20 | if (inputStream == null) { 21 | // 从文件路径获取 22 | inputStream = new FileInputStream(path); 23 | } 24 | 25 | return inputStream; 26 | } 27 | } -------------------------------------------------------------------------------- /aquarius-id-generator-starter/src/main/java/com/nepxion/aquarius/idgenerator/configuration/ZookeeperIdGeneratorConfig.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.idgenerator.configuration; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import org.springframework.context.annotation.Configuration; 13 | import org.springframework.context.annotation.Import; 14 | 15 | import com.nepxion.aquarius.common.configuration.AquariusConfiguration; 16 | import com.nepxion.aquarius.idgenerator.zookeeper.configuration.ZookeeperIdGeneratorConfiguration; 17 | 18 | @Configuration 19 | @Import({ AquariusConfiguration.class, ZookeeperIdGeneratorConfiguration.class }) 20 | public class ZookeeperIdGeneratorConfig { 21 | 22 | } -------------------------------------------------------------------------------- /aquarius-common-redis/src/main/java/com/nepxion/aquarius/common/redis/exception/RedisException.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.common.redis.exception; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | public class RedisException extends RuntimeException { 13 | private static final long serialVersionUID = -1137413793056992202L; 14 | 15 | public RedisException() { 16 | super(); 17 | } 18 | 19 | public RedisException(String message) { 20 | super(message); 21 | } 22 | 23 | public RedisException(String message, Throwable cause) { 24 | super(message, cause); 25 | } 26 | 27 | public RedisException(Throwable cause) { 28 | super(cause); 29 | } 30 | } -------------------------------------------------------------------------------- /aquarius-common/src/main/java/com/nepxion/aquarius/common/exception/AquariusException.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.common.exception; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | public class AquariusException extends RuntimeException { 13 | private static final long serialVersionUID = 7895884193269203187L; 14 | 15 | public AquariusException() { 16 | super(); 17 | } 18 | 19 | public AquariusException(String message) { 20 | super(message); 21 | } 22 | 23 | public AquariusException(String message, Throwable cause) { 24 | super(message, cause); 25 | } 26 | 27 | public AquariusException(Throwable cause) { 28 | super(cause); 29 | } 30 | } -------------------------------------------------------------------------------- /aquarius-id-generator-local/src/main/java/com/nepxion/aquarius/idgenerator/local/configuration/LocalIdGeneratorConfiguration.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.idgenerator.local.configuration; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import org.springframework.context.annotation.Bean; 13 | import org.springframework.context.annotation.Configuration; 14 | 15 | import com.nepxion.aquarius.idgenerator.local.LocalIdGenerator; 16 | import com.nepxion.aquarius.idgenerator.local.impl.LocalIdGeneratorImpl; 17 | 18 | @Configuration 19 | public class LocalIdGeneratorConfiguration { 20 | @Bean 21 | public LocalIdGenerator localIdGenerator() { 22 | return new LocalIdGeneratorImpl(); 23 | } 24 | } -------------------------------------------------------------------------------- /version.bat: -------------------------------------------------------------------------------- 1 | @echo on 2 | @echo ============================================================= 3 | @echo $ $ 4 | @echo $ Nepxion Aquarius $ 5 | @echo $ $ 6 | @echo $ $ 7 | @echo $ $ 8 | @echo $ Nepxion Studio All Right Reserved $ 9 | @echo $ Copyright (C) 2017-2050 $ 10 | @echo $ $ 11 | @echo ============================================================= 12 | @echo. 13 | @echo off 14 | 15 | @title Nepxion Aquarius 16 | @color 0a 17 | 18 | call mvn versions:set -DgenerateBackupPoms=false -DnewVersion=2.0.13 19 | 20 | pause -------------------------------------------------------------------------------- /aquarius-cache-aop/src/main/java/com/nepxion/aquarius/cache/CacheDelegate.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.cache; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import java.util.List; 13 | 14 | import org.aopalliance.intercept.MethodInvocation; 15 | 16 | public interface CacheDelegate { 17 | // 新增缓存 18 | Object invokeCacheable(MethodInvocation invocation, ListTitle: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | public class CuratorException extends RuntimeException { 13 | private static final long serialVersionUID = 851864048447611118L; 14 | 15 | public CuratorException() { 16 | super(); 17 | } 18 | 19 | public CuratorException(String message) { 20 | super(message); 21 | } 22 | 23 | public CuratorException(String message, Throwable cause) { 24 | super(message, cause); 25 | } 26 | 27 | public CuratorException(Throwable cause) { 28 | super(cause); 29 | } 30 | } -------------------------------------------------------------------------------- /aquarius-cache-starter/src/main/java/com/nepxion/aquarius/cache/configuration/CacheConfiguration.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.cache.configuration; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import org.springframework.context.annotation.Configuration; 13 | import org.springframework.context.annotation.Import; 14 | 15 | import com.nepxion.aquarius.cache.configuration.CacheAopConfiguration; 16 | import com.nepxion.aquarius.cache.redis.configuration.RedisCacheConfiguration; 17 | import com.nepxion.aquarius.common.configuration.AquariusConfiguration; 18 | 19 | @Configuration 20 | @Import({ AquariusConfiguration.class, CacheAopConfiguration.class, RedisCacheConfiguration.class }) 21 | public class CacheConfiguration { 22 | 23 | } -------------------------------------------------------------------------------- /aquarius-common-redis/src/main/java/com/nepxion/aquarius/common/redisson/exception/RedissonException.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.common.redisson.exception; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | public class RedissonException extends RuntimeException { 13 | private static final long serialVersionUID = 4550515832057492430L; 14 | 15 | public RedissonException() { 16 | super(); 17 | } 18 | 19 | public RedissonException(String message) { 20 | super(message); 21 | } 22 | 23 | public RedissonException(String message, Throwable cause) { 24 | super(message, cause); 25 | } 26 | 27 | public RedissonException(Throwable cause) { 28 | super(cause); 29 | } 30 | } -------------------------------------------------------------------------------- /aquarius-lock-aop/src/main/java/com/nepxion/aquarius/lock/constant/LockConstant.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.lock.constant; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | public class LockConstant { 13 | public static final String LOCK_ENABLED = "lock.enabled"; 14 | 15 | public static final String LOCK_TYPE = "lock.type"; 16 | 17 | public static final String LOCK_TYPE_REDIS = "redisLock"; 18 | public static final String LOCK_TYPE_ZOOKEEPER = "zookeeperLock"; 19 | public static final String LOCK_TYPE_LOCAL = "localLock"; 20 | 21 | public static final String LOCK_AOP_EXCEPTION_IGNORE = "lock.aop.exception.ignore"; 22 | 23 | public static final String LOCK_SCAN_PACKAGES = "lock.scan.packages"; 24 | } -------------------------------------------------------------------------------- /aquarius-id-generator-zookeeper/src/main/java/com/nepxion/aquarius/idgenerator/zookeeper/ZookeeperIdGenerator.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.idgenerator.zookeeper; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | public interface ZookeeperIdGenerator { 13 | /** 14 | * 获取全局唯一序号 15 | * @param name 资源名字 16 | * @param key 资源Key 17 | * @return String 18 | * @throws Exception 异常 19 | */ 20 | String nextSequenceId(String name, String key) throws Exception; 21 | 22 | String nextSequenceId(String compositeKey) throws Exception; 23 | 24 | String[] nextSequenceIds(String name, String key, int count) throws Exception; 25 | 26 | String[] nextSequenceIds(String compositeKey, int count) throws Exception; 27 | } -------------------------------------------------------------------------------- /aquarius-lock-starter/src/main/java/com/nepxion/aquarius/lock/annotation/EnableLock.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.lock.annotation; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import java.lang.annotation.Documented; 13 | import java.lang.annotation.ElementType; 14 | import java.lang.annotation.Inherited; 15 | import java.lang.annotation.Retention; 16 | import java.lang.annotation.RetentionPolicy; 17 | import java.lang.annotation.Target; 18 | 19 | import org.springframework.context.annotation.Import; 20 | 21 | import com.nepxion.aquarius.lock.aop.LockImportSelector; 22 | 23 | @Target(ElementType.TYPE) 24 | @Retention(RetentionPolicy.RUNTIME) 25 | @Documented 26 | @Inherited 27 | @Import(LockImportSelector.class) 28 | public @interface EnableLock { 29 | 30 | } -------------------------------------------------------------------------------- /aquarius-spring-boot-example/src/main/java/com/nepxion/aquarius/example/limit/service/MyService8Impl.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.example.limit.service; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import org.slf4j.Logger; 13 | import org.slf4j.LoggerFactory; 14 | import org.springframework.stereotype.Service; 15 | 16 | import com.nepxion.aquarius.limit.annotation.Limit; 17 | 18 | @Service("myService8Impl") 19 | public class MyService8Impl { 20 | private static final Logger LOG = LoggerFactory.getLogger(MyService8Impl.class); 21 | 22 | @Limit(name = "limit", key = "#id1 + \"-\" + #id2", limitPeriod = 10, limitCount = 5) 23 | public String doB(String id1, String id2) { 24 | LOG.info("doB"); 25 | 26 | return "B"; 27 | } 28 | } -------------------------------------------------------------------------------- /aquarius-cache-starter/src/main/java/com/nepxion/aquarius/cache/annotation/EnableCache.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.cache.annotation; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import java.lang.annotation.Documented; 13 | import java.lang.annotation.ElementType; 14 | import java.lang.annotation.Inherited; 15 | import java.lang.annotation.Retention; 16 | import java.lang.annotation.RetentionPolicy; 17 | import java.lang.annotation.Target; 18 | 19 | import org.springframework.context.annotation.Import; 20 | 21 | import com.nepxion.aquarius.cache.aop.CacheImportSelector; 22 | 23 | @Target(ElementType.TYPE) 24 | @Retention(RetentionPolicy.RUNTIME) 25 | @Documented 26 | @Inherited 27 | @Import(CacheImportSelector.class) 28 | public @interface EnableCache { 29 | 30 | } -------------------------------------------------------------------------------- /aquarius-limit-starter/src/main/java/com/nepxion/aquarius/limit/annotation/EnableLimit.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.limit.annotation; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import java.lang.annotation.Documented; 13 | import java.lang.annotation.ElementType; 14 | import java.lang.annotation.Inherited; 15 | import java.lang.annotation.Retention; 16 | import java.lang.annotation.RetentionPolicy; 17 | import java.lang.annotation.Target; 18 | 19 | import org.springframework.context.annotation.Import; 20 | 21 | import com.nepxion.aquarius.limit.aop.LimitImportSelector; 22 | 23 | @Target(ElementType.TYPE) 24 | @Retention(RetentionPolicy.RUNTIME) 25 | @Documented 26 | @Inherited 27 | @Import(LimitImportSelector.class) 28 | public @interface EnableLimit { 29 | 30 | } -------------------------------------------------------------------------------- /aquarius-limit-starter/src/main/java/com/nepxion/aquarius/limit/configuration/LimitConfiguration.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.limit.configuration; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import org.springframework.context.annotation.Configuration; 13 | import org.springframework.context.annotation.Import; 14 | 15 | import com.nepxion.aquarius.common.configuration.AquariusConfiguration; 16 | import com.nepxion.aquarius.limit.local.configuration.LocalLimitConfiguration; 17 | import com.nepxion.aquarius.limit.redis.configuration.RedisLimitConfiguration; 18 | 19 | @Configuration 20 | @Import({ AquariusConfiguration.class, LimitAopConfiguration.class, RedisLimitConfiguration.class, LocalLimitConfiguration.class }) 21 | public class LimitConfiguration { 22 | 23 | } -------------------------------------------------------------------------------- /deploy.bat: -------------------------------------------------------------------------------- 1 | @echo on 2 | @echo ============================================================= 3 | @echo $ $ 4 | @echo $ Nepxion Aquarius $ 5 | @echo $ $ 6 | @echo $ $ 7 | @echo $ $ 8 | @echo $ Nepxion Studio All Right Reserved $ 9 | @echo $ Copyright (C) 2017-2050 $ 10 | @echo $ $ 11 | @echo ============================================================= 12 | @echo. 13 | @echo off 14 | 15 | @title Nepxion Aquarius 16 | @color 0a 17 | 18 | call mvn clean deploy -DskipTests -e -P release -pl aquarius-lock-starter,aquarius-cache-starter,aquarius-limit-starter,aquarius-id-generator-starter -am 19 | 20 | pause -------------------------------------------------------------------------------- /aquarius-common/src/main/java/com/nepxion/aquarius/common/util/MathsUtil.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.common.util; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import org.apache.commons.lang3.StringUtils; 13 | 14 | public class MathsUtil { 15 | private static final char ASTERISK = '*'; 16 | 17 | public static Long calculate(String value) { 18 | if (StringUtils.isEmpty(value)) { 19 | return null; 20 | } 21 | 22 | long result = 1; 23 | try { 24 | String[] array = StringUtils.split(value, ASTERISK); 25 | for (String data : array) { 26 | result *= Long.parseLong(data.trim()); 27 | } 28 | } catch (Exception e) { 29 | return null; 30 | } 31 | 32 | return result; 33 | } 34 | } -------------------------------------------------------------------------------- /aquarius-spring-boot-example/src/main/java/com/nepxion/aquarius/example/cache/service/MyService5.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.example.cache.service; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import com.nepxion.aquarius.cache.annotation.CacheEvict; 13 | import com.nepxion.aquarius.cache.annotation.CachePut; 14 | import com.nepxion.aquarius.cache.annotation.Cacheable; 15 | 16 | public interface MyService5 { 17 | @Cacheable(name = "cache", key = "#id1 + \"-\" + #id2", expire = -1L) 18 | String doA(String id1, String id2); 19 | 20 | @CachePut(name = "cache", key = "#id1 + \"-\" + #id2", expire = 60000L) 21 | String doB(String id1, String id2); 22 | 23 | @CacheEvict(name = "cache", key = "#id1 + \"-\" + #id2", allEntries = false, beforeInvocation = false) 24 | String doC(String id1, String id2); 25 | } -------------------------------------------------------------------------------- /aquarius-id-generator-starter/src/main/java/com/nepxion/aquarius/idgenerator/annotation/EnableLocalIdGenerator.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.idgenerator.annotation; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import java.lang.annotation.Documented; 13 | import java.lang.annotation.ElementType; 14 | import java.lang.annotation.Inherited; 15 | import java.lang.annotation.Retention; 16 | import java.lang.annotation.RetentionPolicy; 17 | import java.lang.annotation.Target; 18 | 19 | import org.springframework.context.annotation.Import; 20 | 21 | import com.nepxion.aquarius.idgenerator.aop.LocalIdGeneratorImportSelector; 22 | 23 | @Target(ElementType.TYPE) 24 | @Retention(RetentionPolicy.RUNTIME) 25 | @Documented 26 | @Inherited 27 | @Import(LocalIdGeneratorImportSelector.class) 28 | public @interface EnableLocalIdGenerator { 29 | 30 | } -------------------------------------------------------------------------------- /aquarius-id-generator-starter/src/main/java/com/nepxion/aquarius/idgenerator/annotation/EnableRedisIdGenerator.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.idgenerator.annotation; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import java.lang.annotation.Documented; 13 | import java.lang.annotation.ElementType; 14 | import java.lang.annotation.Inherited; 15 | import java.lang.annotation.Retention; 16 | import java.lang.annotation.RetentionPolicy; 17 | import java.lang.annotation.Target; 18 | 19 | import org.springframework.context.annotation.Import; 20 | 21 | import com.nepxion.aquarius.idgenerator.aop.RedisIdGeneratorImportSelector; 22 | 23 | @Target(ElementType.TYPE) 24 | @Retention(RetentionPolicy.RUNTIME) 25 | @Documented 26 | @Inherited 27 | @Import(RedisIdGeneratorImportSelector.class) 28 | public @interface EnableRedisIdGenerator { 29 | 30 | } -------------------------------------------------------------------------------- /aquarius-id-generator-starter/src/main/java/com/nepxion/aquarius/idgenerator/annotation/EnableZookeeperIdGenerator.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.idgenerator.annotation; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import java.lang.annotation.Documented; 13 | import java.lang.annotation.ElementType; 14 | import java.lang.annotation.Inherited; 15 | import java.lang.annotation.Retention; 16 | import java.lang.annotation.RetentionPolicy; 17 | import java.lang.annotation.Target; 18 | 19 | import org.springframework.context.annotation.Import; 20 | 21 | import com.nepxion.aquarius.idgenerator.aop.ZookeeperIdGeneratorImportSelector; 22 | 23 | @Target(ElementType.TYPE) 24 | @Retention(RetentionPolicy.RUNTIME) 25 | @Documented 26 | @Inherited 27 | @Import(ZookeeperIdGeneratorImportSelector.class) 28 | public @interface EnableZookeeperIdGenerator { 29 | 30 | } -------------------------------------------------------------------------------- /aquarius-lock-starter/src/main/java/com/nepxion/aquarius/lock/aop/LockImportSelector.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.lock.aop; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import org.springframework.core.Ordered; 13 | import org.springframework.core.annotation.Order; 14 | 15 | import com.nepxion.aquarius.lock.annotation.EnableLock; 16 | import com.nepxion.aquarius.lock.constant.LockConstant; 17 | import com.nepxion.matrix.selector.AbstractImportSelector; 18 | import com.nepxion.matrix.selector.RelaxedPropertyResolver; 19 | 20 | @Order(Ordered.LOWEST_PRECEDENCE - 100) 21 | public class LockImportSelector extends AbstractImportSelectorTitle: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import org.springframework.core.Ordered; 13 | import org.springframework.core.annotation.Order; 14 | 15 | import com.nepxion.aquarius.cache.annotation.EnableCache; 16 | import com.nepxion.aquarius.cache.constant.CacheConstant; 17 | import com.nepxion.matrix.selector.AbstractImportSelector; 18 | import com.nepxion.matrix.selector.RelaxedPropertyResolver; 19 | 20 | @Order(Ordered.LOWEST_PRECEDENCE - 100) 21 | public class CacheImportSelector extends AbstractImportSelectorTitle: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import org.springframework.core.Ordered; 13 | import org.springframework.core.annotation.Order; 14 | 15 | import com.nepxion.aquarius.limit.annotation.EnableLimit; 16 | import com.nepxion.aquarius.limit.constant.LimitConstant; 17 | import com.nepxion.matrix.selector.AbstractImportSelector; 18 | import com.nepxion.matrix.selector.RelaxedPropertyResolver; 19 | 20 | @Order(Ordered.LOWEST_PRECEDENCE - 100) 21 | public class LimitImportSelector extends AbstractImportSelectorTitle: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import org.springframework.context.annotation.Configuration; 13 | import org.springframework.context.annotation.Import; 14 | 15 | import com.nepxion.aquarius.common.configuration.AquariusConfiguration; 16 | import com.nepxion.aquarius.lock.local.configuration.LocalLockConfiguration; 17 | import com.nepxion.aquarius.lock.redis.configuration.RedisLockConfiguration; 18 | import com.nepxion.aquarius.lock.zookeeper.configuration.ZookeeperLockConfiguration; 19 | 20 | @Configuration 21 | @Import({ AquariusConfiguration.class, LockAopConfiguration.class, RedisLockConfiguration.class, ZookeeperLockConfiguration.class, LocalLockConfiguration.class }) 22 | public class LockConfiguration { 23 | 24 | } -------------------------------------------------------------------------------- /aquarius-id-generator-local/pom.xml: -------------------------------------------------------------------------------- 1 | 2 |Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import java.util.concurrent.TimeUnit; 13 | 14 | import org.slf4j.Logger; 15 | import org.slf4j.LoggerFactory; 16 | import org.springframework.stereotype.Service; 17 | 18 | @Service("myService3Impl") 19 | public class MyService3Impl implements MyService3 { 20 | private static final Logger LOG = LoggerFactory.getLogger(MyService3Impl.class); 21 | 22 | @Override 23 | public String doR(String id1, String id2) { 24 | try { 25 | TimeUnit.MILLISECONDS.sleep(2000L); 26 | } catch (InterruptedException e) { 27 | e.printStackTrace(); 28 | } 29 | 30 | LOG.info("doR - read lock is got"); 31 | 32 | return "R"; 33 | } 34 | } -------------------------------------------------------------------------------- /aquarius-common/src/main/java/com/nepxion/aquarius/common/condition/AquariusCondition.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.common.condition; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import org.apache.commons.lang3.StringUtils; 13 | import org.springframework.context.annotation.Condition; 14 | import org.springframework.context.annotation.ConditionContext; 15 | import org.springframework.core.type.AnnotatedTypeMetadata; 16 | 17 | public class AquariusCondition implements Condition { 18 | private String key; 19 | private String value; 20 | 21 | public AquariusCondition(String key, String value) { 22 | this.key = key; 23 | this.value = value; 24 | } 25 | 26 | @Override 27 | public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { 28 | String beanName = context.getEnvironment().getProperty(key); 29 | 30 | return StringUtils.equals(beanName, value); 31 | } 32 | } -------------------------------------------------------------------------------- /aquarius-cache-aop/src/main/java/com/nepxion/aquarius/cache/annotation/CachePut.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.cache.annotation; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import java.lang.annotation.Documented; 13 | import java.lang.annotation.ElementType; 14 | import java.lang.annotation.Inherited; 15 | import java.lang.annotation.Retention; 16 | import java.lang.annotation.RetentionPolicy; 17 | import java.lang.annotation.Target; 18 | 19 | @Target({ ElementType.METHOD, ElementType.TYPE }) 20 | @Retention(RetentionPolicy.RUNTIME) 21 | @Inherited 22 | @Documented 23 | public @interface CachePut { 24 | /** 25 | * 缓存名字 26 | * @return String 27 | */ 28 | String name() default ""; 29 | 30 | /** 31 | * 缓存Key 32 | * @return String[] 33 | */ 34 | String[] key() default {}; 35 | 36 | /** 37 | * 过期时间 38 | * 单位毫秒 39 | * @return long 40 | */ 41 | long expire() default -1234567890L; 42 | } -------------------------------------------------------------------------------- /aquarius-cache-aop/src/main/java/com/nepxion/aquarius/cache/annotation/Cacheable.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.cache.annotation; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import java.lang.annotation.Documented; 13 | import java.lang.annotation.ElementType; 14 | import java.lang.annotation.Inherited; 15 | import java.lang.annotation.Retention; 16 | import java.lang.annotation.RetentionPolicy; 17 | import java.lang.annotation.Target; 18 | 19 | @Target({ ElementType.METHOD, ElementType.TYPE }) 20 | @Retention(RetentionPolicy.RUNTIME) 21 | @Inherited 22 | @Documented 23 | public @interface Cacheable { 24 | /** 25 | * 缓存名字 26 | * @return String 27 | */ 28 | String name() default ""; 29 | 30 | /** 31 | * 缓存Key 32 | * @return String[] 33 | */ 34 | String[] key() default {}; 35 | 36 | /** 37 | * 过期时间 38 | * 单位毫秒 39 | * @return long 40 | */ 41 | long expire() default -1234567890L; 42 | } -------------------------------------------------------------------------------- /aquarius-id-generator-starter/src/main/java/com/nepxion/aquarius/idgenerator/aop/LocalIdGeneratorImportSelector.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.idgenerator.aop; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import org.springframework.core.Ordered; 13 | import org.springframework.core.annotation.Order; 14 | 15 | import com.nepxion.aquarius.idgenerator.annotation.EnableLocalIdGenerator; 16 | import com.nepxion.aquarius.idgenerator.constant.IdGeneratorConstant; 17 | import com.nepxion.matrix.selector.AbstractImportSelector; 18 | import com.nepxion.matrix.selector.RelaxedPropertyResolver; 19 | 20 | @Order(Ordered.LOWEST_PRECEDENCE - 100) 21 | public class LocalIdGeneratorImportSelector extends AbstractImportSelectorTitle: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import org.springframework.core.Ordered; 13 | import org.springframework.core.annotation.Order; 14 | 15 | import com.nepxion.aquarius.idgenerator.annotation.EnableRedisIdGenerator; 16 | import com.nepxion.aquarius.idgenerator.constant.IdGeneratorConstant; 17 | import com.nepxion.matrix.selector.AbstractImportSelector; 18 | import com.nepxion.matrix.selector.RelaxedPropertyResolver; 19 | 20 | @Order(Ordered.LOWEST_PRECEDENCE - 100) 21 | public class RedisIdGeneratorImportSelector extends AbstractImportSelectorTitle: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import org.springframework.core.Ordered; 13 | import org.springframework.core.annotation.Order; 14 | 15 | import com.nepxion.aquarius.idgenerator.annotation.EnableZookeeperIdGenerator; 16 | import com.nepxion.aquarius.idgenerator.constant.IdGeneratorConstant; 17 | import com.nepxion.matrix.selector.AbstractImportSelector; 18 | import com.nepxion.matrix.selector.RelaxedPropertyResolver; 19 | 20 | @Order(Ordered.LOWEST_PRECEDENCE - 100) 21 | public class ZookeeperIdGeneratorImportSelector extends AbstractImportSelectorTitle: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import org.springframework.beans.factory.annotation.Value; 13 | import org.springframework.context.annotation.Bean; 14 | import org.springframework.context.annotation.Configuration; 15 | 16 | import com.nepxion.aquarius.lock.aop.LockAutoScanProxy; 17 | import com.nepxion.aquarius.lock.aop.LockInterceptor; 18 | import com.nepxion.aquarius.lock.constant.LockConstant; 19 | 20 | @Configuration 21 | public class LockAopConfiguration { 22 | @Value("${" + LockConstant.LOCK_SCAN_PACKAGES + ":}") 23 | private String scanPackages; 24 | 25 | @Bean 26 | public LockAutoScanProxy lockAutoScanProxy() { 27 | return new LockAutoScanProxy(scanPackages); 28 | } 29 | 30 | @Bean 31 | public LockInterceptor lockInterceptor() { 32 | return new LockInterceptor(); 33 | } 34 | } -------------------------------------------------------------------------------- /aquarius-lock-aop/src/main/java/com/nepxion/aquarius/lock/entity/LockType.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.lock.entity; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | public enum LockType { 13 | // 普通锁 14 | LOCK("Lock"), 15 | 16 | // 读锁 17 | READ_LOCK("ReadLock"), 18 | 19 | // 写锁 20 | WRITE_LOCK("WriteLock"); 21 | 22 | private String value; 23 | 24 | private LockType(String value) { 25 | this.value = value; 26 | } 27 | 28 | public String getValue() { 29 | return value; 30 | } 31 | 32 | public static LockType fromString(String value) { 33 | for (LockType type : LockType.values()) { 34 | if (type.getValue().equalsIgnoreCase(value.trim())) { 35 | return type; 36 | } 37 | } 38 | 39 | throw new IllegalArgumentException("Mismatched type with value=" + value); 40 | } 41 | 42 | @Override 43 | public String toString() { 44 | return value; 45 | } 46 | } -------------------------------------------------------------------------------- /aquarius-lock-aop/src/main/java/com/nepxion/aquarius/lock/LockExecutor.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.lock; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import com.nepxion.aquarius.lock.entity.LockType; 13 | 14 | public interface LockExecutorTitle: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import org.springframework.beans.factory.annotation.Value; 13 | import org.springframework.context.annotation.Bean; 14 | import org.springframework.context.annotation.Configuration; 15 | 16 | import com.nepxion.aquarius.cache.aop.CacheAutoScanProxy; 17 | import com.nepxion.aquarius.cache.aop.CacheInterceptor; 18 | import com.nepxion.aquarius.cache.constant.CacheConstant; 19 | 20 | @Configuration 21 | public class CacheAopConfiguration { 22 | @Value("${" + CacheConstant.CACHE_SCAN_PACKAGES + ":}") 23 | private String scanPackages; 24 | 25 | @Bean 26 | public CacheAutoScanProxy cacheAutoScanProxy() { 27 | return new CacheAutoScanProxy(scanPackages); 28 | } 29 | 30 | @Bean 31 | public CacheInterceptor cacheInterceptor() { 32 | return new CacheInterceptor(); 33 | } 34 | } -------------------------------------------------------------------------------- /aquarius-limit-aop/src/main/java/com/nepxion/aquarius/limit/configuration/LimitAopConfiguration.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.limit.configuration; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import org.springframework.beans.factory.annotation.Value; 13 | import org.springframework.context.annotation.Bean; 14 | import org.springframework.context.annotation.Configuration; 15 | 16 | import com.nepxion.aquarius.limit.aop.LimitAutoScanProxy; 17 | import com.nepxion.aquarius.limit.aop.LimitInterceptor; 18 | import com.nepxion.aquarius.limit.constant.LimitConstant; 19 | 20 | @Configuration 21 | public class LimitAopConfiguration { 22 | @Value("${" + LimitConstant.LIMIT_SCAN_PACKAGES + ":}") 23 | private String scanPackages; 24 | 25 | @Bean 26 | public LimitAutoScanProxy limitAutoScanProxy() { 27 | return new LimitAutoScanProxy(scanPackages); 28 | } 29 | 30 | @Bean 31 | public LimitInterceptor limitInterceptor() { 32 | return new LimitInterceptor(); 33 | } 34 | } -------------------------------------------------------------------------------- /aquarius-limit-local/pom.xml: -------------------------------------------------------------------------------- 1 | 2 |Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import java.util.concurrent.TimeUnit; 13 | 14 | import org.slf4j.Logger; 15 | import org.slf4j.LoggerFactory; 16 | import org.springframework.stereotype.Service; 17 | 18 | @Service("myService1Impl") 19 | public class MyService1Impl implements MyService1 { 20 | private static final Logger LOG = LoggerFactory.getLogger(MyService1Impl.class); 21 | 22 | @Override 23 | public String doA(String id1, String id2) { 24 | try { 25 | TimeUnit.MILLISECONDS.sleep(2000L); 26 | } catch (InterruptedException e) { 27 | e.printStackTrace(); 28 | } 29 | 30 | LOG.info("doA - lock is got"); 31 | 32 | return "A"; 33 | } 34 | 35 | @Override 36 | public String doB(String id1, String id2) { 37 | LOG.info("doB"); 38 | 39 | return "B"; 40 | } 41 | } -------------------------------------------------------------------------------- /aquarius-limit-aop/src/main/java/com/nepxion/aquarius/limit/annotation/Limit.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.limit.annotation; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import java.lang.annotation.Documented; 13 | import java.lang.annotation.ElementType; 14 | import java.lang.annotation.Inherited; 15 | import java.lang.annotation.Retention; 16 | import java.lang.annotation.RetentionPolicy; 17 | import java.lang.annotation.Target; 18 | 19 | @Target({ ElementType.METHOD, ElementType.TYPE }) 20 | @Retention(RetentionPolicy.RUNTIME) 21 | @Inherited 22 | @Documented 23 | public @interface Limit { 24 | /** 25 | * 资源的名字 26 | * @return String 27 | */ 28 | String name() default ""; 29 | 30 | /** 31 | * 资源的key 32 | * @return String 33 | */ 34 | String key() default ""; 35 | 36 | /** 37 | * 给定的时间段 38 | * 单位秒 39 | * @return int 40 | */ 41 | int limitPeriod(); 42 | 43 | /** 44 | * 最多的访问限制次数 45 | * @return int 46 | */ 47 | int limitCount(); 48 | } -------------------------------------------------------------------------------- /aquarius-limit-redis/pom.xml: -------------------------------------------------------------------------------- 1 | 2 |Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import java.util.concurrent.TimeUnit; 13 | 14 | import org.slf4j.Logger; 15 | import org.slf4j.LoggerFactory; 16 | import org.springframework.stereotype.Service; 17 | 18 | import com.nepxion.aquarius.lock.annotation.WriteLock; 19 | 20 | @Service("myService4Impl") 21 | public class MyService4Impl { 22 | private static final Logger LOG = LoggerFactory.getLogger(MyService4Impl.class); 23 | 24 | @WriteLock(name = "lock", key = "#id1 + \"-\" + #id2", leaseTime = 15000L, waitTime = 60000L, async = false, fair = false) 25 | public String doW(String id1, String id2) { 26 | try { 27 | TimeUnit.MILLISECONDS.sleep(10000L); 28 | } catch (InterruptedException e) { 29 | e.printStackTrace(); 30 | } 31 | 32 | LOG.info("doW - write lock is got"); 33 | 34 | return "W"; 35 | } 36 | } -------------------------------------------------------------------------------- /aquarius-spring-cloud-example/src/main/java/com/nepxion/aquarius/example/limit/LimitAopController.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.example.limit; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import io.swagger.annotations.Api; 13 | 14 | import org.slf4j.Logger; 15 | import org.slf4j.LoggerFactory; 16 | import org.springframework.web.bind.annotation.RequestMapping; 17 | import org.springframework.web.bind.annotation.RequestMethod; 18 | import org.springframework.web.bind.annotation.RestController; 19 | 20 | import com.nepxion.aquarius.limit.annotation.Limit; 21 | 22 | @RestController 23 | @Api(tags = { "分布式限流注解接口" }) 24 | public class LimitAopController { 25 | private static final Logger LOG = LoggerFactory.getLogger(LimitAopController.class); 26 | 27 | @RequestMapping(path = "/doG", method = RequestMethod.GET) 28 | @Limit(name = "limit", key = "#id1 + \"-\" + #id2", limitPeriod = 10, limitCount = 5) 29 | public String doG(String id1, String id2) { 30 | LOG.info("doG"); 31 | 32 | return "G"; 33 | } 34 | } -------------------------------------------------------------------------------- /aquarius-id-generator-redis/src/main/java/com/nepxion/aquarius/idgenerator/redis/RedisIdGenerator.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.idgenerator.redis; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | public interface RedisIdGenerator { 13 | /** 14 | * 获取全局唯一ID 15 | * ID规则: 16 | * 1. ID的前半部分为yyyyMMddHHmmssSSS格式的17位数字 17 | * 2. ID的后半部分为由length(最大为8位,如果length大于8,则取8)决定,取值Redis对应Value,如果小于length所对应的数位,如果不足该数位,前面补足0 18 | * 例如Redis对应Value为1234,length为8,那么ID的后半部分为00001234;length为2,那么ID的后半部分为34 19 | * @param name 资源名字 20 | * @param key 资源Key 21 | * @param step 递增值 22 | * @param length 长度 23 | * @return String 24 | */ 25 | String nextUniqueId(String name, String key, int step, int length) throws Exception; 26 | 27 | String nextUniqueId(String compositeKey, int step, int length) throws Exception; 28 | 29 | String[] nextUniqueIds(String name, String key, int step, int length, int count) throws Exception; 30 | 31 | String[] nextUniqueIds(String compositeKey, int step, int length, int count) throws Exception; 32 | } -------------------------------------------------------------------------------- /aquarius-cache-aop/src/main/java/com/nepxion/aquarius/cache/annotation/CacheEvict.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.cache.annotation; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import java.lang.annotation.Documented; 13 | import java.lang.annotation.ElementType; 14 | import java.lang.annotation.Inherited; 15 | import java.lang.annotation.Retention; 16 | import java.lang.annotation.RetentionPolicy; 17 | import java.lang.annotation.Target; 18 | 19 | @Target({ ElementType.METHOD, ElementType.TYPE }) 20 | @Retention(RetentionPolicy.RUNTIME) 21 | @Inherited 22 | @Documented 23 | public @interface CacheEvict { 24 | /** 25 | * 缓存名字 26 | * @return String 27 | */ 28 | String name() default ""; 29 | 30 | /** 31 | * 缓存Key 32 | * @return String[] 33 | */ 34 | String[] key() default {}; 35 | 36 | /** 37 | * 是否全部清除缓存内容 38 | * @return boolean 39 | */ 40 | boolean allEntries() default false; 41 | 42 | /** 43 | * 缓存清理是在方法调用前还是调用后 44 | * @return boolean 45 | */ 46 | boolean beforeInvocation() default false; 47 | } -------------------------------------------------------------------------------- /aquarius-spring-cloud-example/src/main/java/com/nepxion/aquarius/example/AquariusApplication.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.example; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import org.springframework.boot.autoconfigure.SpringBootApplication; 13 | import org.springframework.boot.builder.SpringApplicationBuilder; 14 | 15 | import com.nepxion.aquarius.cache.annotation.EnableCache; 16 | import com.nepxion.aquarius.idgenerator.annotation.EnableLocalIdGenerator; 17 | import com.nepxion.aquarius.idgenerator.annotation.EnableRedisIdGenerator; 18 | import com.nepxion.aquarius.idgenerator.annotation.EnableZookeeperIdGenerator; 19 | import com.nepxion.aquarius.limit.annotation.EnableLimit; 20 | import com.nepxion.aquarius.lock.annotation.EnableLock; 21 | 22 | @SpringBootApplication 23 | @EnableLock 24 | @EnableCache 25 | @EnableLimit 26 | @EnableLocalIdGenerator 27 | @EnableRedisIdGenerator 28 | @EnableZookeeperIdGenerator 29 | public class AquariusApplication { 30 | public static void main(String[] args) { 31 | new SpringApplicationBuilder(AquariusApplication.class).run(args); 32 | } 33 | } -------------------------------------------------------------------------------- /aquarius-id-generator-zookeeper/src/main/java/com/nepxion/aquarius/idgenerator/zookeeper/configuration/ZookeeperIdGeneratorConfiguration.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.idgenerator.zookeeper.configuration; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; 13 | import org.springframework.context.annotation.Bean; 14 | import org.springframework.context.annotation.Configuration; 15 | 16 | import com.nepxion.aquarius.common.curator.handler.CuratorHandler; 17 | import com.nepxion.aquarius.common.curator.handler.CuratorHandlerImpl; 18 | import com.nepxion.aquarius.idgenerator.zookeeper.ZookeeperIdGenerator; 19 | import com.nepxion.aquarius.idgenerator.zookeeper.impl.ZookeeperIdGeneratorImpl; 20 | 21 | @Configuration 22 | public class ZookeeperIdGeneratorConfiguration { 23 | @Bean 24 | public ZookeeperIdGenerator zookeeperIdGenerator() { 25 | return new ZookeeperIdGeneratorImpl(); 26 | } 27 | 28 | @Bean 29 | @ConditionalOnMissingBean 30 | public CuratorHandler curatorHandler() { 31 | return new CuratorHandlerImpl(); 32 | } 33 | } -------------------------------------------------------------------------------- /aquarius-spring-boot-example/src/main/java/com/nepxion/aquarius/example/lock/service/MyService2Impl.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.example.lock.service; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import java.util.concurrent.TimeUnit; 13 | 14 | import org.slf4j.Logger; 15 | import org.slf4j.LoggerFactory; 16 | import org.springframework.stereotype.Service; 17 | 18 | import com.nepxion.aquarius.lock.annotation.Lock; 19 | 20 | @Service("myService2Impl") 21 | public class MyService2Impl { 22 | private static final Logger LOG = LoggerFactory.getLogger(MyService2Impl.class); 23 | 24 | @Lock(name = "lock", key = "#id1 + \"-\" + #id2", leaseTime = 5000L, waitTime = 60000L, async = false, fair = false) 25 | public String doC(String id1, String id2) { 26 | try { 27 | TimeUnit.MILLISECONDS.sleep(2000L); 28 | } catch (InterruptedException e) { 29 | e.printStackTrace(); 30 | } 31 | 32 | LOG.info("doC - lock is got"); 33 | 34 | return "C"; 35 | } 36 | 37 | public String doD(String id1, String id2) { 38 | LOG.info("doD"); 39 | 40 | return "D"; 41 | } 42 | } -------------------------------------------------------------------------------- /aquarius-common-zookeeper/src/main/java/com/nepxion/aquarius/common/curator/entity/RetryTypeEnum.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.common.curator.entity; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | public enum RetryTypeEnum { 13 | EXPONENTIAL_BACKOFF_RETRY("exponentialBackoffRetry"), 14 | BOUNDED_EXPONENTIAL_BACKOFF_RETRY("boundedExponentialBackoffRetry"), 15 | RETRY_NTIMES("retryNTimes"), 16 | RETRY_FOREVER("retryForever"), 17 | RETRY_UNTIL_ELAPSED("retryUntilElapsed"); 18 | 19 | private String value; 20 | 21 | private RetryTypeEnum(String value) { 22 | this.value = value; 23 | } 24 | 25 | public String getValue() { 26 | return value; 27 | } 28 | 29 | public static RetryTypeEnum fromString(String value) { 30 | for (RetryTypeEnum type : RetryTypeEnum.values()) { 31 | if (type.getValue().equalsIgnoreCase(value.trim())) { 32 | return type; 33 | } 34 | } 35 | 36 | throw new IllegalArgumentException("Mismatched type with value=" + value); 37 | } 38 | 39 | @Override 40 | public String toString() { 41 | return value; 42 | } 43 | } -------------------------------------------------------------------------------- /aquarius-lock-local/src/main/java/com/nepxion/aquarius/lock/local/configuration/LocalLockConfiguration.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.lock.local.configuration; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import java.util.concurrent.locks.Lock; 13 | 14 | import org.springframework.context.annotation.Bean; 15 | import org.springframework.context.annotation.Conditional; 16 | import org.springframework.context.annotation.Configuration; 17 | 18 | import com.nepxion.aquarius.lock.LockDelegate; 19 | import com.nepxion.aquarius.lock.LockExecutor; 20 | import com.nepxion.aquarius.lock.local.condition.LocalLockCondition; 21 | import com.nepxion.aquarius.lock.local.impl.LocalLockDelegateImpl; 22 | import com.nepxion.aquarius.lock.local.impl.LocalLockExecutorImpl; 23 | 24 | @Configuration 25 | public class LocalLockConfiguration { 26 | @Bean 27 | @Conditional(LocalLockCondition.class) 28 | public LockDelegate localLockDelegate() { 29 | return new LocalLockDelegateImpl(); 30 | } 31 | 32 | @Bean 33 | @Conditional(LocalLockCondition.class) 34 | public LockExecutorTitle: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import org.springframework.context.annotation.Bean; 13 | import org.springframework.context.annotation.Conditional; 14 | import org.springframework.context.annotation.Configuration; 15 | 16 | import com.nepxion.aquarius.limit.LimitDelegate; 17 | import com.nepxion.aquarius.limit.LimitExecutor; 18 | import com.nepxion.aquarius.limit.local.condition.LocalLimitCondition; 19 | import com.nepxion.aquarius.limit.local.impl.GuavaLocalLimitExecutorImpl; 20 | import com.nepxion.aquarius.limit.local.impl.LocalLimitDelegateImpl; 21 | 22 | @Configuration 23 | public class LocalLimitConfiguration { 24 | @Bean 25 | @Conditional(LocalLimitCondition.class) 26 | public LimitDelegate localLimitDelegate() { 27 | return new LocalLimitDelegateImpl(); 28 | } 29 | 30 | @Bean 31 | @Conditional(LocalLimitCondition.class) 32 | public LimitExecutor localLimitExecutor() { 33 | return new GuavaLocalLimitExecutorImpl(); 34 | 35 | // return new JdkLimitExecutorImpl(); 36 | } 37 | } -------------------------------------------------------------------------------- /aquarius-lock-redis/pom.xml: -------------------------------------------------------------------------------- 1 | 2 |Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; 13 | import org.springframework.context.annotation.Bean; 14 | import org.springframework.context.annotation.Configuration; 15 | import org.springframework.context.annotation.Import; 16 | 17 | import com.nepxion.aquarius.common.redis.configuration.RedisConfiguration; 18 | import com.nepxion.aquarius.common.redis.handler.RedisHandler; 19 | import com.nepxion.aquarius.common.redis.handler.RedisHandlerImpl; 20 | import com.nepxion.aquarius.idgenerator.redis.RedisIdGenerator; 21 | import com.nepxion.aquarius.idgenerator.redis.impl.RedisIdGeneratorImpl; 22 | 23 | @Configuration 24 | @Import({ RedisConfiguration.class }) 25 | public class RedisIdGeneratorConfiguration { 26 | @Bean 27 | public RedisIdGenerator redisIdGenerator() { 28 | return new RedisIdGeneratorImpl(); 29 | } 30 | 31 | @Bean 32 | @ConditionalOnMissingBean 33 | public RedisHandler redisHandler() { 34 | return new RedisHandlerImpl(); 35 | } 36 | } -------------------------------------------------------------------------------- /aquarius-id-generator-local/src/main/java/com/nepxion/aquarius/idgenerator/local/LocalIdGenerator.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.idgenerator.local; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | public interface LocalIdGenerator { 13 | String nextUniqueId(long dataCenterId, long machineId) throws Exception; 14 | 15 | String nextUniqueId(String startTimestamp, long dataCenterId, long machineId) throws Exception; 16 | 17 | /** 18 | * 获取全局唯一ID,根据Twitter雪花ID算法。为兼顾到前端失精问题,把返回值long改成String 19 | * SnowFlake算法用来生成64位的ID,刚好可以用long整型存储,能够用于分布式系统中生产唯一的ID, 并且生成的ID有大致的顺序。 在这次实现中,生成的64位ID可以分成5个部分: 20 | * 0 - 41位时间戳 - 5位数据中心标识 - 5位机器标识 - 12位序列号 21 | * @param startTimestamp 起始计算时间戳(默认2017-01-01) 22 | * @param dataCenterId 数据中心标识ID 23 | * @param machineId 机器标识ID 24 | * @return String 25 | */ 26 | String nextUniqueId(long startTimestamp, long dataCenterId, long machineId) throws Exception; 27 | 28 | String[] nextUniqueIds(long dataCenterId, long machineId, int count) throws Exception; 29 | 30 | String[] nextUniqueIds(String startTimestamp, long dataCenterId, long machineId, int count) throws Exception; 31 | 32 | String[] nextUniqueIds(long startTimestamp, long dataCenterId, long machineId, int count) throws Exception; 33 | } -------------------------------------------------------------------------------- /aquarius-id-generator-zookeeper/pom.xml: -------------------------------------------------------------------------------- 1 | 2 |Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import java.io.File; 13 | import java.io.IOException; 14 | import java.io.InputStream; 15 | 16 | import org.apache.commons.io.FileUtils; 17 | import org.apache.commons.io.IOUtils; 18 | 19 | import com.nepxion.aquarius.common.util.IOUtil; 20 | 21 | public class AquariusContent { 22 | private String content; 23 | 24 | public AquariusContent(String path, String encoding) throws IOException { 25 | InputStream inputStream = null; 26 | try { 27 | inputStream = IOUtil.getInputStream(path); 28 | this.content = IOUtils.toString(inputStream, encoding); 29 | } finally { 30 | if (inputStream != null) { 31 | IOUtils.closeQuietly(inputStream); 32 | } 33 | } 34 | } 35 | 36 | public AquariusContent(File file, String encoding) throws IOException { 37 | this.content = FileUtils.readFileToString(file, encoding); 38 | } 39 | 40 | public AquariusContent(StringBuilder stringBuilder) throws IOException { 41 | this.content = stringBuilder.toString(); 42 | } 43 | 44 | public String getContent() { 45 | return content; 46 | } 47 | } -------------------------------------------------------------------------------- /aquarius-lock-aop/src/main/java/com/nepxion/aquarius/lock/annotation/Lock.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.lock.annotation; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import java.lang.annotation.Documented; 13 | import java.lang.annotation.ElementType; 14 | import java.lang.annotation.Inherited; 15 | import java.lang.annotation.Retention; 16 | import java.lang.annotation.RetentionPolicy; 17 | import java.lang.annotation.Target; 18 | 19 | @Target({ ElementType.METHOD, ElementType.TYPE }) 20 | @Retention(RetentionPolicy.RUNTIME) 21 | @Inherited 22 | @Documented 23 | public @interface Lock { 24 | /** 25 | * 锁的名字 26 | * @return String 27 | */ 28 | String name() default ""; 29 | 30 | /** 31 | * 锁的key 32 | * @return String 33 | */ 34 | String key() default ""; 35 | 36 | /** 37 | * 持锁时间,持锁超过此时间则自动丢弃锁 38 | * 单位毫秒,默认5秒 39 | * @return long 40 | */ 41 | long leaseTime() default 5000L; 42 | 43 | /** 44 | * 没有获取到锁时,等待时间 45 | * 单位毫秒,默认60秒 46 | * @return long 47 | */ 48 | long waitTime() default 60000L; 49 | 50 | /** 51 | * 是否采用锁的异步执行方式(异步拿锁,同步阻塞) 52 | * @return boolean 53 | */ 54 | boolean async() default false; 55 | 56 | /** 57 | * 是否采用公平锁 58 | * @return boolean 59 | */ 60 | boolean fair() default false; 61 | } -------------------------------------------------------------------------------- /aquarius-lock-aop/src/main/java/com/nepxion/aquarius/lock/annotation/ReadLock.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.lock.annotation; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import java.lang.annotation.Documented; 13 | import java.lang.annotation.ElementType; 14 | import java.lang.annotation.Inherited; 15 | import java.lang.annotation.Retention; 16 | import java.lang.annotation.RetentionPolicy; 17 | import java.lang.annotation.Target; 18 | 19 | @Target({ ElementType.METHOD, ElementType.TYPE }) 20 | @Retention(RetentionPolicy.RUNTIME) 21 | @Inherited 22 | @Documented 23 | public @interface ReadLock { 24 | /** 25 | * 锁的名字 26 | * @return String 27 | */ 28 | String name() default ""; 29 | 30 | /** 31 | * 锁的key 32 | * @return String 33 | */ 34 | String key() default ""; 35 | 36 | /** 37 | * 持锁时间,持锁超过此时间则自动丢弃锁 38 | * 单位毫秒,默认5秒 39 | * @return long 40 | */ 41 | long leaseTime() default 5000L; 42 | 43 | /** 44 | * 没有获取到锁时,等待时间 45 | * 单位毫秒,默认60秒 46 | * @return long 47 | */ 48 | long waitTime() default 60000L; 49 | 50 | /** 51 | * 是否采用锁的异步执行方式(异步拿锁,同步阻塞) 52 | * @return boolean 53 | */ 54 | boolean async() default false; 55 | 56 | /** 57 | * 是否采用公平锁 58 | * @return boolean 59 | */ 60 | boolean fair() default false; 61 | } -------------------------------------------------------------------------------- /aquarius-spring-boot-example/src/main/java/com/nepxion/aquarius/example/adapter/RedissonAdapterImpl.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.example.adapter; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import java.io.IOException; 13 | 14 | import org.redisson.config.Config; 15 | 16 | import com.nepxion.aquarius.common.redisson.adapter.RedissonAdapter; 17 | import com.nepxion.aquarius.common.redisson.handler.RedissonHandler; 18 | import com.nepxion.aquarius.common.redisson.handler.RedissonHandlerImpl; 19 | import com.nepxion.aquarius.common.redisson.util.RedissonUtil; 20 | 21 | public class RedissonAdapterImpl implements RedissonAdapter { 22 | @Override 23 | public RedissonHandler getRedissonHandler() { 24 | // 来自远程配置中心的内容 25 | String yamlConfigContent = "..."; 26 | 27 | Config config = null; 28 | try { 29 | config = RedissonUtil.createYamlConfig(yamlConfigContent); 30 | } catch (IOException e) { 31 | e.printStackTrace(); 32 | } 33 | 34 | /*String jsonConfigContent = "..."; 35 | 36 | Config config = null; 37 | try { 38 | config = RedissonUtil.createJsonConfig(jsonConfigContent); 39 | } catch (IOException e) { 40 | e.printStackTrace(); 41 | }*/ 42 | 43 | return new RedissonHandlerImpl(config); 44 | } 45 | } -------------------------------------------------------------------------------- /aquarius-lock-aop/src/main/java/com/nepxion/aquarius/lock/annotation/WriteLock.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.lock.annotation; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import java.lang.annotation.Documented; 13 | import java.lang.annotation.ElementType; 14 | import java.lang.annotation.Inherited; 15 | import java.lang.annotation.Retention; 16 | import java.lang.annotation.RetentionPolicy; 17 | import java.lang.annotation.Target; 18 | 19 | @Target({ ElementType.METHOD, ElementType.TYPE }) 20 | @Retention(RetentionPolicy.RUNTIME) 21 | @Inherited 22 | @Documented 23 | public @interface WriteLock { 24 | /** 25 | * 锁的名字 26 | * @return String 27 | */ 28 | String name() default ""; 29 | 30 | /** 31 | * 锁的key 32 | * @return String 33 | */ 34 | String key() default ""; 35 | 36 | /** 37 | * 持锁时间,持锁超过此时间则自动丢弃锁 38 | * 单位毫秒,默认5秒 39 | * @return long 40 | */ 41 | long leaseTime() default 5000L; 42 | 43 | /** 44 | * 没有获取到锁时,等待时间 45 | * 单位毫秒,默认60秒 46 | * @return long 47 | */ 48 | long waitTime() default 60000L; 49 | 50 | /** 51 | * 是否采用锁的异步执行方式(异步拿锁,同步阻塞) 52 | * @return boolean 53 | */ 54 | boolean async() default false; 55 | 56 | /** 57 | * 是否采用公平锁 58 | * @return boolean 59 | */ 60 | boolean fair() default false; 61 | } -------------------------------------------------------------------------------- /aquarius-cache-starter/pom.xml: -------------------------------------------------------------------------------- 1 | 2 |Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; 13 | import org.springframework.context.annotation.Bean; 14 | import org.springframework.context.annotation.Conditional; 15 | import org.springframework.context.annotation.Configuration; 16 | import org.springframework.context.annotation.Import; 17 | 18 | import com.nepxion.aquarius.cache.CacheDelegate; 19 | import com.nepxion.aquarius.cache.redis.condition.RedisCacheCondition; 20 | import com.nepxion.aquarius.cache.redis.impl.RedisCacheDelegateImpl; 21 | import com.nepxion.aquarius.common.redis.configuration.RedisConfiguration; 22 | import com.nepxion.aquarius.common.redis.handler.RedisHandler; 23 | import com.nepxion.aquarius.common.redis.handler.RedisHandlerImpl; 24 | 25 | @Configuration 26 | @Import({ RedisConfiguration.class }) 27 | public class RedisCacheConfiguration { 28 | @Bean 29 | @Conditional(RedisCacheCondition.class) 30 | public CacheDelegate redisCacheDelegate() { 31 | return new RedisCacheDelegateImpl(); 32 | } 33 | 34 | @Bean 35 | @Conditional(RedisCacheCondition.class) 36 | @ConditionalOnMissingBean 37 | public RedisHandler redisHandler() { 38 | return new RedisHandlerImpl(); 39 | } 40 | } -------------------------------------------------------------------------------- /aquarius-lock-zookeeper/pom.xml: -------------------------------------------------------------------------------- 1 | 2 |Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import java.lang.annotation.Annotation; 13 | 14 | import com.nepxion.aquarius.limit.annotation.Limit; 15 | import com.nepxion.matrix.proxy.aop.DefaultAutoScanProxy; 16 | import com.nepxion.matrix.proxy.mode.ProxyMode; 17 | import com.nepxion.matrix.proxy.mode.ScanMode; 18 | 19 | public class LimitAutoScanProxy extends DefaultAutoScanProxy { 20 | private static final long serialVersionUID = -6456216398492047529L; 21 | 22 | private String[] commonInterceptorNames; 23 | 24 | @SuppressWarnings("rawtypes") 25 | private Class[] methodAnnotations; 26 | 27 | public LimitAutoScanProxy(String scanPackages) { 28 | super(scanPackages, ProxyMode.BY_METHOD_ANNOTATION_ONLY, ScanMode.FOR_METHOD_ANNOTATION_ONLY); 29 | } 30 | 31 | @Override 32 | protected String[] getCommonInterceptorNames() { 33 | if (commonInterceptorNames == null) { 34 | commonInterceptorNames = new String[] { "limitInterceptor" }; 35 | } 36 | 37 | return commonInterceptorNames; 38 | } 39 | 40 | @SuppressWarnings("unchecked") 41 | @Override 42 | protected Class extends Annotation>[] getMethodAnnotations() { 43 | if (methodAnnotations == null) { 44 | methodAnnotations = new Class[] { Limit.class }; 45 | } 46 | 47 | return methodAnnotations; 48 | } 49 | } -------------------------------------------------------------------------------- /aquarius-spring-boot-example/src/main/java/com/nepxion/aquarius/example/cache/service/MyService5Impl.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.example.cache.service; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import java.util.concurrent.TimeUnit; 13 | 14 | import org.slf4j.Logger; 15 | import org.slf4j.LoggerFactory; 16 | import org.springframework.stereotype.Service; 17 | 18 | @Service("myService5Impl") 19 | public class MyService5Impl implements MyService5 { 20 | private static final Logger LOG = LoggerFactory.getLogger(MyService5Impl.class); 21 | 22 | @Override 23 | public String doA(String id1, String id2) { 24 | try { 25 | TimeUnit.MILLISECONDS.sleep(2000L); 26 | } catch (InterruptedException e) { 27 | e.printStackTrace(); 28 | } 29 | 30 | LOG.info("doA"); 31 | 32 | return "A"; 33 | } 34 | 35 | @Override 36 | public String doB(String id1, String id2) { 37 | try { 38 | TimeUnit.MILLISECONDS.sleep(2000L); 39 | } catch (InterruptedException e) { 40 | e.printStackTrace(); 41 | } 42 | 43 | LOG.info("doB"); 44 | 45 | return "B"; 46 | } 47 | 48 | @Override 49 | public String doC(String id1, String id2) { 50 | try { 51 | TimeUnit.MILLISECONDS.sleep(2000L); 52 | } catch (InterruptedException e) { 53 | e.printStackTrace(); 54 | } 55 | 56 | LOG.info("doC"); 57 | 58 | return "C"; 59 | } 60 | } -------------------------------------------------------------------------------- /aquarius-limit-starter/pom.xml: -------------------------------------------------------------------------------- 1 | 2 |Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import java.lang.annotation.Annotation; 13 | 14 | import com.nepxion.aquarius.lock.annotation.Lock; 15 | import com.nepxion.aquarius.lock.annotation.ReadLock; 16 | import com.nepxion.aquarius.lock.annotation.WriteLock; 17 | import com.nepxion.matrix.proxy.aop.DefaultAutoScanProxy; 18 | import com.nepxion.matrix.proxy.mode.ProxyMode; 19 | import com.nepxion.matrix.proxy.mode.ScanMode; 20 | 21 | public class LockAutoScanProxy extends DefaultAutoScanProxy { 22 | private static final long serialVersionUID = -957037966342626931L; 23 | 24 | private String[] commonInterceptorNames; 25 | 26 | @SuppressWarnings("rawtypes") 27 | private Class[] methodAnnotations; 28 | 29 | public LockAutoScanProxy(String scanPackages) { 30 | super(scanPackages, ProxyMode.BY_METHOD_ANNOTATION_ONLY, ScanMode.FOR_METHOD_ANNOTATION_ONLY); 31 | } 32 | 33 | @Override 34 | protected String[] getCommonInterceptorNames() { 35 | if (commonInterceptorNames == null) { 36 | commonInterceptorNames = new String[] { "lockInterceptor" }; 37 | } 38 | 39 | return commonInterceptorNames; 40 | } 41 | 42 | @SuppressWarnings("unchecked") 43 | @Override 44 | protected Class extends Annotation>[] getMethodAnnotations() { 45 | if (methodAnnotations == null) { 46 | methodAnnotations = new Class[] { Lock.class, ReadLock.class, WriteLock.class }; 47 | } 48 | 49 | return methodAnnotations; 50 | } 51 | } -------------------------------------------------------------------------------- /aquarius-cache-aop/src/main/java/com/nepxion/aquarius/cache/aop/CacheAutoScanProxy.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.cache.aop; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import java.lang.annotation.Annotation; 13 | 14 | import com.nepxion.aquarius.cache.annotation.CacheEvict; 15 | import com.nepxion.aquarius.cache.annotation.CachePut; 16 | import com.nepxion.aquarius.cache.annotation.Cacheable; 17 | import com.nepxion.matrix.proxy.aop.DefaultAutoScanProxy; 18 | import com.nepxion.matrix.proxy.mode.ProxyMode; 19 | import com.nepxion.matrix.proxy.mode.ScanMode; 20 | 21 | public class CacheAutoScanProxy extends DefaultAutoScanProxy { 22 | private static final long serialVersionUID = 5099476398968133135L; 23 | 24 | private String[] commonInterceptorNames; 25 | 26 | @SuppressWarnings("rawtypes") 27 | private Class[] methodAnnotations; 28 | 29 | public CacheAutoScanProxy(String scanPackages) { 30 | super(scanPackages, ProxyMode.BY_METHOD_ANNOTATION_ONLY, ScanMode.FOR_METHOD_ANNOTATION_ONLY); 31 | } 32 | 33 | @Override 34 | protected String[] getCommonInterceptorNames() { 35 | if (commonInterceptorNames == null) { 36 | commonInterceptorNames = new String[] { "cacheInterceptor" }; 37 | } 38 | 39 | return commonInterceptorNames; 40 | } 41 | 42 | @SuppressWarnings("unchecked") 43 | @Override 44 | protected Class extends Annotation>[] getMethodAnnotations() { 45 | if (methodAnnotations == null) { 46 | methodAnnotations = new Class[] { Cacheable.class, CachePut.class, CacheEvict.class }; 47 | } 48 | 49 | return methodAnnotations; 50 | } 51 | } -------------------------------------------------------------------------------- /aquarius-common-redis/src/main/java/com/nepxion/aquarius/common/redisson/util/RedissonUtil.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.common.redisson.util; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import java.io.IOException; 13 | 14 | import org.redisson.config.Config; 15 | import org.slf4j.Logger; 16 | import org.slf4j.LoggerFactory; 17 | 18 | import com.nepxion.aquarius.common.constant.AquariusConstant; 19 | import com.nepxion.aquarius.common.property.AquariusContent; 20 | 21 | public class RedissonUtil { 22 | private static final Logger LOG = LoggerFactory.getLogger(RedissonUtil.class); 23 | 24 | // 创建Yaml格式的配置文件 25 | public static Config createYamlFileConfig(String yamlConfigPath) throws IOException { 26 | LOG.info("Start to read {}...", yamlConfigPath); 27 | 28 | AquariusContent content = new AquariusContent(yamlConfigPath, AquariusConstant.ENCODING_UTF_8); 29 | 30 | return createYamlConfig(content.getContent()); 31 | } 32 | 33 | // 创建Json格式的配置文件 34 | public static Config createJsonFileConfig(String jsonConfigPath) throws IOException { 35 | LOG.info("Start to read {}...", jsonConfigPath); 36 | 37 | AquariusContent content = new AquariusContent(jsonConfigPath, AquariusConstant.ENCODING_UTF_8); 38 | 39 | return createJsonConfig(content.getContent()); 40 | } 41 | 42 | // 创建Yaml格式的配置文件 43 | public static Config createYamlConfig(String yamlConfigContent) throws IOException { 44 | return Config.fromYAML(yamlConfigContent); 45 | } 46 | 47 | // 创建Json格式的配置文件 48 | public static Config createJsonConfig(String jsonConfigContent) throws IOException { 49 | return Config.fromJSON(jsonConfigContent); 50 | } 51 | } -------------------------------------------------------------------------------- /aquarius-lock-zookeeper/src/main/java/com/nepxion/aquarius/lock/zookeeper/configuration/ZookeeperLockConfiguration.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.lock.zookeeper.configuration; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import org.apache.curator.framework.recipes.locks.InterProcessMutex; 13 | import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; 14 | import org.springframework.context.annotation.Bean; 15 | import org.springframework.context.annotation.Conditional; 16 | import org.springframework.context.annotation.Configuration; 17 | 18 | import com.nepxion.aquarius.common.curator.handler.CuratorHandler; 19 | import com.nepxion.aquarius.common.curator.handler.CuratorHandlerImpl; 20 | import com.nepxion.aquarius.lock.LockDelegate; 21 | import com.nepxion.aquarius.lock.LockExecutor; 22 | import com.nepxion.aquarius.lock.zookeeper.condition.ZookeeperLockCondition; 23 | import com.nepxion.aquarius.lock.zookeeper.impl.ZookeeperLockDelegateImpl; 24 | import com.nepxion.aquarius.lock.zookeeper.impl.ZookeeperLockExecutorImpl; 25 | 26 | @Configuration 27 | public class ZookeeperLockConfiguration { 28 | @Bean 29 | @Conditional(ZookeeperLockCondition.class) 30 | public LockDelegate zookeeperLockDelegate() { 31 | return new ZookeeperLockDelegateImpl(); 32 | } 33 | 34 | @Bean 35 | @Conditional(ZookeeperLockCondition.class) 36 | public LockExecutorTitle: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; 13 | import org.springframework.context.annotation.Bean; 14 | import org.springframework.context.annotation.Conditional; 15 | import org.springframework.context.annotation.Configuration; 16 | import org.springframework.context.annotation.Import; 17 | 18 | import com.nepxion.aquarius.common.redis.configuration.RedisConfiguration; 19 | import com.nepxion.aquarius.common.redis.handler.RedisHandler; 20 | import com.nepxion.aquarius.common.redis.handler.RedisHandlerImpl; 21 | import com.nepxion.aquarius.limit.LimitDelegate; 22 | import com.nepxion.aquarius.limit.LimitExecutor; 23 | import com.nepxion.aquarius.limit.redis.condition.RedisLimitCondition; 24 | import com.nepxion.aquarius.limit.redis.impl.RedisLimitDelegateImpl; 25 | import com.nepxion.aquarius.limit.redis.impl.RedisLimitExecutorImpl; 26 | 27 | @Configuration 28 | @Import({ RedisConfiguration.class }) 29 | public class RedisLimitConfiguration { 30 | @Bean 31 | @Conditional(RedisLimitCondition.class) 32 | public LimitDelegate redisLimitDelegate() { 33 | return new RedisLimitDelegateImpl(); 34 | } 35 | 36 | @Bean 37 | @Conditional(RedisLimitCondition.class) 38 | public LimitExecutor redisLimitExecutor() { 39 | return new RedisLimitExecutorImpl(); 40 | } 41 | 42 | @Bean 43 | @Conditional(RedisLimitCondition.class) 44 | @ConditionalOnMissingBean 45 | public RedisHandler redisHandler() { 46 | return new RedisHandlerImpl(); 47 | } 48 | } -------------------------------------------------------------------------------- /aquarius-spring-cloud-example/src/main/java/com/nepxion/aquarius/example/limit/LimitController.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.example.limit; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import io.swagger.annotations.Api; 13 | import io.swagger.annotations.ApiOperation; 14 | import io.swagger.annotations.ApiParam; 15 | 16 | import org.springframework.beans.factory.annotation.Autowired; 17 | import org.springframework.web.bind.annotation.RequestMapping; 18 | import org.springframework.web.bind.annotation.RequestMethod; 19 | import org.springframework.web.bind.annotation.RequestParam; 20 | import org.springframework.web.bind.annotation.RestController; 21 | 22 | import com.nepxion.aquarius.limit.LimitExecutor; 23 | 24 | @RestController 25 | @Api(tags = { "分布式限流接口" }) 26 | public class LimitController { 27 | @Autowired 28 | private LimitExecutor limitExecutor; 29 | 30 | @RequestMapping(path = "/tryAccess", method = RequestMethod.GET) 31 | @ApiOperation(value = "请求分布式限流许可", notes = "在给定的时间段里最多的访问限制次数(超出次数返回false);等下个时间段开始,才允许再次被访问(返回true),周而复始", response = Boolean.class, httpMethod = "GET") 32 | public boolean tryAccess( 33 | @RequestParam @ApiParam(value = "资源名字", required = true, defaultValue = "limit") String name, 34 | @RequestParam @ApiParam(value = "资源Key", required = true, defaultValue = "X-Y") String key, 35 | @RequestParam @ApiParam(value = "给定的时间段(单位秒)", required = true, defaultValue = "10") int limitPeriod, 36 | @RequestParam @ApiParam(value = "最多的访问限制次数", required = true, defaultValue = "5") int limitCount) { 37 | try { 38 | return limitExecutor.tryAccess(name, key, limitPeriod, limitCount); 39 | } catch (Exception e) { 40 | throw new IllegalArgumentException(e); 41 | } 42 | } 43 | } -------------------------------------------------------------------------------- /aquarius-limit-local/src/main/java/com/nepxion/aquarius/limit/local/impl/LocalLimitDelegateImpl.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.limit.local.impl; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import org.aopalliance.intercept.MethodInvocation; 13 | import org.slf4j.Logger; 14 | import org.slf4j.LoggerFactory; 15 | import org.springframework.beans.factory.annotation.Autowired; 16 | import org.springframework.beans.factory.annotation.Value; 17 | 18 | import com.nepxion.aquarius.common.exception.AquariusException; 19 | import com.nepxion.aquarius.limit.LimitDelegate; 20 | import com.nepxion.aquarius.limit.LimitExecutor; 21 | import com.nepxion.aquarius.limit.constant.LimitConstant; 22 | 23 | public class LocalLimitDelegateImpl implements LimitDelegate { 24 | private static final Logger LOG = LoggerFactory.getLogger(LocalLimitDelegateImpl.class); 25 | 26 | @Autowired 27 | private LimitExecutor limitExecutor; 28 | 29 | @Value("${" + LimitConstant.LIMIT_AOP_EXCEPTION_IGNORE + ":true}") 30 | private Boolean limitAopExceptionIgnore; 31 | 32 | @Override 33 | public Object invoke(MethodInvocation invocation, String key, int limitPeriod, int limitCount) throws Throwable { 34 | boolean status = true; 35 | try { 36 | status = limitExecutor.tryAccess(key, limitPeriod, limitCount); 37 | } catch (Exception e) { 38 | if (limitAopExceptionIgnore) { 39 | LOG.error("Exception occurs while Limit", e); 40 | 41 | return invocation.proceed(); 42 | } else { 43 | throw e; 44 | } 45 | } 46 | 47 | if (status) { 48 | return invocation.proceed(); 49 | } else { 50 | throw new AquariusException("Reach max limited access count=" + limitCount + " within period=" + limitPeriod + " seconds"); 51 | } 52 | } 53 | } -------------------------------------------------------------------------------- /aquarius-limit-redis/src/main/java/com/nepxion/aquarius/limit/redis/impl/RedisLimitDelegateImpl.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.limit.redis.impl; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import org.aopalliance.intercept.MethodInvocation; 13 | import org.slf4j.Logger; 14 | import org.slf4j.LoggerFactory; 15 | import org.springframework.beans.factory.annotation.Autowired; 16 | import org.springframework.beans.factory.annotation.Value; 17 | 18 | import com.nepxion.aquarius.common.exception.AquariusException; 19 | import com.nepxion.aquarius.limit.LimitDelegate; 20 | import com.nepxion.aquarius.limit.LimitExecutor; 21 | import com.nepxion.aquarius.limit.constant.LimitConstant; 22 | 23 | public class RedisLimitDelegateImpl implements LimitDelegate { 24 | private static final Logger LOG = LoggerFactory.getLogger(RedisLimitDelegateImpl.class); 25 | 26 | @Autowired 27 | private LimitExecutor limitExecutor; 28 | 29 | @Value("${" + LimitConstant.LIMIT_AOP_EXCEPTION_IGNORE + ":true}") 30 | private Boolean limitAopExceptionIgnore; 31 | 32 | @Override 33 | public Object invoke(MethodInvocation invocation, String key, int limitPeriod, int limitCount) throws Throwable { 34 | boolean status = true; 35 | try { 36 | status = limitExecutor.tryAccess(key, limitPeriod, limitCount); 37 | } catch (Exception e) { 38 | if (limitAopExceptionIgnore) { 39 | LOG.error("Redis exception occurs while Limit", e); 40 | 41 | return invocation.proceed(); 42 | } else { 43 | throw e; 44 | } 45 | } 46 | 47 | if (status) { 48 | return invocation.proceed(); 49 | } else { 50 | throw new AquariusException("Reach max limited access count=" + limitCount + " within period=" + limitPeriod + " seconds"); 51 | } 52 | } 53 | } -------------------------------------------------------------------------------- /aquarius-lock-starter/pom.xml: -------------------------------------------------------------------------------- 1 | 2 |Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | public class CuratorConstant { 13 | public static final String CONNECT_STRING = "curator.connectString"; 14 | public static final String SESSION_TIMEOUT_MS = "curator.sessionTimeoutMs"; 15 | public static final String CONNECTION_TIMEOUT_MS = "curator.connectionTimeoutMs"; 16 | 17 | public static final String RETRY_TYPE = "curator.retryType"; 18 | 19 | public static final String RETRY_TYPE_EXPONENTIAL_BACKOFF_RETRY_BASE_SLEEP_TIME_MS = "curator.exponentialBackoffRetry.baseSleepTimeMs"; 20 | public static final String RETRY_TYPE_EXPONENTIAL_BACKOFF_RETRY_MAX_RETRIES = "curator.exponentialBackoffRetry.maxRetries"; 21 | public static final String RETRY_TYPE_BOUNDED_EXPONENTIAL_BACKOFF_RETRY_BASE_SLEEP_TIME_MS = "curator.boundedExponentialBackoffRetry.baseSleepTimeMs"; 22 | public static final String RETRY_TYPE_BOUNDED_EXPONENTIAL_BACKOFF_RETRY_MAX_SLEEP_TIME_MS = "curator.boundedExponentialBackoffRetry.maxSleepTimeMs"; 23 | public static final String RETRY_TYPE_BOUNDED_EXPONENTIAL_BACKOFF_RETRY_MAX_RETRIES = "curator.boundedExponentialBackoffRetry.maxRetries"; 24 | public static final String RETRY_TYPE_RETRY_NTIMES_COUNT = "curator.retryNTimes.count"; 25 | public static final String RETRY_TYPE_RETRY_NTIMES_SLEEP_MS_BETWEEN_RETRIES = "curator.retryNTimes.sleepMsBetweenRetries"; 26 | public static final String RETRY_TYPE_RETRY_FOREVER_RETRY_INTERVAL_MS = "curator.retryForever.retryIntervalMs"; 27 | public static final String RETRY_TYPE_RETRY_UNTIL_ELAPSED_MAX_ELAPSED_TIME_MS = "curator.retryUntilElapsed.maxElapsedTimeMs"; 28 | public static final String RETRY_TYPE_RETRY_UNTIL_ELAPSED_SLEEP_MS_BETWEEN_RETRIES = "curator.retryUntilElapsed.sleepMsBetweenRetries"; 29 | } -------------------------------------------------------------------------------- /aquarius-spring-boot-example/src/main/java/com/nepxion/aquarius/example/cache/service/MyService6Impl.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.example.cache.service; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import java.util.concurrent.TimeUnit; 13 | 14 | import org.slf4j.Logger; 15 | import org.slf4j.LoggerFactory; 16 | import org.springframework.stereotype.Service; 17 | 18 | import com.nepxion.aquarius.cache.annotation.CacheEvict; 19 | import com.nepxion.aquarius.cache.annotation.CachePut; 20 | import com.nepxion.aquarius.cache.annotation.Cacheable; 21 | 22 | @Service("myService6Impl") 23 | public class MyService6Impl { 24 | private static final Logger LOG = LoggerFactory.getLogger(MyService6Impl.class); 25 | 26 | @Cacheable(name = "cache", key = {"#id1 + \"-\" + #id2", "abc"}, expire = -1L) 27 | public String doD(String id1, String id2) { 28 | try { 29 | TimeUnit.MILLISECONDS.sleep(2000L); 30 | } catch (InterruptedException e) { 31 | e.printStackTrace(); 32 | } 33 | 34 | LOG.info("doD"); 35 | 36 | return "D"; 37 | } 38 | 39 | @CachePut(name = "cache", key = {"#id1 + \"-\" + #id2", "abcde"}, expire = 60000L) 40 | public String doE(String id1, String id2) { 41 | try { 42 | TimeUnit.MILLISECONDS.sleep(2000L); 43 | } catch (InterruptedException e) { 44 | e.printStackTrace(); 45 | } 46 | 47 | LOG.info("doE"); 48 | 49 | return "E"; 50 | } 51 | 52 | @CacheEvict(name = "cache", key = {"#id1 + \"-\" + #id2", "abcdef"}, allEntries = true, beforeInvocation = false) 53 | public String doF(String id1, String id2) { 54 | try { 55 | TimeUnit.MILLISECONDS.sleep(2000L); 56 | } catch (InterruptedException e) { 57 | e.printStackTrace(); 58 | } 59 | 60 | LOG.info("doF"); 61 | 62 | return "F"; 63 | } 64 | } -------------------------------------------------------------------------------- /aquarius-cache-redis/src/main/java/com/nepxion/aquarius/cache/redis/configuration/RedissonCacheConfiguration.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.cache.redis.configuration; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import org.springframework.beans.factory.annotation.Autowired; 13 | import org.springframework.beans.factory.annotation.Value; 14 | import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; 15 | import org.springframework.context.annotation.Bean; 16 | import org.springframework.context.annotation.Conditional; 17 | import org.springframework.context.annotation.Configuration; 18 | 19 | import com.nepxion.aquarius.cache.CacheDelegate; 20 | import com.nepxion.aquarius.cache.redis.condition.RedisCacheCondition; 21 | import com.nepxion.aquarius.cache.redis.impl.RedissonCacheDelegateImpl; 22 | import com.nepxion.aquarius.common.redisson.adapter.RedissonAdapter; 23 | import com.nepxion.aquarius.common.redisson.constant.RedissonConstant; 24 | import com.nepxion.aquarius.common.redisson.handler.RedissonHandler; 25 | import com.nepxion.aquarius.common.redisson.handler.RedissonHandlerImpl; 26 | 27 | @Configuration 28 | public class RedissonCacheConfiguration { 29 | @Value("${" + RedissonConstant.PATH + ":" + RedissonConstant.DEFAULT_PATH + "}") 30 | private String redissonPath; 31 | 32 | @Autowired(required = false) 33 | private RedissonAdapter redissonAdapter; 34 | 35 | @Bean 36 | @Conditional(RedisCacheCondition.class) 37 | public CacheDelegate redisCacheDelegate() { 38 | return new RedissonCacheDelegateImpl(); 39 | } 40 | 41 | @Bean 42 | @Conditional(RedisCacheCondition.class) 43 | @ConditionalOnMissingBean 44 | public RedissonHandler redissonHandler() { 45 | if (redissonAdapter != null) { 46 | return redissonAdapter.getRedissonHandler(); 47 | } 48 | 49 | return new RedissonHandlerImpl(redissonPath); 50 | } 51 | } -------------------------------------------------------------------------------- /aquarius-id-generator-starter/pom.xml: -------------------------------------------------------------------------------- 1 | 2 |Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import java.text.DecimalFormat; 13 | import java.util.Map; 14 | import java.util.concurrent.ConcurrentHashMap; 15 | 16 | import org.apache.commons.lang3.ArrayUtils; 17 | 18 | public class StringUtil { 19 | private static volatile MapTitle: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import java.time.Instant; 13 | import java.time.LocalDateTime; 14 | import java.time.ZoneId; 15 | import java.time.format.DateTimeFormatter; 16 | import java.util.Date; 17 | import java.util.Map; 18 | import java.util.concurrent.ConcurrentHashMap; 19 | 20 | public class DateUtil { 21 | private static volatile MapTitle: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import org.springframework.context.annotation.ComponentScan; 13 | import org.springframework.context.annotation.Configuration; 14 | 15 | import com.nepxion.aquarius.common.constant.AquariusConstant; 16 | import com.nepxion.banner.BannerConstant; 17 | import com.nepxion.banner.Description; 18 | import com.nepxion.banner.LogoBanner; 19 | import com.nepxion.banner.NepxionBanner; 20 | import com.taobao.text.Color; 21 | 22 | @Configuration 23 | @ComponentScan(basePackages = { "com.nepxion.aquarius.common.context" }) 24 | public class AquariusConfiguration { 25 | static { 26 | /*String bannerShown = System.getProperty(BannerConstant.BANNER_SHOWN, "true"); 27 | if (Boolean.valueOf(bannerShown)) { 28 | System.out.println(""); 29 | System.out.println("╔═══╗"); 30 | System.out.println("║╔═╗║"); 31 | System.out.println("║║ ║╠══╦╗╔╦══╦═╦╦╗╔╦══╗"); 32 | System.out.println("║╚═╝║╔╗║║║║╔╗║╔╬╣║║║══╣"); 33 | System.out.println("║╔═╗║╚╝║╚╝║╔╗║║║║╚╝╠══║"); 34 | System.out.println("╚╝ ╚╩═╗╠══╩╝╚╩╝╚╩══╩══╝"); 35 | System.out.println(" ║║"); 36 | System.out.println(" ╚╝"); 37 | System.out.println("Nepxion Aquarius v" + AquariusConstant.AQUARIUS_VERSION); 38 | System.out.println(""); 39 | }*/ 40 | 41 | LogoBanner logoBanner = new LogoBanner(AquariusConfiguration.class, "/com/nepxion/aquarius/resource/logo.txt", "Welcome to Nepxion", 8, 5, new Color[] { Color.red, Color.green, Color.cyan, Color.blue, Color.yellow, Color.magenta, Color.red, Color.green }, true); 42 | 43 | NepxionBanner.show(logoBanner, new Description(BannerConstant.VERSION + ":", AquariusConstant.AQUARIUS_VERSION, 0, 1), new Description(BannerConstant.GITHUB + ":", BannerConstant.NEPXION_GITHUB + "/Aquarius", 0, 1)); 44 | } 45 | } -------------------------------------------------------------------------------- /aquarius-spring-boot-example/src/main/java/com/nepxion/aquarius/example/lock/app1/LockAopApplication.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.example.lock.app1; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import org.springframework.boot.SpringApplication; 13 | import org.springframework.boot.autoconfigure.SpringBootApplication; 14 | import org.springframework.context.ConfigurableApplicationContext; 15 | import org.springframework.context.annotation.ComponentScan; 16 | 17 | import com.nepxion.aquarius.example.lock.service.MyService1; 18 | import com.nepxion.aquarius.example.lock.service.MyService2Impl; 19 | import com.nepxion.aquarius.lock.annotation.EnableLock; 20 | 21 | @SpringBootApplication 22 | @EnableLock 23 | @ComponentScan(basePackages = { "com.nepxion.aquarius.example.lock.service" }) 24 | public class LockAopApplication { 25 | public static void main(String[] args) throws Exception { 26 | ConfigurableApplicationContext applicationContext = SpringApplication.run(LockAopApplication.class, args); 27 | 28 | // 执行效果是doA和doC无序打印,即谁拿到锁谁先运行 29 | MyService1 myService1 = applicationContext.getBean(MyService1.class); 30 | for (int i = 0; i < 5; i++) { 31 | new Thread(new Runnable() { 32 | @Override 33 | public void run() { 34 | myService1.doA("X", "Y"); 35 | } 36 | }).start(); 37 | } 38 | 39 | MyService2Impl myService2 = applicationContext.getBean(MyService2Impl.class); 40 | for (int i = 0; i < 5; i++) { 41 | new Thread(new Runnable() { 42 | @Override 43 | public void run() { 44 | myService2.doC("X", "Y"); 45 | } 46 | }).start(); 47 | } 48 | } 49 | 50 | // 如下方式,只支持Spring Cloud F版以前的版本 51 | /*@Bean 52 | public EmbeddedServletContainerFactory createEmbeddedServletContainerFactory() { 53 | TomcatEmbeddedServletContainerFactory tomcatFactory = new TomcatEmbeddedServletContainerFactory(); 54 | tomcatFactory.setPort(8087); 55 | 56 | return tomcatFactory; 57 | }*/ 58 | } -------------------------------------------------------------------------------- /aquarius-spring-cloud-example/src/main/java/com/nepxion/aquarius/example/lock/LockAopController.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.example.lock; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import io.swagger.annotations.Api; 13 | 14 | import java.util.concurrent.TimeUnit; 15 | 16 | import org.slf4j.Logger; 17 | import org.slf4j.LoggerFactory; 18 | import org.springframework.web.bind.annotation.RequestMapping; 19 | import org.springframework.web.bind.annotation.RequestMethod; 20 | import org.springframework.web.bind.annotation.RequestParam; 21 | import org.springframework.web.bind.annotation.RestController; 22 | 23 | import com.nepxion.aquarius.lock.annotation.Lock; 24 | import com.nepxion.aquarius.lock.annotation.ReadLock; 25 | import com.nepxion.aquarius.lock.annotation.WriteLock; 26 | 27 | @RestController 28 | @Api(tags = { "分布式锁注解接口" }) 29 | public class LockAopController { 30 | private static final Logger LOG = LoggerFactory.getLogger(LockAopController.class); 31 | 32 | @RequestMapping(path = "/doA", method = RequestMethod.GET) 33 | @Lock(name = "lock", key = "#id1 + \"-\" + #id2", leaseTime = 5000L, waitTime = 60000L, async = false, fair = false) 34 | public String doA(@RequestParam String id1, @RequestParam String id2) { 35 | try { 36 | TimeUnit.MILLISECONDS.sleep(2000L); 37 | } catch (InterruptedException e) { 38 | e.printStackTrace(); 39 | } 40 | 41 | LOG.info("doA - lock is got"); 42 | 43 | return "A"; 44 | } 45 | 46 | @RequestMapping(path = "/doB", method = RequestMethod.GET) 47 | @ReadLock(name = "lock", key = "#id1 + \"-\" + #id2", leaseTime = 5000L, waitTime = 60000L, async = false, fair = false) 48 | public String doB(@RequestParam String id1, @RequestParam String id2) { 49 | LOG.info("doB"); 50 | 51 | return "B"; 52 | } 53 | 54 | @RequestMapping(path = "/doC", method = RequestMethod.GET) 55 | @WriteLock(name = "lock", key = "#id1 + \"-\" + #id2", leaseTime = 5000L, waitTime = 60000L, async = false, fair = false) 56 | public String doC(@RequestParam String id1, @RequestParam String id2) { 57 | LOG.info("doC"); 58 | 59 | return "C"; 60 | } 61 | } -------------------------------------------------------------------------------- /aquarius-common-redis/src/main/java/com/nepxion/aquarius/common/redis/configuration/RedisConfiguration.java: -------------------------------------------------------------------------------- 1 | package com.nepxion.aquarius.common.redis.configuration; 2 | 3 | /** 4 | *Title: Nepxion Aquarius
5 | *Description: Nepxion Aquarius
6 | *Copyright: Copyright (c) 2017-2050
7 | *Company: Nepxion
8 | * @author Haojun Ren 9 | * @version 1.0 10 | */ 11 | 12 | import org.slf4j.Logger; 13 | import org.slf4j.LoggerFactory; 14 | import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; 15 | import org.springframework.context.annotation.Bean; 16 | import org.springframework.context.annotation.Configuration; 17 | import org.springframework.data.redis.connection.RedisConnectionFactory; 18 | import org.springframework.data.redis.core.RedisTemplate; 19 | import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; 20 | import org.springframework.data.redis.serializer.StringRedisSerializer; 21 | 22 | import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility; 23 | import com.fasterxml.jackson.annotation.PropertyAccessor; 24 | import com.fasterxml.jackson.databind.ObjectMapper; 25 | 26 | @Configuration 27 | public class RedisConfiguration { 28 | private static final Logger LOG = LoggerFactory.getLogger(RedisConfiguration.class); 29 | 30 | @Bean 31 | @ConditionalOnMissingBean 32 | public RedisTemplate