Browse Source

:art: #1437 公众号spring boot starter模块优化,不强制依赖redission

 不强制依赖redission,直接项目中排除redisson会cnfe,参考方案
miemieYaho 5 years ago
parent
commit
e761174270

+ 1 - 0
spring-boot-starters/wx-java-mp-spring-boot-starter/pom.xml

@@ -28,6 +28,7 @@
       <groupId>org.redisson</groupId>
       <artifactId>redisson</artifactId>
       <scope>compile</scope>
+      <optional>true</optional>
     </dependency>
   </dependencies>
 

+ 26 - 17
spring-boot-starters/wx-java-mp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/mp/config/WxMpStorageAutoConfiguration.java

@@ -6,9 +6,8 @@ import lombok.RequiredArgsConstructor;
 import me.chanjar.weixin.mp.config.WxMpConfigStorage;
 import me.chanjar.weixin.mp.config.impl.WxMpDefaultConfigImpl;
 import me.chanjar.weixin.mp.config.impl.WxMpRedisConfigImpl;
-import org.redisson.api.RedissonClient;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.context.ApplicationContext;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import redis.clients.jedis.JedisPool;
@@ -22,13 +21,9 @@ import redis.clients.jedis.JedisPoolConfig;
 @Configuration
 @RequiredArgsConstructor
 public class WxMpStorageAutoConfiguration {
-  private final WxMpProperties properties;
-
-  @Autowired(required = false)
-  private JedisPool jedisPool;
 
-  @Autowired(required = false)
-  private RedissonClient redissonClient;
+  private final WxMpProperties properties;
+  private final ApplicationContext applicationContext;
 
   @Bean
   @ConditionalOnMissingBean(WxMpConfigStorage.class)
@@ -49,13 +44,21 @@ public class WxMpStorageAutoConfiguration {
   }
 
   private WxMpRedisConfigImpl getWxMpInRedisConfigStorage() {
-    JedisPool poolToUse = jedisPool;
-    if (poolToUse == null) {
-      poolToUse = getJedisPool();
+    RedisProperties.ImplType implType = properties.getConfigStorage().getRedis().getImpl();
+    boolean reuseBean = properties.getConfigStorage().getRedis().isReuseBean();
+    if (implType == RedisProperties.ImplType.jedis) {
+      JedisPool pool = null;
+      if (reuseBean) {
+        pool = getBean(JedisPool.class);
+      }
+      if (pool == null) {
+        pool = getJedisPool();
+      }
+      WxMpRedisConfigImpl config = new WxMpRedisConfigImpl(pool);
+      setWxMpInfo(config);
+      return config;
     }
-    WxMpRedisConfigImpl config = new WxMpRedisConfigImpl(poolToUse);
-    setWxMpInfo(config);
-    return config;
+    throw new UnsupportedOperationException();
   }
 
   private void setWxMpInfo(WxMpDefaultConfigImpl config) {
@@ -85,8 +88,14 @@ public class WxMpStorageAutoConfiguration {
     config.setTestOnBorrow(true);
     config.setTestWhileIdle(true);
 
-    JedisPool pool = new JedisPool(config, redis.getHost(), redis.getPort(),
-      redis.getTimeout(), redis.getPassword(), redis.getDatabase());
-    return pool;
+    return new JedisPool(config, redis.getHost(), redis.getPort(), redis.getTimeout(), redis.getPassword(),
+      redis.getDatabase());
+  }
+
+  private <T> T getBean(Class<T> clazz) {
+    if (this.applicationContext.getBeanNamesForType(clazz, false, false).length > 0) {
+      return this.applicationContext.getBean(clazz);
+    }
+    return null;
   }
 }

+ 21 - 0
spring-boot-starters/wx-java-mp-spring-boot-starter/src/main/java/com/binarywang/spring/starter/wxjava/mp/properties/RedisProperties.java

@@ -14,6 +14,16 @@ public class RedisProperties implements Serializable {
   private static final long serialVersionUID = -5924815351660074401L;
 
   /**
+   * 操作Redis的实现
+   */
+  private ImplType impl = ImplType.jedis;
+
+  /**
+   * 操作Redis的实现如果在spring容器里是否直接使用
+   */
+  private boolean reuseBean = true;
+
+  /**
    * 主机地址.
    */
   private String host = "127.0.0.1";
@@ -42,4 +52,15 @@ public class RedisProperties implements Serializable {
   private Integer maxIdle;
   private Integer maxWaitMillis;
   private Integer minIdle;
+
+  public enum ImplType {
+    /**
+     * jedis.
+     */
+    jedis,
+    /**
+     * redisson.
+     */
+//    redisson
+  }
 }