From 337fefa5622482ddf5a421dc9a0311440da19f2f Mon Sep 17 00:00:00 2001 From: yexuejc <940526mf> Date: Wed, 26 Sep 2018 17:01:02 +0800 Subject: [PATCH 01/12] =?UTF-8?q?1.1.1=20=E5=9F=BA=E4=BA=8Espringboot=201.?= =?UTF-8?q?x=202.x=20=E5=88=86=E5=BC=80=E7=BB=B4=E6=8A=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 8 ++++-- UPDATE.md | 12 +++++++++ pom.xml | 45 ++++++--------------------------- yexuejc-springboot-base/pom.xml | 2 +- 4 files changed, 27 insertions(+), 40 deletions(-) diff --git a/README.md b/README.md index d8c8537..39061ff 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,8 @@ -# yexuejc-springboot-base +# yexuejc-springboot + +### 说明 +>本分支基于 springboot 1.x +>2.x 分支基于springboot 2.x #### 项目介绍 @@ -9,7 +13,7 @@ parent:版本封装
base:功能封装 #### 最新版本 ->yexuejc.springboot.version=1.1.0
+>yexuejc.springboot.version=1.1.1
>yexuejc.base.version=1.1.9 pom.xml diff --git a/UPDATE.md b/UPDATE.md index 4fcbe04..f4f4173 100644 --- a/UPDATE.md +++ b/UPDATE.md @@ -1,6 +1,18 @@ yexuejc-springboot 更新内容 ------------------- +#### version :1.1.1 +**time:2018-9-26 17:00:38**
+**branch:** master
+**关联工程:**
+``` +springboot-base:1.1.9 +spring-boot-starter-parent:1.5.16.RELEASE +``` +**update:**
+1. 升级依赖 +# + #### version :1.1.0 **time:2018-9-23 12:49:36**
**branch:** master
diff --git a/pom.xml b/pom.xml index b443349..3dcda5e 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ com.yexuejc.springboot yexuejc-springboot-parent - 1.1.0 + 1.1.1 pom ${project.artifactId} @@ -15,7 +15,7 @@ org.springframework.boot spring-boot-starter-parent - 1.5.15.RELEASE + 1.5.16.RELEASE @@ -59,9 +59,9 @@ - - - + + + com.yexuejc.base @@ -176,37 +176,6 @@ jar-with-dependencies - - - de.codecentric - spring-boot-admin-starter-client - ${spring-boot-admin.version} - - - de.codecentric - spring-boot-admin-server - ${spring-boot-admin.version} - - - de.codecentric - spring-boot-admin-server-ui - ${spring-boot-admin.version} - - - de.codecentric - spring-boot-admin-server-ui-hystrix - ${spring-boot-admin.version} - - - de.codecentric - spring-boot-admin-server-ui-turbine - ${spring-boot-admin.version} - - - de.codecentric - spring-boot-admin-server-ui-activiti - ${spring-boot-admin.version} - @@ -271,7 +240,9 @@ single - ${basedir}/assembly/assembly.xml + + ${basedir}/assembly/assembly.xml + diff --git a/yexuejc-springboot-base/pom.xml b/yexuejc-springboot-base/pom.xml index 1bb0af9..6f25fe7 100644 --- a/yexuejc-springboot-base/pom.xml +++ b/yexuejc-springboot-base/pom.xml @@ -9,7 +9,7 @@ com.yexuejc.springboot yexuejc-springboot-parent - 1.1.0 + 1.1.1 From 8b0b9980ebd2a1528e183635d2bfddb3abef1506 Mon Sep 17 00:00:00 2001 From: yexuejc <940526mf> Date: Wed, 26 Sep 2018 17:04:00 +0800 Subject: [PATCH 02/12] 1.1.1 --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 39061ff..7e92034 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ # yexuejc-springboot ### 说明 ->本分支基于 springboot 1.x ->2.x 分支基于springboot 2.x +>基于springboot版本分别维护1.x 2.x 分支
+>master将继续同步1.x分支(后期获取会同步于2.x) #### 项目介绍 From bb143bb74ff03eeb9f9a3dc6d02792c1fb7bf144 Mon Sep 17 00:00:00 2001 From: yexuejc <940526mf> Date: Fri, 28 Sep 2018 14:57:56 +0800 Subject: [PATCH 03/12] =?UTF-8?q?=E4=B8=8D=E5=86=8D=E9=81=97=E4=BC=A0?= =?UTF-8?q?=E4=BB=BB=E4=BD=95=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 18 ++++++++++++++++-- yexuejc-springboot-base/pom.xml | 3 ++- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 3dcda5e..8bab891 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ com.yexuejc.springboot yexuejc-springboot-parent - 1.1.1 + 1.1.2 pom ${project.artifactId} @@ -53,6 +53,10 @@ 3.0.9.RELEASE 2.3.0 3.0.2.RELEASE + + 1.09 + + 0.2.0 @@ -175,7 +179,17 @@ ${aliyun-sdk-mns.version} jar-with-dependencies - + + + com.esotericsoftware.reflectasm + reflectasm + ${reflectasm.version} + + + com.alibaba.boot + dubbo-spring-boot-starter + ${dubbo-spring-boot-starter.version} + diff --git a/yexuejc-springboot-base/pom.xml b/yexuejc-springboot-base/pom.xml index 6f25fe7..4147e18 100644 --- a/yexuejc-springboot-base/pom.xml +++ b/yexuejc-springboot-base/pom.xml @@ -9,7 +9,7 @@ com.yexuejc.springboot yexuejc-springboot-parent - 1.1.1 + 1.1.2 @@ -25,6 +25,7 @@ com.yexuejc.base yexuejc-base + true From 508949c862fee06fb16ab3703724cc6cc50193c5 Mon Sep 17 00:00:00 2001 From: yexuejc <940526mf> Date: Fri, 28 Sep 2018 14:59:46 +0800 Subject: [PATCH 04/12] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=A3=B0=E6=98=8E?= =?UTF-8?q?=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- yexuejc-springboot-base/pom.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/yexuejc-springboot-base/pom.xml b/yexuejc-springboot-base/pom.xml index 4147e18..b67a2af 100644 --- a/yexuejc-springboot-base/pom.xml +++ b/yexuejc-springboot-base/pom.xml @@ -25,7 +25,6 @@ com.yexuejc.base yexuejc-base - true From 7b7dbac052ed33d9b43b9e6b4f89ec555f9e595a Mon Sep 17 00:00:00 2001 From: yexuejc <940526mf> Date: Fri, 28 Sep 2018 15:23:57 +0800 Subject: [PATCH 05/12] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=A3=B0=E6=98=8E?= =?UTF-8?q?=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- UPDATE.md | 12 ++++++++++++ pom.xml | 7 +++++++ 2 files changed, 19 insertions(+) diff --git a/UPDATE.md b/UPDATE.md index f4f4173..ae4adb5 100644 --- a/UPDATE.md +++ b/UPDATE.md @@ -1,6 +1,18 @@ yexuejc-springboot 更新内容 ------------------- +#### version :1.1.2 +**time:2018-9-28 15:23:32**
+**branch:** master
+**关联工程:**
+``` +springboot-base:1.1.9 +spring-boot-starter-parent:1.5.16.RELEASE +``` +**update:**
+1. 新增声明包 +# + #### version :1.1.1 **time:2018-9-26 17:00:38**
**branch:** master
diff --git a/pom.xml b/pom.xml index 8bab891..aa95715 100644 --- a/pom.xml +++ b/pom.xml @@ -57,6 +57,7 @@ 1.09 0.2.0 + 3.0.3 @@ -190,6 +191,12 @@ dubbo-spring-boot-starter ${dubbo-spring-boot-starter.version} + + + com.baomidou + mybatis-plus-boot-starter + ${mybatis-plus.version} + From 5a29aed20a6f2c04ce23bfda5f6467be18b0ddd8 Mon Sep 17 00:00:00 2001 From: maxf <1107047387@qq.com> Date: Sat, 27 Oct 2018 16:30:26 +0800 Subject: [PATCH 06/12] =?UTF-8?q?=E6=97=A5=E5=BF=97=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/yexuejc/springboot/base/util/LogUtil.java | 6 +++--- .../src/test/resources/application.properties | 5 +++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/util/LogUtil.java b/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/util/LogUtil.java index 267c4e0..b9f747b 100644 --- a/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/util/LogUtil.java +++ b/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/util/LogUtil.java @@ -13,15 +13,15 @@ public class LogUtil { /** * 用于记录访问日志,输出到access.log */ - public final static Logger accessLogger = LoggerFactory.getLogger("com.yexuejc.uselaw.access"); + public final static Logger accessLogger = LoggerFactory.getLogger("access"); /** * 用于记录业务日志,输出到biz.log */ - public final static Logger bizLogger = LoggerFactory.getLogger("com.yexuejc.uselaw.biz"); + public final static Logger bizLogger = LoggerFactory.getLogger("biz"); /** * 用于记录程序异常日志,输出到exception.log */ - public final static Logger exceptionLogger = LoggerFactory.getLogger("com.yexuejc.uselaw.exception"); + public final static Logger exceptionLogger = LoggerFactory.getLogger("exception"); /** * 格式化日志消息(将;替换为_) diff --git a/yexuejc-springboot-base/src/test/resources/application.properties b/yexuejc-springboot-base/src/test/resources/application.properties index 3e03b4e..fba6a7e 100644 --- a/yexuejc-springboot-base/src/test/resources/application.properties +++ b/yexuejc-springboot-base/src/test/resources/application.properties @@ -1,7 +1,8 @@ server.port=8888 -logging.level.root=info -security.basic.enabled=false +logging.level.root=info +logging.path=/logs/yexuejc-springboot-parent + yexuejc.http.filter.type=0 From d01690dffb927831e97fc709982f0dc32359b264 Mon Sep 17 00:00:00 2001 From: maxf <1107047387@qq.com> Date: Sat, 27 Oct 2018 16:31:19 +0800 Subject: [PATCH 07/12] =?UTF-8?q?=E6=97=A5=E5=BF=97=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/logback-spring.xml | 128 ++++++++++-------- .../src/test/resources/application.properties | 2 + 2 files changed, 71 insertions(+), 59 deletions(-) diff --git a/yexuejc-springboot-base/src/main/resources/logback-spring.xml b/yexuejc-springboot-base/src/main/resources/logback-spring.xml index 54e679b..e730516 100644 --- a/yexuejc-springboot-base/src/main/resources/logback-spring.xml +++ b/yexuejc-springboot-base/src/main/resources/logback-spring.xml @@ -1,63 +1,73 @@ - - + + + + + + + - - - - ${context.name} - - ${log.path}/access.log - - ${log.path}/access.${roll.file.suffix} - - - - ${log.pattern} - - - - ${log.path}/biz.log - - ${log.path}/biz.${roll.file.suffix} - - - - ${log.pattern} - - - - ${log.path}/exception.log - - ${log.path}/exception.${roll.file.suffix} - - - - ${log.pattern} - - - - - - - - - - - - - - - - ${log.pattern} - - - - - + + + ${context.name} + + ${log.path}/access.log + + ${log.path}/access.${roll.file.suffix} + + + + ${log.pattern} + + + + ${log.path}/biz.log + + ${log.path}/biz.${roll.file.suffix} + + + + ${log.pattern} + + + + ${log.path}/exception.log + + ${log.path}/exception.${roll.file.suffix} + + + + ${log.pattern} + + + + + + + + + + + + + + + + + + + ${log.pattern} + + + + + diff --git a/yexuejc-springboot-base/src/test/resources/application.properties b/yexuejc-springboot-base/src/test/resources/application.properties index fba6a7e..aa5b54b 100644 --- a/yexuejc-springboot-base/src/test/resources/application.properties +++ b/yexuejc-springboot-base/src/test/resources/application.properties @@ -1,5 +1,7 @@ server.port=8888 +spring.application.name=@pom.artifactId@ + logging.level.root=info logging.path=/logs/yexuejc-springboot-parent From 5bf66c25caa4703450c00b14a1f330b5d50f6081 Mon Sep 17 00:00:00 2001 From: maxf <1107047387@qq.com> Date: Sat, 27 Oct 2018 16:41:16 +0800 Subject: [PATCH 08/12] =?UTF-8?q?1.1.3=20=E6=97=A5=E5=BF=97=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- UPDATE.md | 28 +++++++++++++++++++ pom.xml | 2 +- yexuejc-springboot-base/pom.xml | 2 +- .../yexuejc/springboot/base/util/LogUtil.java | 1 + 4 files changed, 31 insertions(+), 2 deletions(-) diff --git a/UPDATE.md b/UPDATE.md index ae4adb5..0f9087a 100644 --- a/UPDATE.md +++ b/UPDATE.md @@ -1,6 +1,34 @@ yexuejc-springboot 更新内容 ------------------- +#### version :1.1.3 +**time:2018-10-27 16:40:36**
+**branch:** master
+**关联工程:**
+``` +springboot-base:1.1.9 +spring-boot-starter-parent:1.5.16.RELEASE +``` +**update:**
+1. 日志优化,按天切割日志
+内置
+LogUtil.accessLogger.info(xxxx);请求访问控制,级别info[LogInterceptor->line39](com.yexuejc.springboot.base.interceptor.LogInterceptor)
+LogUtil.bizLogger.info(xxxx); 业务日志,级别trace
+LogUtil.exceptionLogger.error(xxxx);异常日志,级别error
+```$xslt +日志配置置于application.properties +详情参考 logback-spring.xml + +#日志contextName +spring.application.name=@pom.artifactId@ +#日志级别 +logging.level.root=info +#日志输出目录 +logging.path=/logs/yexuejc-springboot-parent + +``` +# + #### version :1.1.2 **time:2018-9-28 15:23:32**
**branch:** master
diff --git a/pom.xml b/pom.xml index aa95715..0b922a5 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ com.yexuejc.springboot yexuejc-springboot-parent - 1.1.2 + 1.1.3 pom ${project.artifactId} diff --git a/yexuejc-springboot-base/pom.xml b/yexuejc-springboot-base/pom.xml index b67a2af..2daf9e1 100644 --- a/yexuejc-springboot-base/pom.xml +++ b/yexuejc-springboot-base/pom.xml @@ -9,7 +9,7 @@ com.yexuejc.springboot yexuejc-springboot-parent - 1.1.2 + 1.1.3 diff --git a/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/util/LogUtil.java b/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/util/LogUtil.java index b9f747b..8152160 100644 --- a/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/util/LogUtil.java +++ b/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/util/LogUtil.java @@ -35,4 +35,5 @@ public class LogUtil { } return msg.replaceAll(";", "_"); } + } From be0863387674609937b84b0b0476b0a08e0c82b9 Mon Sep 17 00:00:00 2001 From: maxf <1107047387@qq.com> Date: Sat, 27 Oct 2018 16:44:53 +0800 Subject: [PATCH 09/12] =?UTF-8?q?1.1.3=20=E6=97=A5=E5=BF=97=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- UPDATE.md | 2 +- pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/UPDATE.md b/UPDATE.md index 0f9087a..2da2256 100644 --- a/UPDATE.md +++ b/UPDATE.md @@ -6,7 +6,7 @@ yexuejc-springboot 更新内容 **branch:** master
**关联工程:**
``` -springboot-base:1.1.9 +springboot-base:1.2.0 spring-boot-starter-parent:1.5.16.RELEASE ``` **update:**
diff --git a/pom.xml b/pom.xml index 0b922a5..4095bfc 100644 --- a/pom.xml +++ b/pom.xml @@ -20,7 +20,7 @@ - 1.1.9 + 1.2.0 https://nexus.yexuejc.club/repository/ http://maven.aliyun.com/nexus/content/groups/public From 3059d4c8f24bb7f231dc88ffbe7dce14f6c08f22 Mon Sep 17 00:00:00 2001 From: maxf <1107047387@qq.com> Date: Sat, 27 Oct 2018 16:49:43 +0800 Subject: [PATCH 10/12] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 7e92034..97a08a4 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # yexuejc-springboot ### 说明 ->基于springboot版本分别维护1.x 2.x 分支
+>基于springboot版本分别维护1.x(对应springboot1.5.16.RELEASE) 2.x(对应springboot2.0.5.RELEASE) 分支
>master将继续同步1.x分支(后期获取会同步于2.x) @@ -13,8 +13,9 @@ parent:版本封装
base:功能封装 #### 最新版本 ->yexuejc.springboot.version=1.1.1
->yexuejc.base.version=1.1.9 +* 1.x yexuejc.springboot.version=1.1.3
+* 2.x yexuejc.springboot.version=2.0.2
+* yexuejc.base.version=1.2.0 pom.xml ``` From e8117a7dea73ce8b334a35c57bbd56298feb1eac Mon Sep 17 00:00:00 2001 From: maxf <1107047387@qq.com> Date: Thu, 1 Nov 2018 15:12:40 +0800 Subject: [PATCH 11/12] =?UTF-8?q?=E6=95=B4=E7=90=86=E9=9B=86=E6=88=90?= =?UTF-8?q?=E6=96=87=E6=A1=A3=EF=BC=8C=E6=9C=AA=E5=8F=91=E5=B8=83=E7=89=88?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 3 +- UPDATE.md | 2 +- doc/MENU.md | 13 + doc/MNS.md | 34 + doc/OSS.md | 36 + .../PARAMS_RSA_DECRYPT_ENCRYPT.md | 0 doc/REDIS.md | 30 + RSA.md => doc/RSA.md | 0 pom.xml | 5 +- yexuejc-springboot-base/pom.xml | 7 + .../autoconfigure/MnsAutoConfiguration.java | 37 + .../base/autoconfigure/MnsFacade.java | 168 ++++ .../base/autoconfigure/MnsProperties.java | 74 ++ .../MutiRedisAutoConfiguration.java | 749 +++++++++--------- .../autoconfigure/OssAutoConfiguration.java | 10 +- .../base/autoconfigure/OssFacade.java | 6 + .../base/autoconfigure/OssProperties.java | 43 +- .../base/exception/ImageException.java | 24 + .../main/resources/META-INF/spring.factories | 3 +- .../yexuejc/springboot/base/test/MnsTest.java | 58 ++ .../yexuejc/springboot/base/test/OssTest.java | 74 ++ .../springboot/base/test/RedisTest.java | 108 +++ .../src/test/resources/application.properties | 20 +- 23 files changed, 1112 insertions(+), 392 deletions(-) create mode 100644 doc/MENU.md create mode 100644 doc/MNS.md create mode 100644 doc/OSS.md rename PARAMS_RSA_DECRYPT_ENCRYPT.md => doc/PARAMS_RSA_DECRYPT_ENCRYPT.md (100%) create mode 100644 doc/REDIS.md rename RSA.md => doc/RSA.md (100%) create mode 100644 yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/autoconfigure/MnsAutoConfiguration.java create mode 100644 yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/autoconfigure/MnsFacade.java create mode 100644 yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/autoconfigure/MnsProperties.java create mode 100644 yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/exception/ImageException.java create mode 100644 yexuejc-springboot-base/src/test/java/com/yexuejc/springboot/base/test/MnsTest.java create mode 100644 yexuejc-springboot-base/src/test/java/com/yexuejc/springboot/base/test/OssTest.java create mode 100644 yexuejc-springboot-base/src/test/java/com/yexuejc/springboot/base/test/RedisTest.java diff --git a/README.md b/README.md index 97a08a4..01f1041 100644 --- a/README.md +++ b/README.md @@ -106,5 +106,4 @@ pom.xml [更新记录](UPDATE.md)
-[1.0.6新增 针对API请求安全解决方案](PARAMS_RSA_DECRYPT_ENCRYPT.md)
-[1.0.6新增 加密功能](PARAMS_RSA_DECRYPT_ENCRYPT.md) +[相关功能使用指南](doc/MENU.md) diff --git a/UPDATE.md b/UPDATE.md index 2da2256..941bc7b 100644 --- a/UPDATE.md +++ b/UPDATE.md @@ -168,7 +168,7 @@ yexuejc.http.encrypt.private-pwd=密码 **time:** 2018-5-4 09:54:18
**branch:** master
**update:**
-> [使用加密解密](PARAMS_RSA_DECRYPT_ENCRYPT.md) +> [使用加密解密](doc/PARAMS_RSA_DECRYPT_ENCRYPT.md) > >1.增加json入参解密、出参加密 # diff --git a/doc/MENU.md b/doc/MENU.md new file mode 100644 index 0000000..3e8eb37 --- /dev/null +++ b/doc/MENU.md @@ -0,0 +1,13 @@ +功能目录 +------------------------ + +### 第三方集成 +# +* [redis 集成](REDIS.md) +* [Aliyun MNS 消息队列](MNS.md) +* [Aliyun OSS 对象存储](OSS.md) + +### 内部集成 +# +* [1.0.6新增 针对API请求安全解决方案](PARAMS_RSA_DECRYPT_ENCRYPT.md)
+* [1.0.6新增 加密功能](PARAMS_RSA_DECRYPT_ENCRYPT.md) diff --git a/doc/MNS.md b/doc/MNS.md new file mode 100644 index 0000000..bf92e93 --- /dev/null +++ b/doc/MNS.md @@ -0,0 +1,34 @@ +aliyun MNS 消息队列 使用指南 +------------- +* 本项目依赖不向下传递 +* 开通请参考[阿里云-消息服务-MNS](https://help.aliyun.com/product/27412.html?spm=5176.7944397.207973.oss4.4d1ab2418oQPP0) + +> 引入依赖 pom.xml + +```mxml + + + + com.aliyun + aliyun-java-sdk-core + + + + com.aliyun.mns + aliyun-sdk-mns + jar-with-dependencies + + +``` +> 配置 +``` +#mns +yexuejc.alibaba.mns.access-key-id=阿里MNS提供的AccessKey +yexuejc.alibaba.mns.access-key-secret=阿里MNS提供的的SecretKey +yexuejc.alibaba.mns.endpoint=MNS接入endpoint,公网,私网,VPC各不相同,需要分环境配置 +yexuejc.alibaba.mns.queue-name-prefix=队列名称前缀 +``` + +> 使用example + +参考[MnsTest.java](../yexuejc-springboot-base/src/test/java/com/yexuejc/springboot/base/test/MnsTest.java) diff --git a/doc/OSS.md b/doc/OSS.md new file mode 100644 index 0000000..b44de34 --- /dev/null +++ b/doc/OSS.md @@ -0,0 +1,36 @@ +aliyun OSS 对象存储 使用指南 +------------- +* 本项目依赖不向下传递 +* 开通请参考[阿里云对象存储-OSS](https://help.aliyun.com/document_detail/32008.html?spm=5176.87240.400427.45.1dd74614DiKpxR) + +_本工程暂提供上传功能_ + +> 引入依赖 pom.xml + +```mxml + + + + com.aliyun + aliyun-java-sdk-core + + + + com.aliyun.oss + aliyun-sdk-oss + + +``` +> 配置 +``` +#OSS +yexuejc.alibaba.oss.endpoint=阿里OSS提供的endpoint +yexuejc.alibaba.oss.access-key-secret=阿里OSS提供的SecretKey +yexuejc.alibaba.oss.access-key-id=阿里OSS提供的AccessKey +yexuejc.alibaba.oss.bucket=阿里OSS提供的bucket + +``` + +> 使用example + +参考[OssTest.java](../yexuejc-springboot-base/src/test/java/com/yexuejc/springboot/base/test/OssTest.java) diff --git a/PARAMS_RSA_DECRYPT_ENCRYPT.md b/doc/PARAMS_RSA_DECRYPT_ENCRYPT.md similarity index 100% rename from PARAMS_RSA_DECRYPT_ENCRYPT.md rename to doc/PARAMS_RSA_DECRYPT_ENCRYPT.md diff --git a/doc/REDIS.md b/doc/REDIS.md new file mode 100644 index 0000000..efd5836 --- /dev/null +++ b/doc/REDIS.md @@ -0,0 +1,30 @@ +redis 使用指南 +------------- +* 本项目依赖不向下传递 + +> 引入依赖 pom.xml + +```mxml + + + + org.springframework.data + spring-data-redis + + + redis.clients + jedis + + +``` +> 配置 +``` +#reids +spring.redis.host=你的reids地址 +spring.redis.password=密码 +spring.redis.port=端口 +``` + +> 使用example + +参考[RedisTest.java](../yexuejc-springboot-base/src/test/java/com/yexuejc/springboot/base/test/RedisTest.java) diff --git a/RSA.md b/doc/RSA.md similarity index 100% rename from RSA.md rename to doc/RSA.md diff --git a/pom.xml b/pom.xml index 4095bfc..8bd946b 100644 --- a/pom.xml +++ b/pom.xml @@ -38,11 +38,11 @@ 1.2.49 1.11 - 4.0.8 + 4.1.1 3.0.0 3.1.0 1.1.0 - 1.1.8.6 + 1.1.8 3.3.49.ALL @@ -173,6 +173,7 @@ aliyun-java-sdk-dysmsapi ${aliyun-java-sdk-dysmsapi.version} + com.aliyun.mns diff --git a/yexuejc-springboot-base/pom.xml b/yexuejc-springboot-base/pom.xml index 2daf9e1..4f482f0 100644 --- a/yexuejc-springboot-base/pom.xml +++ b/yexuejc-springboot-base/pom.xml @@ -79,6 +79,13 @@ jedis true + + + com.aliyun.mns + aliyun-sdk-mns + jar-with-dependencies + true + org.springframework.boot spring-boot-starter-test diff --git a/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/autoconfigure/MnsAutoConfiguration.java b/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/autoconfigure/MnsAutoConfiguration.java new file mode 100644 index 0000000..71bd8de --- /dev/null +++ b/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/autoconfigure/MnsAutoConfiguration.java @@ -0,0 +1,37 @@ +package com.yexuejc.springboot.base.autoconfigure; + +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import com.aliyun.mns.client.MNSClient; + +/** + * 阿里云消息服务MNS相关配置 + * + * @author maxf + * @version 1.0 + * @ClassName MnsAutoConfiguration + * @Description + * @date 2018/11/1 10:04 + */ +@Configuration +@ConditionalOnClass(MNSClient.class) +@EnableConfigurationProperties(MnsProperties.class) +public class MnsAutoConfiguration { + private final MnsProperties properties; + + public MnsAutoConfiguration(MnsProperties properties) { + super(); + this.properties = properties; + } + + @Bean + @ConditionalOnMissingBean + public MnsFacade mnsFacade() { + return new MnsFacade(properties); + } + +} \ No newline at end of file diff --git a/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/autoconfigure/MnsFacade.java b/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/autoconfigure/MnsFacade.java new file mode 100644 index 0000000..d500d44 --- /dev/null +++ b/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/autoconfigure/MnsFacade.java @@ -0,0 +1,168 @@ + +package com.yexuejc.springboot.base.autoconfigure; + +import com.aliyun.mns.client.CloudAccount; +import com.aliyun.mns.client.CloudTopic; +import com.aliyun.mns.client.MNSClient; +import com.aliyun.mns.model.*; +import com.yexuejc.springboot.base.util.LogUtil; + +/** + * 阿里云消息服务MNS操作类 + * + * @author maxf + * @version 1.0 + * @ClassName MnsFacade + * @Description + * @date 2018/11/1 10:21 + */ +public class MnsFacade { + /** + * 默认长轮询等待秒数 + */ + private static int DEFAULT_WAIT_SECONDS = 15; + + /** + * 项目中需要用到的所有队列 + */ + private MNSClient client; + /** + * MNS相关配置 + */ + private MnsProperties properties; + + public MnsFacade(MnsProperties properties) { + CloudAccount account = new CloudAccount(properties.getAccessKeyId(), properties.getAccessKeySecret(), + properties.getEndpoint()); + this.client = account.getMNSClient(); + this.properties = properties; + } + + /** + * 发送消息 + * + * @param queueName 发送对象队列名 + * @param msg 发送的消息字符串,使用json格式 + * @param delaySeconds 发送成功的Message对象 + * @return + */ + public Message sendMsg(String queueName, String msg, int delaySeconds) { + Message message = new Message(); + message.setMessageBody(msg); + message.setDelaySeconds(delaySeconds); + LogUtil.bizLogger.debug("[alibaba-MNS]发送消息{}:{}", queueName, msg); + return client.getQueueRef(queueFullName(queueName)).putMessage(message); + } + + + /** + * 取出消息 + * + * @param queueName 接收对象对列名 + * @return 接收成功的Message对象 + */ + public Message popMsg(String queueName) { + return client.getQueueRef(queueFullName(queueName)).popMessage(DEFAULT_WAIT_SECONDS); + } + + /** + * 取出消息 长轮询 + * + * @param queueName 接收对象对列名 + * @param waitSeconds 接收成功的Message对象 + * @return + */ + public Message popMsg(String queueName, int waitSeconds) { + return client.getQueueRef(queueFullName(queueName)).popMessage(waitSeconds); + } + + + /** + * 删除消息 + * + * @param queueName 删除对象对列名 + * @param msg 需要删除的Message对象 + */ + public void deleteMsg(String queueName, Message msg) { + LogUtil.bizLogger.info("删除对象--:queueName{},msg{}", queueName, msg); + client.getQueueRef(queueFullName(queueName)).deleteMessage(msg.getReceiptHandle()); + + } + + /** + * 返回队列全称 + * + * @return + */ + public String queueFullName(String queueName) { + return properties.getQueueNamePrefix() + "-" + queueName; + } + + /** + * 创建主题 + */ + public CloudTopic crtTopic() { + TopicMeta topicMeta = new TopicMeta(); + topicMeta.setTopicName(properties.getTopicName()); + //是否启用日志 + topicMeta.setLoggingEnabled(true); + return client.createTopic(topicMeta); + } + + /** + * 删除主题 + */ + public void delTopic() { + getTopic().delete(); + } + + /** + * 获取主题 + * + * @return + */ + public CloudTopic getTopic() { + return client.getTopicRef(properties.getTopicName()); + } + + /** + * 创建订阅 + */ + public void subscribe(String subscriptionName, String queueName) { + CloudTopic topic = getTopic(); + SubscriptionMeta subMeta = new SubscriptionMeta(); + subMeta.setSubscriptionName(subscriptionName); + subMeta.setNotifyContentFormat(SubscriptionMeta.NotifyContentFormat.SIMPLIFIED); + subMeta.setEndpoint(topic.generateQueueEndpoint(queueFullName(queueName))); + topic.subscribe(subMeta); + } + + /** + * 发送消息 + * + * @param message + * @return + */ + public TopicMessage publishMessage(String message) { + CloudTopic topic = getTopic(); + //可以使用TopicMessage结构,选择不进行Base64加密 + TopicMessage msg = new Base64TopicMessage(); + msg.setMessageBody(message); + msg = topic.publishMessage(msg); + return msg; + } + + + /** + * 取出消息 + * + * @param queueName + * @return + */ + public Message popTopicMessage(String queueName) { + QueueMeta queueMeta = new QueueMeta(); + queueMeta.setQueueName(queueFullName(queueName)); + return client.createQueue(queueMeta).popMessage(DEFAULT_WAIT_SECONDS); + } + +} diff --git a/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/autoconfigure/MnsProperties.java b/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/autoconfigure/MnsProperties.java new file mode 100644 index 0000000..47218f2 --- /dev/null +++ b/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/autoconfigure/MnsProperties.java @@ -0,0 +1,74 @@ +package com.yexuejc.springboot.base.autoconfigure; + +import org.springframework.boot.context.properties.ConfigurationProperties; + +/** + * 阿里云消息服务MNS相关配置 + * + * @author maxf + * @version 1.0 + * @ClassName MnsProperties + * @Description + * @date 2018/11/1 10:27 + */ +@ConfigurationProperties(prefix = "yexuejc.alibaba.mns") +public class MnsProperties { + /** + * 在RAM创建的AccessKey + */ + private String accessKeyId="xxxxxxxxxx"; + /** + * 在RAM创建的SecretKey + */ + private String accessKeySecret="xxxxxxxxx"; + /** + * MNS接入endpoint,公网,私网,VPC各不相同,需要分环境配置 + */ + private String endpoint="http://00000000.mns.cn-hangzhou.aliyuncs.com"; + + /** + * 队列名称前缀(消费端为CONSUMER,测试环境为IVT-CONSUMER) + */ + private String queueNamePrefix; + private String topicName = "IVT"; + + public String getAccessKeyId() { + return accessKeyId; + } + + public void setAccessKeyId(String accessKeyId) { + this.accessKeyId = accessKeyId; + } + + public String getAccessKeySecret() { + return accessKeySecret; + } + + public void setAccessKeySecret(String accessKeySecret) { + this.accessKeySecret = accessKeySecret; + } + + public String getEndpoint() { + return endpoint; + } + + public void setEndpoint(String endpoint) { + this.endpoint = endpoint; + } + + public String getQueueNamePrefix() { + return queueNamePrefix; + } + + public void setQueueNamePrefix(String queueNamePrefix) { + this.queueNamePrefix = queueNamePrefix; + } + + public String getTopicName() { + return topicName; + } + + public void setTopicName(String topicName) { + this.topicName = topicName; + } +} diff --git a/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/autoconfigure/MutiRedisAutoConfiguration.java b/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/autoconfigure/MutiRedisAutoConfiguration.java index 7de1f70..d8a07b0 100644 --- a/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/autoconfigure/MutiRedisAutoConfiguration.java +++ b/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/autoconfigure/MutiRedisAutoConfiguration.java @@ -35,429 +35,438 @@ import java.net.UnknownHostException; import java.util.ArrayList; import java.util.List; +/** + * 对redis封装 + * + * @author maxf + * @version 1.0 + * @ClassName MutiRedisAutoConfiguration + * @Description + * @date 2018/11/1 10:31 + */ @Configuration -@ConditionalOnClass({ JedisConnection.class, RedisOperations.class, Jedis.class }) +@ConditionalOnClass({JedisConnection.class, RedisOperations.class, Jedis.class}) @EnableConfigurationProperties(RedisProperties.class) @Order(1) public class MutiRedisAutoConfiguration { - - public static final String BEAN_REDIS_FACTORY0 = "redisConnectionFactory"; - public static final String BEAN_REDIS_TEMPLATE0 = "redisTemplate"; - public static final String BEAN_REDIS_STRING_TEMPLATE0 = "stringRedisTemplate"; - - public static final String BEAN_REDIS_FACTORY1 = "redis-factory-1"; - public static final String BEAN_REDIS_TEMPLATE1 = "redis-template-1"; - public static final String BEAN_REDIS_STRING_TEMPLATE1 = "redis-string-template-1"; - public static final String BEAN_REDIS_FACTORY2 = "redis-factory-2"; - public static final String BEAN_REDIS_TEMPLATE2 = "redis-template-2"; - public static final String BEAN_REDIS_STRING_TEMPLATE2 = "redis-string-template-2"; - public static final String BEAN_REDIS_FACTORY3 = "redis-factory-3"; - public static final String BEAN_REDIS_TEMPLATE3 = "redis-template-3"; - public static final String BEAN_REDIS_STRING_TEMPLATE3 = "redis-string-template-3"; - public static final String BEAN_REDIS_FACTORY4 = "redis-factory-4"; - public static final String BEAN_REDIS_TEMPLATE4 = "redis-template-4"; - public static final String BEAN_REDIS_STRING_TEMPLATE4 = "redis-string-template-4"; - public static final String BEAN_REDIS_FACTORY5 = "redis-factory-5"; - public static final String BEAN_REDIS_TEMPLATE5 = "redis-template-5"; - public static final String BEAN_REDIS_STRING_TEMPLATE5 = "redis-string-template-5"; - public static final String BEAN_REDIS_FACTORY6 = "redis-factory-6"; - public static final String BEAN_REDIS_TEMPLATE6 = "redis-template-6"; - public static final String BEAN_REDIS_STRING_TEMPLATE6 = "redis-string-template-6"; - public static final String BEAN_REDIS_FACTORY7 = "redis-factory-7"; - public static final String BEAN_REDIS_TEMPLATE7 = "redis-template-7"; - public static final String BEAN_REDIS_STRING_TEMPLATE7 = "redis-string-template-7"; - public static final String BEAN_REDIS_FACTORY8 = "redis-factory-8"; - public static final String BEAN_REDIS_TEMPLATE8 = "redis-template-8"; - public static final String BEAN_REDIS_STRING_TEMPLATE8 = "redis-string-template-8"; - public static final String BEAN_REDIS_FACTORY9 = "redis-factory-9"; - public static final String BEAN_REDIS_TEMPLATE9 = "redis-template-9"; - public static final String BEAN_REDIS_STRING_TEMPLATE9 = "redis-string-template-9"; - /** - * Redis connection configuration. - */ - @Configuration - @ConditionalOnClass(GenericObjectPool.class) - protected static class RedisConnectionConfiguration { + public static final String BEAN_REDIS_FACTORY0 = "redisConnectionFactory"; + public static final String BEAN_REDIS_TEMPLATE0 = "redisTemplate"; + public static final String BEAN_REDIS_STRING_TEMPLATE0 = "stringRedisTemplate"; - private final RedisProperties properties; + public static final String BEAN_REDIS_FACTORY1 = "redis-factory-1"; + public static final String BEAN_REDIS_TEMPLATE1 = "redis-template-1"; + public static final String BEAN_REDIS_STRING_TEMPLATE1 = "redis-string-template-1"; + public static final String BEAN_REDIS_FACTORY2 = "redis-factory-2"; + public static final String BEAN_REDIS_TEMPLATE2 = "redis-template-2"; + public static final String BEAN_REDIS_STRING_TEMPLATE2 = "redis-string-template-2"; + public static final String BEAN_REDIS_FACTORY3 = "redis-factory-3"; + public static final String BEAN_REDIS_TEMPLATE3 = "redis-template-3"; + public static final String BEAN_REDIS_STRING_TEMPLATE3 = "redis-string-template-3"; + public static final String BEAN_REDIS_FACTORY4 = "redis-factory-4"; + public static final String BEAN_REDIS_TEMPLATE4 = "redis-template-4"; + public static final String BEAN_REDIS_STRING_TEMPLATE4 = "redis-string-template-4"; + public static final String BEAN_REDIS_FACTORY5 = "redis-factory-5"; + public static final String BEAN_REDIS_TEMPLATE5 = "redis-template-5"; + public static final String BEAN_REDIS_STRING_TEMPLATE5 = "redis-string-template-5"; + public static final String BEAN_REDIS_FACTORY6 = "redis-factory-6"; + public static final String BEAN_REDIS_TEMPLATE6 = "redis-template-6"; + public static final String BEAN_REDIS_STRING_TEMPLATE6 = "redis-string-template-6"; + public static final String BEAN_REDIS_FACTORY7 = "redis-factory-7"; + public static final String BEAN_REDIS_TEMPLATE7 = "redis-template-7"; + public static final String BEAN_REDIS_STRING_TEMPLATE7 = "redis-string-template-7"; + public static final String BEAN_REDIS_FACTORY8 = "redis-factory-8"; + public static final String BEAN_REDIS_TEMPLATE8 = "redis-template-8"; + public static final String BEAN_REDIS_STRING_TEMPLATE8 = "redis-string-template-8"; + public static final String BEAN_REDIS_FACTORY9 = "redis-factory-9"; + public static final String BEAN_REDIS_TEMPLATE9 = "redis-template-9"; + public static final String BEAN_REDIS_STRING_TEMPLATE9 = "redis-string-template-9"; - private final RedisSentinelConfiguration sentinelConfiguration; + /** + * Redis connection configuration. + */ + @Configuration + @ConditionalOnClass(GenericObjectPool.class) + protected static class RedisConnectionConfiguration { - private final RedisClusterConfiguration clusterConfiguration; + private final RedisProperties properties; - public RedisConnectionConfiguration(RedisProperties properties, - ObjectProvider sentinelConfiguration, - ObjectProvider clusterConfiguration) { - this.properties = properties; - this.sentinelConfiguration = sentinelConfiguration.getIfAvailable(); - this.clusterConfiguration = clusterConfiguration.getIfAvailable(); - } + private final RedisSentinelConfiguration sentinelConfiguration; - @Primary - @Bean(BEAN_REDIS_FACTORY0) - @ConditionalOnProperty(name = "yexuejc.redis.db0", matchIfMissing = true) - public JedisConnectionFactory redisConnectionFactory0() throws UnknownHostException { - return applyProperties(createJedisConnectionFactory(), 0); - } + private final RedisClusterConfiguration clusterConfiguration; - @Bean(BEAN_REDIS_FACTORY1) - @ConditionalOnProperty(name = "yexuejc.redis.db1") - public JedisConnectionFactory redisConnectionFactory1() throws UnknownHostException { - return applyProperties(createJedisConnectionFactory(), 1); - } + public RedisConnectionConfiguration(RedisProperties properties, + ObjectProvider sentinelConfiguration, + ObjectProvider clusterConfiguration) { + this.properties = properties; + this.sentinelConfiguration = sentinelConfiguration.getIfAvailable(); + this.clusterConfiguration = clusterConfiguration.getIfAvailable(); + } - @Bean(BEAN_REDIS_FACTORY2) - @ConditionalOnProperty(name = "yexuejc.redis.db2") - public JedisConnectionFactory redisConnectionFactory2() throws UnknownHostException { - return applyProperties(createJedisConnectionFactory(), 2); - } + @Primary + @Bean(BEAN_REDIS_FACTORY0) + @ConditionalOnProperty(name = "yexuejc.redis.db0", matchIfMissing = true) + public JedisConnectionFactory redisConnectionFactory0() throws UnknownHostException { + return applyProperties(createJedisConnectionFactory(), 0); + } - @Bean(BEAN_REDIS_FACTORY3) - @ConditionalOnProperty(name = "yexuejc.redis.db3") - public JedisConnectionFactory redisConnectionFactory3() throws UnknownHostException { - return applyProperties(createJedisConnectionFactory(), 3); - } + @Bean(BEAN_REDIS_FACTORY1) + @ConditionalOnProperty(name = "yexuejc.redis.db1") + public JedisConnectionFactory redisConnectionFactory1() throws UnknownHostException { + return applyProperties(createJedisConnectionFactory(), 1); + } - @Bean(BEAN_REDIS_FACTORY4) - @ConditionalOnProperty(name = "yexuejc.redis.db4") - public JedisConnectionFactory redisConnectionFactory4() throws UnknownHostException { - return applyProperties(createJedisConnectionFactory(), 4); - } + @Bean(BEAN_REDIS_FACTORY2) + @ConditionalOnProperty(name = "yexuejc.redis.db2") + public JedisConnectionFactory redisConnectionFactory2() throws UnknownHostException { + return applyProperties(createJedisConnectionFactory(), 2); + } - @Bean(BEAN_REDIS_FACTORY5) - @ConditionalOnProperty(name = "yexuejc.redis.db5") - public JedisConnectionFactory redisConnectionFactory5() throws UnknownHostException { - return applyProperties(createJedisConnectionFactory(), 5); - } + @Bean(BEAN_REDIS_FACTORY3) + @ConditionalOnProperty(name = "yexuejc.redis.db3") + public JedisConnectionFactory redisConnectionFactory3() throws UnknownHostException { + return applyProperties(createJedisConnectionFactory(), 3); + } - @Bean(BEAN_REDIS_FACTORY6) - @ConditionalOnProperty(name = "yexuejc.redis.db6") - public JedisConnectionFactory redisConnectionFactory6() throws UnknownHostException { - return applyProperties(createJedisConnectionFactory(), 6); - } + @Bean(BEAN_REDIS_FACTORY4) + @ConditionalOnProperty(name = "yexuejc.redis.db4") + public JedisConnectionFactory redisConnectionFactory4() throws UnknownHostException { + return applyProperties(createJedisConnectionFactory(), 4); + } - @Bean(BEAN_REDIS_FACTORY7) - @ConditionalOnProperty(name = "yexuejc.redis.db7") - public JedisConnectionFactory redisConnectionFactory7() throws UnknownHostException { - return applyProperties(createJedisConnectionFactory(), 7); - } + @Bean(BEAN_REDIS_FACTORY5) + @ConditionalOnProperty(name = "yexuejc.redis.db5") + public JedisConnectionFactory redisConnectionFactory5() throws UnknownHostException { + return applyProperties(createJedisConnectionFactory(), 5); + } - @Bean(BEAN_REDIS_FACTORY8) - @ConditionalOnProperty(name = "yexuejc.redis.db8") - public JedisConnectionFactory redisConnectionFactory8() throws UnknownHostException { - return applyProperties(createJedisConnectionFactory(), 8); - } + @Bean(BEAN_REDIS_FACTORY6) + @ConditionalOnProperty(name = "yexuejc.redis.db6") + public JedisConnectionFactory redisConnectionFactory6() throws UnknownHostException { + return applyProperties(createJedisConnectionFactory(), 6); + } - @Bean(BEAN_REDIS_FACTORY9) - @ConditionalOnProperty(name = "yexuejc.redis.db9") - public JedisConnectionFactory redisConnectionFactory9() throws UnknownHostException { - return applyProperties(createJedisConnectionFactory(), 9); - } + @Bean(BEAN_REDIS_FACTORY7) + @ConditionalOnProperty(name = "yexuejc.redis.db7") + public JedisConnectionFactory redisConnectionFactory7() throws UnknownHostException { + return applyProperties(createJedisConnectionFactory(), 7); + } - protected final JedisConnectionFactory applyProperties(JedisConnectionFactory factory, int database) { - configureConnection(factory); - if (this.properties.isSsl()) { - factory.setUseSsl(true); - } - factory.setDatabase(database); - if (this.properties.getTimeout() > 0) { - factory.setTimeout(this.properties.getTimeout()); - } - return factory; - } + @Bean(BEAN_REDIS_FACTORY8) + @ConditionalOnProperty(name = "yexuejc.redis.db8") + public JedisConnectionFactory redisConnectionFactory8() throws UnknownHostException { + return applyProperties(createJedisConnectionFactory(), 8); + } - private void configureConnection(JedisConnectionFactory factory) { - if (StringUtils.hasText(this.properties.getUrl())) { - configureConnectionFromUrl(factory); - } else { - factory.setHostName(this.properties.getHost()); - factory.setPort(this.properties.getPort()); - if (this.properties.getPassword() != null) { - factory.setPassword(this.properties.getPassword()); - } - } - } + @Bean(BEAN_REDIS_FACTORY9) + @ConditionalOnProperty(name = "yexuejc.redis.db9") + public JedisConnectionFactory redisConnectionFactory9() throws UnknownHostException { + return applyProperties(createJedisConnectionFactory(), 9); + } - private void configureConnectionFromUrl(JedisConnectionFactory factory) { - String url = this.properties.getUrl(); - if (url.startsWith("rediss://")) { - factory.setUseSsl(true); - } - try { - URI uri = new URI(url); - factory.setHostName(uri.getHost()); - factory.setPort(uri.getPort()); - if (uri.getUserInfo() != null) { - String password = uri.getUserInfo(); - int index = password.lastIndexOf(":"); - if (index >= 0) { - password = password.substring(index + 1); - } - factory.setPassword(password); - } - } catch (URISyntaxException ex) { - throw new IllegalArgumentException("Malformed 'spring.redis.url' " + url, ex); - } - } + protected final JedisConnectionFactory applyProperties(JedisConnectionFactory factory, int database) { + configureConnection(factory); + if (this.properties.isSsl()) { + factory.setUseSsl(true); + } + factory.setDatabase(database); + if (this.properties.getTimeout() > 0) { + factory.setTimeout(this.properties.getTimeout()); + } + return factory; + } - protected final RedisSentinelConfiguration getSentinelConfig() { - if (this.sentinelConfiguration != null) { - return this.sentinelConfiguration; - } - Sentinel sentinelProperties = this.properties.getSentinel(); - if (sentinelProperties != null) { - RedisSentinelConfiguration config = new RedisSentinelConfiguration(); - config.master(sentinelProperties.getMaster()); - config.setSentinels(createSentinels(sentinelProperties)); - return config; - } - return null; - } + private void configureConnection(JedisConnectionFactory factory) { + if (StringUtils.hasText(this.properties.getUrl())) { + configureConnectionFromUrl(factory); + } else { + factory.setHostName(this.properties.getHost()); + factory.setPort(this.properties.getPort()); + if (this.properties.getPassword() != null) { + factory.setPassword(this.properties.getPassword()); + } + } + } - /** - * Create a {@link RedisClusterConfiguration} if necessary. - * - * @return {@literal null} if no cluster settings are set. - */ - protected final RedisClusterConfiguration getClusterConfiguration() { - if (this.clusterConfiguration != null) { - return this.clusterConfiguration; - } - if (this.properties.getCluster() == null) { - return null; - } - Cluster clusterProperties = this.properties.getCluster(); - RedisClusterConfiguration config = new RedisClusterConfiguration(clusterProperties.getNodes()); + private void configureConnectionFromUrl(JedisConnectionFactory factory) { + String url = this.properties.getUrl(); + if (url.startsWith("rediss://")) { + factory.setUseSsl(true); + } + try { + URI uri = new URI(url); + factory.setHostName(uri.getHost()); + factory.setPort(uri.getPort()); + if (uri.getUserInfo() != null) { + String password = uri.getUserInfo(); + int index = password.lastIndexOf(":"); + if (index >= 0) { + password = password.substring(index + 1); + } + factory.setPassword(password); + } + } catch (URISyntaxException ex) { + throw new IllegalArgumentException("Malformed 'spring.redis.url' " + url, ex); + } + } - if (clusterProperties.getMaxRedirects() != null) { - config.setMaxRedirects(clusterProperties.getMaxRedirects()); - } - return config; - } + protected final RedisSentinelConfiguration getSentinelConfig() { + if (this.sentinelConfiguration != null) { + return this.sentinelConfiguration; + } + Sentinel sentinelProperties = this.properties.getSentinel(); + if (sentinelProperties != null) { + RedisSentinelConfiguration config = new RedisSentinelConfiguration(); + config.master(sentinelProperties.getMaster()); + config.setSentinels(createSentinels(sentinelProperties)); + return config; + } + return null; + } - private List createSentinels(Sentinel sentinel) { - List nodes = new ArrayList(); - for (String node : StringUtils.commaDelimitedListToStringArray(sentinel.getNodes())) { - try { - String[] parts = StringUtils.split(node, ":"); - Assert.state(parts.length == 2, "Must be defined as 'host:port'"); - nodes.add(new RedisNode(parts[0], Integer.valueOf(parts[1]))); - } catch (RuntimeException ex) { - throw new IllegalStateException("Invalid redis sentinel " + "property '" + node + "'", ex); - } - } - return nodes; - } + /** + * Create a {@link RedisClusterConfiguration} if necessary. + * + * @return {@literal null} if no cluster settings are set. + */ + protected final RedisClusterConfiguration getClusterConfiguration() { + if (this.clusterConfiguration != null) { + return this.clusterConfiguration; + } + if (this.properties.getCluster() == null) { + return null; + } + Cluster clusterProperties = this.properties.getCluster(); + RedisClusterConfiguration config = new RedisClusterConfiguration(clusterProperties.getNodes()); - private JedisConnectionFactory createJedisConnectionFactory() { - JedisPoolConfig poolConfig = this.properties.getPool() != null ? jedisPoolConfig() : new JedisPoolConfig(); + if (clusterProperties.getMaxRedirects() != null) { + config.setMaxRedirects(clusterProperties.getMaxRedirects()); + } + return config; + } - if (getSentinelConfig() != null) { - return new JedisConnectionFactory(getSentinelConfig(), poolConfig); - } - if (getClusterConfiguration() != null) { - return new JedisConnectionFactory(getClusterConfiguration(), poolConfig); - } - return new JedisConnectionFactory(poolConfig); - } + private List createSentinels(Sentinel sentinel) { + List nodes = new ArrayList(); + for (String node : StringUtils.commaDelimitedListToStringArray(sentinel.getNodes())) { + try { + String[] parts = StringUtils.split(node, ":"); + Assert.state(parts.length == 2, "Must be defined as 'host:port'"); + nodes.add(new RedisNode(parts[0], Integer.valueOf(parts[1]))); + } catch (RuntimeException ex) { + throw new IllegalStateException("Invalid redis sentinel " + "property '" + node + "'", ex); + } + } + return nodes; + } - private JedisPoolConfig jedisPoolConfig() { - JedisPoolConfig config = new JedisPoolConfig(); - RedisProperties.Pool props = this.properties.getPool(); - config.setMaxTotal(props.getMaxActive()); - config.setMaxIdle(props.getMaxIdle()); - config.setMinIdle(props.getMinIdle()); - config.setMaxWaitMillis(props.getMaxWait()); - return config; - } + private JedisConnectionFactory createJedisConnectionFactory() { + JedisPoolConfig poolConfig = this.properties.getPool() != null ? jedisPoolConfig() : new JedisPoolConfig(); - } + if (getSentinelConfig() != null) { + return new JedisConnectionFactory(getSentinelConfig(), poolConfig); + } + if (getClusterConfiguration() != null) { + return new JedisConnectionFactory(getClusterConfiguration(), poolConfig); + } + return new JedisConnectionFactory(poolConfig); + } - /** - * Standard Redis configuration. - */ - @Configuration - protected static class RedisConfiguration { + private JedisPoolConfig jedisPoolConfig() { + JedisPoolConfig config = new JedisPoolConfig(); + RedisProperties.Pool props = this.properties.getPool(); + config.setMaxTotal(props.getMaxActive()); + config.setMaxIdle(props.getMaxIdle()); + config.setMinIdle(props.getMinIdle()); + config.setMaxWaitMillis(props.getMaxWait()); + return config; + } - @Primary - @Bean(BEAN_REDIS_TEMPLATE0) - @ConditionalOnProperty(name = "yexuejc.redis.db0", matchIfMissing = true) - public RedisTemplate redisTemplate( - @Qualifier(BEAN_REDIS_FACTORY0) RedisConnectionFactory redisConnectionFactory) - throws UnknownHostException { - return createRedisTemplate(redisConnectionFactory); - } + } - @Bean(BEAN_REDIS_STRING_TEMPLATE0) - @ConditionalOnProperty(name = "yexuejc.redis.db0", matchIfMissing = true) - public StringRedisTemplate stringRedisTemplate( - @Qualifier(BEAN_REDIS_FACTORY0) RedisConnectionFactory redisConnectionFactory) - throws UnknownHostException { - return createStringRedisTemplate(redisConnectionFactory); - } + /** + * Standard Redis configuration. + */ + @Configuration + protected static class RedisConfiguration { - @Bean(BEAN_REDIS_TEMPLATE1) - @ConditionalOnProperty(name = "yexuejc.redis.db1") - public RedisTemplate redisTemplate1( - @Qualifier(BEAN_REDIS_FACTORY1) RedisConnectionFactory redisConnectionFactory) - throws UnknownHostException { - return createRedisTemplate(redisConnectionFactory); - } + @Primary + @Bean(BEAN_REDIS_TEMPLATE0) + @ConditionalOnProperty(name = "yexuejc.redis.db0", matchIfMissing = true) + public RedisTemplate redisTemplate( + @Qualifier(BEAN_REDIS_FACTORY0) RedisConnectionFactory redisConnectionFactory) + throws UnknownHostException { + return createRedisTemplate(redisConnectionFactory); + } - @Bean(BEAN_REDIS_STRING_TEMPLATE1) - @ConditionalOnProperty(name = "yexuejc.redis.db1") - public StringRedisTemplate stringRedisTemplate1( - @Qualifier(BEAN_REDIS_FACTORY1) RedisConnectionFactory redisConnectionFactory) - throws UnknownHostException { - return createStringRedisTemplate(redisConnectionFactory); - } + @Bean(BEAN_REDIS_STRING_TEMPLATE0) + @ConditionalOnProperty(name = "yexuejc.redis.db0", matchIfMissing = true) + public StringRedisTemplate stringRedisTemplate( + @Qualifier(BEAN_REDIS_FACTORY0) RedisConnectionFactory redisConnectionFactory) + throws UnknownHostException { + return createStringRedisTemplate(redisConnectionFactory); + } - @Bean(BEAN_REDIS_TEMPLATE2) - @ConditionalOnProperty(name = "yexuejc.redis.db2") - public RedisTemplate redisTemplate2( - @Qualifier(BEAN_REDIS_FACTORY2) RedisConnectionFactory redisConnectionFactory) - throws UnknownHostException { - return createRedisTemplate(redisConnectionFactory); - } + @Bean(BEAN_REDIS_TEMPLATE1) + @ConditionalOnProperty(name = "yexuejc.redis.db1") + public RedisTemplate redisTemplate1( + @Qualifier(BEAN_REDIS_FACTORY1) RedisConnectionFactory redisConnectionFactory) + throws UnknownHostException { + return createRedisTemplate(redisConnectionFactory); + } - @Bean(BEAN_REDIS_STRING_TEMPLATE2) - @ConditionalOnProperty(name = "yexuejc.redis.db2") - public StringRedisTemplate stringRedisTemplate2( - @Qualifier(BEAN_REDIS_FACTORY2) RedisConnectionFactory redisConnectionFactory) - throws UnknownHostException { - return createStringRedisTemplate(redisConnectionFactory); - } + @Bean(BEAN_REDIS_STRING_TEMPLATE1) + @ConditionalOnProperty(name = "yexuejc.redis.db1") + public StringRedisTemplate stringRedisTemplate1( + @Qualifier(BEAN_REDIS_FACTORY1) RedisConnectionFactory redisConnectionFactory) + throws UnknownHostException { + return createStringRedisTemplate(redisConnectionFactory); + } - @Bean(BEAN_REDIS_TEMPLATE3) - @ConditionalOnProperty(name = "yexuejc.redis.db3") - public RedisTemplate redisTemplate3( - @Qualifier(BEAN_REDIS_FACTORY3) RedisConnectionFactory redisConnectionFactory) - throws UnknownHostException { - return createRedisTemplate(redisConnectionFactory); - } + @Bean(BEAN_REDIS_TEMPLATE2) + @ConditionalOnProperty(name = "yexuejc.redis.db2") + public RedisTemplate redisTemplate2( + @Qualifier(BEAN_REDIS_FACTORY2) RedisConnectionFactory redisConnectionFactory) + throws UnknownHostException { + return createRedisTemplate(redisConnectionFactory); + } - @Bean(BEAN_REDIS_STRING_TEMPLATE3) - @ConditionalOnProperty(name = "yexuejc.redis.db3") - public StringRedisTemplate stringRedisTemplate3( - @Qualifier(BEAN_REDIS_FACTORY3) RedisConnectionFactory redisConnectionFactory) - throws UnknownHostException { - return createStringRedisTemplate(redisConnectionFactory); - } + @Bean(BEAN_REDIS_STRING_TEMPLATE2) + @ConditionalOnProperty(name = "yexuejc.redis.db2") + public StringRedisTemplate stringRedisTemplate2( + @Qualifier(BEAN_REDIS_FACTORY2) RedisConnectionFactory redisConnectionFactory) + throws UnknownHostException { + return createStringRedisTemplate(redisConnectionFactory); + } - @Bean(BEAN_REDIS_TEMPLATE4) - @ConditionalOnProperty(name = "yexuejc.redis.db4") - public RedisTemplate redisTemplate4( - @Qualifier(BEAN_REDIS_FACTORY4) RedisConnectionFactory redisConnectionFactory) - throws UnknownHostException { - return createRedisTemplate(redisConnectionFactory); - } + @Bean(BEAN_REDIS_TEMPLATE3) + @ConditionalOnProperty(name = "yexuejc.redis.db3") + public RedisTemplate redisTemplate3( + @Qualifier(BEAN_REDIS_FACTORY3) RedisConnectionFactory redisConnectionFactory) + throws UnknownHostException { + return createRedisTemplate(redisConnectionFactory); + } - @Bean(BEAN_REDIS_STRING_TEMPLATE4) - @ConditionalOnProperty(name = "yexuejc.redis.db4") - public StringRedisTemplate stringRedisTemplate4( - @Qualifier(BEAN_REDIS_FACTORY4) RedisConnectionFactory redisConnectionFactory) - throws UnknownHostException { - return createStringRedisTemplate(redisConnectionFactory); - } + @Bean(BEAN_REDIS_STRING_TEMPLATE3) + @ConditionalOnProperty(name = "yexuejc.redis.db3") + public StringRedisTemplate stringRedisTemplate3( + @Qualifier(BEAN_REDIS_FACTORY3) RedisConnectionFactory redisConnectionFactory) + throws UnknownHostException { + return createStringRedisTemplate(redisConnectionFactory); + } - @Bean(BEAN_REDIS_TEMPLATE5) - @ConditionalOnProperty(name = "yexuejc.redis.db5") - public RedisTemplate redisTemplate5( - @Qualifier(BEAN_REDIS_FACTORY5) RedisConnectionFactory redisConnectionFactory) - throws UnknownHostException { - return createRedisTemplate(redisConnectionFactory); - } + @Bean(BEAN_REDIS_TEMPLATE4) + @ConditionalOnProperty(name = "yexuejc.redis.db4") + public RedisTemplate redisTemplate4( + @Qualifier(BEAN_REDIS_FACTORY4) RedisConnectionFactory redisConnectionFactory) + throws UnknownHostException { + return createRedisTemplate(redisConnectionFactory); + } - @Bean(BEAN_REDIS_STRING_TEMPLATE5) - @ConditionalOnProperty(name = "yexuejc.redis.db5") - public StringRedisTemplate stringRedisTemplate5( - @Qualifier(BEAN_REDIS_FACTORY5) RedisConnectionFactory redisConnectionFactory) - throws UnknownHostException { - return createStringRedisTemplate(redisConnectionFactory); - } + @Bean(BEAN_REDIS_STRING_TEMPLATE4) + @ConditionalOnProperty(name = "yexuejc.redis.db4") + public StringRedisTemplate stringRedisTemplate4( + @Qualifier(BEAN_REDIS_FACTORY4) RedisConnectionFactory redisConnectionFactory) + throws UnknownHostException { + return createStringRedisTemplate(redisConnectionFactory); + } - @Bean(BEAN_REDIS_TEMPLATE6) - @ConditionalOnProperty(name = "yexuejc.redis.db6") - public RedisTemplate redisTemplate6( - @Qualifier(BEAN_REDIS_FACTORY6) RedisConnectionFactory redisConnectionFactory) - throws UnknownHostException { - return createRedisTemplate(redisConnectionFactory); - } + @Bean(BEAN_REDIS_TEMPLATE5) + @ConditionalOnProperty(name = "yexuejc.redis.db5") + public RedisTemplate redisTemplate5( + @Qualifier(BEAN_REDIS_FACTORY5) RedisConnectionFactory redisConnectionFactory) + throws UnknownHostException { + return createRedisTemplate(redisConnectionFactory); + } - @Bean(BEAN_REDIS_STRING_TEMPLATE6) - @ConditionalOnProperty(name = "yexuejc.redis.db6") - public StringRedisTemplate stringRedisTemplate6( - @Qualifier(BEAN_REDIS_FACTORY6) RedisConnectionFactory redisConnectionFactory) - throws UnknownHostException { - return createStringRedisTemplate(redisConnectionFactory); - } + @Bean(BEAN_REDIS_STRING_TEMPLATE5) + @ConditionalOnProperty(name = "yexuejc.redis.db5") + public StringRedisTemplate stringRedisTemplate5( + @Qualifier(BEAN_REDIS_FACTORY5) RedisConnectionFactory redisConnectionFactory) + throws UnknownHostException { + return createStringRedisTemplate(redisConnectionFactory); + } - @Bean(BEAN_REDIS_TEMPLATE7) - @ConditionalOnProperty(name = "yexuejc.redis.db7") - public RedisTemplate redisTemplate7( - @Qualifier(BEAN_REDIS_FACTORY7) RedisConnectionFactory redisConnectionFactory) - throws UnknownHostException { - return createRedisTemplate(redisConnectionFactory); - } + @Bean(BEAN_REDIS_TEMPLATE6) + @ConditionalOnProperty(name = "yexuejc.redis.db6") + public RedisTemplate redisTemplate6( + @Qualifier(BEAN_REDIS_FACTORY6) RedisConnectionFactory redisConnectionFactory) + throws UnknownHostException { + return createRedisTemplate(redisConnectionFactory); + } - @Bean(BEAN_REDIS_STRING_TEMPLATE7) - @ConditionalOnProperty(name = "yexuejc.redis.db7") - public StringRedisTemplate stringRedisTemplate7( - @Qualifier(BEAN_REDIS_FACTORY7) RedisConnectionFactory redisConnectionFactory) - throws UnknownHostException { - return createStringRedisTemplate(redisConnectionFactory); - } + @Bean(BEAN_REDIS_STRING_TEMPLATE6) + @ConditionalOnProperty(name = "yexuejc.redis.db6") + public StringRedisTemplate stringRedisTemplate6( + @Qualifier(BEAN_REDIS_FACTORY6) RedisConnectionFactory redisConnectionFactory) + throws UnknownHostException { + return createStringRedisTemplate(redisConnectionFactory); + } - @Bean(BEAN_REDIS_TEMPLATE8) - @ConditionalOnProperty(name = "yexuejc.redis.db8") - public RedisTemplate redisTemplate8( - @Qualifier(BEAN_REDIS_FACTORY8) RedisConnectionFactory redisConnectionFactory) - throws UnknownHostException { - return createRedisTemplate(redisConnectionFactory); - } + @Bean(BEAN_REDIS_TEMPLATE7) + @ConditionalOnProperty(name = "yexuejc.redis.db7") + public RedisTemplate redisTemplate7( + @Qualifier(BEAN_REDIS_FACTORY7) RedisConnectionFactory redisConnectionFactory) + throws UnknownHostException { + return createRedisTemplate(redisConnectionFactory); + } - @Bean(BEAN_REDIS_STRING_TEMPLATE8) - @ConditionalOnProperty(name = "yexuejc.redis.db8") - public StringRedisTemplate stringRedisTemplate8( - @Qualifier(BEAN_REDIS_FACTORY8) RedisConnectionFactory redisConnectionFactory) - throws UnknownHostException { - return createStringRedisTemplate(redisConnectionFactory); - } + @Bean(BEAN_REDIS_STRING_TEMPLATE7) + @ConditionalOnProperty(name = "yexuejc.redis.db7") + public StringRedisTemplate stringRedisTemplate7( + @Qualifier(BEAN_REDIS_FACTORY7) RedisConnectionFactory redisConnectionFactory) + throws UnknownHostException { + return createStringRedisTemplate(redisConnectionFactory); + } - @Bean(BEAN_REDIS_TEMPLATE9) - @ConditionalOnProperty(name = "yexuejc.redis.db9") - public RedisTemplate redisTemplate9( - @Qualifier(BEAN_REDIS_FACTORY9) RedisConnectionFactory redisConnectionFactory) - throws UnknownHostException { - return createRedisTemplate(redisConnectionFactory); - } + @Bean(BEAN_REDIS_TEMPLATE8) + @ConditionalOnProperty(name = "yexuejc.redis.db8") + public RedisTemplate redisTemplate8( + @Qualifier(BEAN_REDIS_FACTORY8) RedisConnectionFactory redisConnectionFactory) + throws UnknownHostException { + return createRedisTemplate(redisConnectionFactory); + } - @Bean(BEAN_REDIS_STRING_TEMPLATE9) - @ConditionalOnProperty(name = "yexuejc.redis.db9") - public StringRedisTemplate stringRedisTemplate9( - @Qualifier(BEAN_REDIS_FACTORY9) RedisConnectionFactory redisConnectionFactory) - throws UnknownHostException { - return createStringRedisTemplate(redisConnectionFactory); - } + @Bean(BEAN_REDIS_STRING_TEMPLATE8) + @ConditionalOnProperty(name = "yexuejc.redis.db8") + public StringRedisTemplate stringRedisTemplate8( + @Qualifier(BEAN_REDIS_FACTORY8) RedisConnectionFactory redisConnectionFactory) + throws UnknownHostException { + return createStringRedisTemplate(redisConnectionFactory); + } - private RedisTemplate createRedisTemplate(RedisConnectionFactory redisConnectionFactory) { - RedisTemplate template = new RedisTemplate(); - template.setHashKeySerializer(new StringRedisSerializer()); - template.setHashValueSerializer(new Jackson2JsonRedisSerializer(Object.class)); - template.setKeySerializer(new StringRedisSerializer()); - template.setDefaultSerializer(new StringRedisSerializer()); - template.setValueSerializer(new StringRedisSerializer()); - template.setConnectionFactory(redisConnectionFactory); - return template; - } + @Bean(BEAN_REDIS_TEMPLATE9) + @ConditionalOnProperty(name = "yexuejc.redis.db9") + public RedisTemplate redisTemplate9( + @Qualifier(BEAN_REDIS_FACTORY9) RedisConnectionFactory redisConnectionFactory) + throws UnknownHostException { + return createRedisTemplate(redisConnectionFactory); + } - private StringRedisTemplate createStringRedisTemplate(RedisConnectionFactory redisConnectionFactory) { - StringRedisTemplate template = new StringRedisTemplate(); - template.setConnectionFactory(redisConnectionFactory); - return template; - } + @Bean(BEAN_REDIS_STRING_TEMPLATE9) + @ConditionalOnProperty(name = "yexuejc.redis.db9") + public StringRedisTemplate stringRedisTemplate9( + @Qualifier(BEAN_REDIS_FACTORY9) RedisConnectionFactory redisConnectionFactory) + throws UnknownHostException { + return createStringRedisTemplate(redisConnectionFactory); + } - } + private RedisTemplate createRedisTemplate(RedisConnectionFactory redisConnectionFactory) { + RedisTemplate template = new RedisTemplate(); + template.setHashKeySerializer(new StringRedisSerializer()); + template.setHashValueSerializer(new Jackson2JsonRedisSerializer(Object.class)); + template.setKeySerializer(new StringRedisSerializer()); + template.setDefaultSerializer(new StringRedisSerializer()); + template.setValueSerializer(new StringRedisSerializer()); + template.setConnectionFactory(redisConnectionFactory); + return template; + } + + private StringRedisTemplate createStringRedisTemplate(RedisConnectionFactory redisConnectionFactory) { + StringRedisTemplate template = new StringRedisTemplate(); + template.setConnectionFactory(redisConnectionFactory); + return template; + } + + } } diff --git a/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/autoconfigure/OssAutoConfiguration.java b/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/autoconfigure/OssAutoConfiguration.java index 8cb0135..e323204 100644 --- a/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/autoconfigure/OssAutoConfiguration.java +++ b/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/autoconfigure/OssAutoConfiguration.java @@ -9,10 +9,16 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** - * OSS相关配置 + * 阿里OSS相关配置 + * + * @author maxf + * @version 1.0 + * @ClassName OssAutoConfiguration + * @Description + * @date 2018/11/1 10:30 */ @Configuration -@ConditionalOnClass({ OSSClient.class }) +@ConditionalOnClass({OSSClient.class}) @EnableConfigurationProperties(OssProperties.class) public class OssAutoConfiguration { diff --git a/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/autoconfigure/OssFacade.java b/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/autoconfigure/OssFacade.java index da79d72..df15828 100644 --- a/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/autoconfigure/OssFacade.java +++ b/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/autoconfigure/OssFacade.java @@ -9,6 +9,12 @@ import java.io.InputStream; /** * 阿里云OSS服务MNS操作类 + * + * @author maxf + * @version 1.0 + * @ClassName OssFacade + * @Description + * @date 2018/11/1 10:30 */ public class OssFacade { diff --git a/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/autoconfigure/OssProperties.java b/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/autoconfigure/OssProperties.java index fee21b5..82f5cb4 100644 --- a/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/autoconfigure/OssProperties.java +++ b/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/autoconfigure/OssProperties.java @@ -2,17 +2,34 @@ package com.yexuejc.springboot.base.autoconfigure; import org.springframework.boot.context.properties.ConfigurationProperties; -@ConfigurationProperties(prefix = "yexuejc.oss") +/** + * 阿里OSS相关配置 + * + * @author maxf + * @version 1.0 + * @ClassName OssProperties + * @Description + * @date 2018/11/1 10:30 + */ +@ConfigurationProperties(prefix = "yexuejc.alibaba.oss") public class OssProperties { - /** Endpoint 默认内网,外网需要自行配置:http://oss-cn-hangzhou.aliyuncs.com */ - private String endpoint = "oss-cn-hangzhou-internal.aliyuncs.com"; - /** 产品域名(固定) */ - private String accessKeyID = "LTAInCYwtsprAu8g"; - /** 区域ID(固定) */ - private String accessKeySecret = "6aqMtyFuJPUPChYpZSLsQ11cg4qby7"; - /** 默认bucket */ - private String bucket = "ecentm-res"; + /** + * Endpoint 默认内网,外网需要自行配置:http://oss-cn-hangzhou.aliyuncs.com + */ + private String endpoint = "http://oss-cn-hangzhou.aliyuncs.com"; + /** + * 产品域名(固定) + */ + private String accessKeyId = "xxxxx"; + /** + * 区域ID(固定) + */ + private String accessKeySecret = "xxxxx"; + /** + * 默认bucket + */ + private String bucket = "xxxxx"; public String getEndpoint() { return endpoint; @@ -22,12 +39,12 @@ public class OssProperties { this.endpoint = endpoint; } - public String getAccessKeyID() { - return accessKeyID; + public String getAccessKeyId() { + return accessKeyId; } - public void setAccessKeyID(String accessKeyID) { - this.accessKeyID = accessKeyID; + public void setAccessKeyId(String accessKeyId) { + this.accessKeyId = accessKeyId; } public String getAccessKeySecret() { diff --git a/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/exception/ImageException.java b/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/exception/ImageException.java new file mode 100644 index 0000000..35c478b --- /dev/null +++ b/yexuejc-springboot-base/src/main/java/com/yexuejc/springboot/base/exception/ImageException.java @@ -0,0 +1,24 @@ + +package com.yexuejc.springboot.base.exception; + +public class ImageException extends RuntimeException { + private static final long serialVersionUID = -2390195902982826130L; + private String code = "E"; + + public ImageException() { + super("图片异常"); + } + + public ImageException(String message) { + super(message); + } + + public ImageException(String msg, Throwable t) { + super(msg, t); + } + + public ImageException(String code, String msg, Throwable t) { + super(msg, t); + this.code = code; + } +} diff --git a/yexuejc-springboot-base/src/main/resources/META-INF/spring.factories b/yexuejc-springboot-base/src/main/resources/META-INF/spring.factories index 0a80197..fef1b9a 100644 --- a/yexuejc-springboot-base/src/main/resources/META-INF/spring.factories +++ b/yexuejc-springboot-base/src/main/resources/META-INF/spring.factories @@ -3,5 +3,6 @@ com.yexuejc.springboot.base.autoconfigure.WebAutoConfiguration,\ com.yexuejc.springboot.base.autoconfigure.OssAutoConfiguration,\ com.yexuejc.springboot.base.autoconfigure.MutiRedisAutoConfiguration,\ com.yexuejc.springboot.base.filter.ParamsRequestBodyAdvice,\ -com.yexuejc.springboot.base.filter.ParamsResponseBodyAdvice +com.yexuejc.springboot.base.filter.ParamsResponseBodyAdvice,\ +com.yexuejc.springboot.base.autoconfigure.MnsAutoConfiguration diff --git a/yexuejc-springboot-base/src/test/java/com/yexuejc/springboot/base/test/MnsTest.java b/yexuejc-springboot-base/src/test/java/com/yexuejc/springboot/base/test/MnsTest.java new file mode 100644 index 0000000..9df5d21 --- /dev/null +++ b/yexuejc-springboot-base/src/test/java/com/yexuejc/springboot/base/test/MnsTest.java @@ -0,0 +1,58 @@ +package com.yexuejc.springboot.base.test; + +import com.aliyun.mns.model.Message; +import com.yexuejc.base.util.JsonUtil; +import com.yexuejc.base.util.StrUtil; +import com.yexuejc.springboot.base.autoconfigure.MnsFacade; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +import java.util.HashMap; +import java.util.Map; + +/** + * @author maxf + * @version 1.0 + * @ClassName MnsTest + * @Description + * @date 2018/11/1 14:25 + */ +@RunWith(SpringRunner.class) +@SpringBootTest +public class MnsTest { + + @Autowired + MnsFacade mnsFacade; + + /** + * 发送MNS + */ + @Test + public void sendMms() { + Map map = new HashMap<>(); + map.put("id", StrUtil.genUUID()); + map.put("type", "shop"); + mnsFacade.sendMsg("SHOP", JsonUtil.obj2Json(map), 0); + } + + /** + * 取出消息->删除消息 + */ + public void get() { + Message msg = mnsFacade.popMsg("SHOP"); + if (msg == null) { + System.out.println("取出空消息"); + } + if (msg.getMessageBody() == null) { + System.out.println("取出消息无内容"); + //删除 + mnsFacade.deleteMsg("SHOP", msg); + } + Map map = JsonUtil.json2Obj(msg.getMessageBody(), Map.class); + System.out.println(String.format("取出消息:%s", JsonUtil.obj2Json(map))); + //操作完成后删除消息 + } +} diff --git a/yexuejc-springboot-base/src/test/java/com/yexuejc/springboot/base/test/OssTest.java b/yexuejc-springboot-base/src/test/java/com/yexuejc/springboot/base/test/OssTest.java new file mode 100644 index 0000000..b1250b4 --- /dev/null +++ b/yexuejc-springboot-base/src/test/java/com/yexuejc/springboot/base/test/OssTest.java @@ -0,0 +1,74 @@ +package com.yexuejc.springboot.base.test; + +import com.aliyun.oss.model.PutObjectResult; +import com.yexuejc.base.util.ImgUtil; +import com.yexuejc.base.util.StrUtil; +import com.yexuejc.springboot.base.autoconfigure.OssFacade; +import com.yexuejc.springboot.base.exception.ImageException; +import com.yexuejc.springboot.base.util.LogUtil; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; + +/** + * @author maxf + * @version 1.0 + * @ClassName OssTest + * @Description + * @date 2018/11/1 14:58 + */ +@RunWith(SpringRunner.class) +@SpringBootTest +public class OssTest { + @Autowired + OssFacade ossFacade; + + /** + * 上传图片到oss + *

+ * 这里是模拟微信登录时,获取到微信头像地址,缓存到base64,然后上传到OSS + *

+ */ + @Test + public void put(){ + putOss4Head(null, "https://avatar.csdn.net/7/8/1/3_wulex.jpg"); + } + + /** + * 上传网络头像至OSS + * + * @param url 网络图片地址 + * @return String 本OSS地址 + */ + public String putOss4Head(String name, String url) throws ImageException { + if (StrUtil.isEmpty(name)) { + name = StrUtil.genUUID(); + } + if (name.indexOf(".") == 0) { + throw new ImageException("图片名称第一个字符不能为."); + } + name = "head/" + name; + try { + LogUtil.bizLogger.info("[第三方登录/注册]上传头像开始:{}", url); + InputStream is = ImgUtil.getImageInputStreamFromUrl(url); + byte[] b = ImgUtil.getByteArray(is); + ImgUtil.ImageInfo imageInfo = ImgUtil.getImageInfoFromInputStream(b); + if (name.indexOf(".") < 0) { + name = name + "." + imageInfo.getType(); + } + PutObjectResult head = ossFacade.putObject(name, new ByteArrayInputStream(b)); + } catch (IOException e) { + LogUtil.bizLogger.error("[第三方登录/注册]读取网络头像为IO异常:{}", url); + e.printStackTrace(); + throw new ImageException("[第三方登录/注册]读取网络头像为IO异常:" + e.getMessage()); + } + LogUtil.bizLogger.info("[[第三方登录/注册]上传头像结束:{}", url); + return name; + } +} diff --git a/yexuejc-springboot-base/src/test/java/com/yexuejc/springboot/base/test/RedisTest.java b/yexuejc-springboot-base/src/test/java/com/yexuejc/springboot/base/test/RedisTest.java new file mode 100644 index 0000000..2d4ada4 --- /dev/null +++ b/yexuejc-springboot-base/src/test/java/com/yexuejc/springboot/base/test/RedisTest.java @@ -0,0 +1,108 @@ +package com.yexuejc.springboot.base.test; + +import com.yexuejc.base.util.JsonUtil; +import com.yexuejc.base.util.StrUtil; +import com.yexuejc.springboot.base.autoconfigure.MutiRedisAutoConfiguration; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.test.context.junit4.SpringRunner; + +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.TimeUnit; + +/** + * redis 操作 + * + * @author maxf + * @version 1.0 + * @ClassName RedisTest + * @Description + * @date 2018/11/1 11:16 + */ +@RunWith(SpringRunner.class) +@SpringBootTest +public class RedisTest { + /** + * 指向redis 0库 + */ + @Autowired + @Qualifier(MutiRedisAutoConfiguration.BEAN_REDIS_TEMPLATE0) + private RedisTemplate redisTemplate0; + + /** + * 保存用户登录信息 + * name:张三 + */ + @Test + public void save() { + redisTemplate0.afterPropertiesSet(); + redisTemplate0.opsForHash().put("login.user.userId1", "name", "张三"); + redisTemplate0.expire("login.user.userId1", 10, TimeUnit.MINUTES); + } + + /** + * 保存用户登录信息 + * name:张三 + * sex:男 + */ + @Test + public void save2() { + redisTemplate0.afterPropertiesSet(); + Map map = new HashMap<>(); + map.put("name", "张三"); + map.put("sex", "男"); + redisTemplate0.opsForHash().putAll("login.user.userId1", map); + redisTemplate0.expire("login.user.userId1", 10, TimeUnit.MINUTES); + } + + /** + * 保存授权zhangsan的token,过期时间10分钟 + */ + @Test + public void accessToken() { + redisTemplate0.afterPropertiesSet(); + redisTemplate0.opsForValue().append("zhangsan.access_token", StrUtil.genUUID()); + redisTemplate0.expire("zhangsan.access_token", 10, TimeUnit.MINUTES); + } + + + /** + * 获取用户登录信息 + * name:张三 + */ + @Test + public void get() { + redisTemplate0.afterPropertiesSet(); + String name = (String) redisTemplate0.opsForHash().get("login.user.userId1", "name"); + System.out.println(name); + } + + /** + * 修改用户登录信息 + * name:张三->李四 + * age:20 + */ + @Test + public void put() { + redisTemplate0.afterPropertiesSet(); + redisTemplate0.opsForHash().put("login.user.userId1", "name", "张三"); + redisTemplate0.opsForHash().put("login.user.userId1", "age", "20"); + Map map = (Map) redisTemplate0.opsForHash().entries("login.user.userId1"); + System.out.println(JsonUtil.obj2Json(map)); + } + + /** + * 删除 + */ + @Test + public void del() { + redisTemplate0.afterPropertiesSet(); + redisTemplate0.delete("login.user.userId1"); + } + +} diff --git a/yexuejc-springboot-base/src/test/resources/application.properties b/yexuejc-springboot-base/src/test/resources/application.properties index aa5b54b..74813f1 100644 --- a/yexuejc-springboot-base/src/test/resources/application.properties +++ b/yexuejc-springboot-base/src/test/resources/application.properties @@ -27,4 +27,22 @@ spring.http.encoding.enabled=true server.tomcat.uri-encoding=UTF-8 #是否开启HTTPS(SSL)请求证书验证忽略:默认false -yexuejc.enable.ssl-ignore=true \ No newline at end of file +yexuejc.enable.ssl-ignore=true + +#reids +spring.redis.host=121.42.165.89 +spring.redis.password= +spring.redis.port=16379 + + +#mns +yexuejc.alibaba.mns.access-key-id= +yexuejc.alibaba.mns.access-key-secret= +yexuejc.alibaba.mns.endpoint=http://1734411100610331.mns.cn-hangzhou.aliyuncs.com/ +yexuejc.alibaba.mns.queue-name-prefix=IVT-CONSUMER + +#OSS +yexuejc.alibaba.oss.endpoint=oss-cn-beijing.aliyuncs.com +yexuejc.alibaba.oss.access-key-secret= +yexuejc.alibaba.oss.access-key-id= +yexuejc.alibaba.oss.bucket=guansichou From ba02c871cccd60a04c30051f16a974e3220e478a Mon Sep 17 00:00:00 2001 From: maxf <1107047387@qq.com> Date: Thu, 1 Nov 2018 15:25:13 +0800 Subject: [PATCH 12/12] =?UTF-8?q?=E6=95=B4=E7=90=86=E9=9B=86=E6=88=90?= =?UTF-8?q?=E6=96=87=E6=A1=A3=EF=BC=8C=E6=9C=AA=E5=8F=91=E5=B8=83=E7=89=88?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/MNS.md | 2 +- doc/OSS.md | 2 +- doc/REDIS.md | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/MNS.md b/doc/MNS.md index bf92e93..0e22465 100644 --- a/doc/MNS.md +++ b/doc/MNS.md @@ -20,7 +20,7 @@ aliyun MNS 消息队列 使用指南 ``` -> 配置 +> 配置 application.properties ``` #mns yexuejc.alibaba.mns.access-key-id=阿里MNS提供的AccessKey diff --git a/doc/OSS.md b/doc/OSS.md index b44de34..7e9719b 100644 --- a/doc/OSS.md +++ b/doc/OSS.md @@ -22,7 +22,7 @@ _本工程暂提供上传功能_ ``` > 配置 -``` +``` application.properties #OSS yexuejc.alibaba.oss.endpoint=阿里OSS提供的endpoint yexuejc.alibaba.oss.access-key-secret=阿里OSS提供的SecretKey diff --git a/doc/REDIS.md b/doc/REDIS.md index efd5836..31ecaa5 100644 --- a/doc/REDIS.md +++ b/doc/REDIS.md @@ -17,8 +17,8 @@ redis 使用指南 ``` -> 配置 -``` +> 配置 application.properties +``` #reids spring.redis.host=你的reids地址 spring.redis.password=密码