From 257c7cc0974babca79b63aa93e2a9707238f91c7 Mon Sep 17 00:00:00 2001 From: YuCheng Hu Date: Wed, 11 Jan 2023 11:41:27 -0500 Subject: [PATCH] Update wechat official-account spring demo project --- .idea/.gitignore | 8 + .idea/compiler.xml | 18 + .idea/encodings.xml | 7 + .idea/inspectionProfiles/Project_Default.xml | 1831 +++++++++++++++++ .idea/jarRepositories.xml | 30 + .idea/misc.xml | 15 + .idea/vcs.xml | 6 + README.md | 47 + pom.xml | 76 + .../mp/config/WxMpAutoConfiguration.java | 17 + .../config/WxMpServiceAutoConfiguration.java | 63 + .../config/WxMpStorageAutoConfiguration.java | 160 ++ .../wxjava/mp/enums/HttpClientType.java | 22 + .../starter/wxjava/mp/enums/StorageType.java | 26 + .../wxjava/mp/properties/HostConfig.java | 18 + .../wxjava/mp/properties/RedisProperties.java | 56 + .../wxjava/mp/properties/WxMpProperties.java | 101 + src/main/resources/META-INF/spring.factories | 1 + ...ot.autoconfigure.AutoConfiguration.imports | 1 + 19 files changed, 2503 insertions(+) create mode 100644 .idea/.gitignore create mode 100644 .idea/compiler.xml create mode 100644 .idea/encodings.xml create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 .idea/jarRepositories.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/vcs.xml create mode 100644 README.md create mode 100644 pom.xml create mode 100644 src/main/java/com/binarywang/spring/starter/wxjava/mp/config/WxMpAutoConfiguration.java create mode 100644 src/main/java/com/binarywang/spring/starter/wxjava/mp/config/WxMpServiceAutoConfiguration.java create mode 100644 src/main/java/com/binarywang/spring/starter/wxjava/mp/config/WxMpStorageAutoConfiguration.java create mode 100644 src/main/java/com/binarywang/spring/starter/wxjava/mp/enums/HttpClientType.java create mode 100644 src/main/java/com/binarywang/spring/starter/wxjava/mp/enums/StorageType.java create mode 100644 src/main/java/com/binarywang/spring/starter/wxjava/mp/properties/HostConfig.java create mode 100644 src/main/java/com/binarywang/spring/starter/wxjava/mp/properties/RedisProperties.java create mode 100644 src/main/java/com/binarywang/spring/starter/wxjava/mp/properties/WxMpProperties.java create mode 100644 src/main/resources/META-INF/spring.factories create mode 100644 src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..95fea85 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..aa00ffa --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..cbadba3 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,1831 @@ + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..80db3f4 --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..9090357 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,15 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..81a0754 --- /dev/null +++ b/README.md @@ -0,0 +1,47 @@ +# wx-java-mp-spring-boot-starter +## 快速开始 +1. 引入依赖 + ```xml + + com.github.binarywang + wx-java-mp-spring-boot-starter + ${version} + + ``` +2. 添加配置(application.properties) + ```properties + # 公众号配置(必填) + wx.mp.appId = appId + wx.mp.secret = @secret + wx.mp.token = @token + wx.mp.aesKey = @aesKey + # 存储配置redis(可选) + wx.mp.config-storage.type = Jedis # 配置类型: Memory(默认), Jedis, RedisTemplate + wx.mp.config-storage.key-prefix = wx # 相关redis前缀配置: wx(默认) + wx.mp.config-storage.redis.host = 127.0.0.1 + wx.mp.config-storage.redis.port = 6379 + #单机和sentinel同时存在时,优先使用sentinel配置 + #wx.mp.config-storage.redis.sentinel-ips=127.0.0.1:16379,127.0.0.1:26379 + #wx.mp.config-storage.redis.sentinel-name=mymaster + # http客户端配置 + wx.mp.config-storage.http-client-type=httpclient # http客户端类型: HttpClient(默认), OkHttp, JoddHttp + wx.mp.config-storage.http-proxy-host= + wx.mp.config-storage.http-proxy-port= + wx.mp.config-storage.http-proxy-username= + wx.mp.config-storage.http-proxy-password= + # 公众号地址host配置 + #wx.mp.hosts.api-host=http://proxy.com/ + #wx.mp.hosts.open-host=http://proxy.com/ + #wx.mp.hosts.mp-host=http://proxy.com/ + ``` +3. 自动注入的类型 +- `WxMpService` +- `WxMpConfigStorage` + +4、参考demo: +https://github.com/binarywang/wx-java-mp-demo + + + + + diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..eaa51fa --- /dev/null +++ b/pom.xml @@ -0,0 +1,76 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 2.7.5 + + + com.ossez.wechat + wechat-official-account-spring + 0.0.1-SNAPSHOT + WeChat Official Account Spring Demo + WeChat Official Account Demo Example + + + The MIT license + https://opensource.org/licenses/mit-license.php + repo + + + + + YuCheng Hu + honeymoose + huyuchengus@gmail.com + -5 + Open Source + + Sr. Java Developer + + + + + + + com.ossez.wechat + wechat-j-mp + 0.0.1-SNAPSHOT + + + redis.clients + jedis + compile + + + org.springframework.data + spring-data-redis + provided + + + com.squareup.okhttp3 + okhttp + provided + + + + + + org.apache.maven.plugins + maven-source-plugin + 2.2.1 + + + attach-sources + + jar-no-fork + + + + + + + diff --git a/src/main/java/com/binarywang/spring/starter/wxjava/mp/config/WxMpAutoConfiguration.java b/src/main/java/com/binarywang/spring/starter/wxjava/mp/config/WxMpAutoConfiguration.java new file mode 100644 index 0000000..b2e3848 --- /dev/null +++ b/src/main/java/com/binarywang/spring/starter/wxjava/mp/config/WxMpAutoConfiguration.java @@ -0,0 +1,17 @@ +package com.binarywang.spring.starter.wxjava.mp.config; + +import com.binarywang.spring.starter.wxjava.mp.properties.WxMpProperties; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; + +/** + * . + * + * @author someone + */ +@Configuration +@EnableConfigurationProperties(WxMpProperties.class) +@Import({ WxMpStorageAutoConfiguration.class, WxMpServiceAutoConfiguration.class }) +public class WxMpAutoConfiguration { +} diff --git a/src/main/java/com/binarywang/spring/starter/wxjava/mp/config/WxMpServiceAutoConfiguration.java b/src/main/java/com/binarywang/spring/starter/wxjava/mp/config/WxMpServiceAutoConfiguration.java new file mode 100644 index 0000000..3b8733c --- /dev/null +++ b/src/main/java/com/binarywang/spring/starter/wxjava/mp/config/WxMpServiceAutoConfiguration.java @@ -0,0 +1,63 @@ +package com.binarywang.spring.starter.wxjava.mp.config; + +import com.binarywang.spring.starter.wxjava.mp.enums.HttpClientType; +import com.binarywang.spring.starter.wxjava.mp.properties.WxMpProperties; +import me.chanjar.weixin.mp.api.WxMpService; +import me.chanjar.weixin.mp.api.impl.WxMpServiceHttpClientImpl; +import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl; +import me.chanjar.weixin.mp.api.impl.WxMpServiceJoddHttpImpl; +import me.chanjar.weixin.mp.api.impl.WxMpServiceOkHttpImpl; +import me.chanjar.weixin.mp.config.WxMpConfigStorage; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * 微信公众号相关服务自动注册. + * + * @author someone + */ +@Configuration +public class WxMpServiceAutoConfiguration { + + @Bean + @ConditionalOnMissingBean + public WxMpService wxMpService(WxMpConfigStorage configStorage, WxMpProperties wxMpProperties) { + HttpClientType httpClientType = wxMpProperties.getConfigStorage().getHttpClientType(); + WxMpService wxMpService; + switch (httpClientType) { + case OkHttp: + wxMpService = newWxMpServiceOkHttpImpl(); + break; + case JoddHttp: + wxMpService = newWxMpServiceJoddHttpImpl(); + break; + case HttpClient: + wxMpService = newWxMpServiceHttpClientImpl(); + break; + default: + wxMpService = newWxMpServiceImpl(); + break; + } + + wxMpService.setWxMpConfigStorage(configStorage); + return wxMpService; + } + + private WxMpService newWxMpServiceImpl() { + return new WxMpServiceImpl(); + } + + private WxMpService newWxMpServiceHttpClientImpl() { + return new WxMpServiceHttpClientImpl(); + } + + private WxMpService newWxMpServiceOkHttpImpl() { + return new WxMpServiceOkHttpImpl(); + } + + private WxMpService newWxMpServiceJoddHttpImpl() { + return new WxMpServiceJoddHttpImpl(); + } + +} diff --git a/src/main/java/com/binarywang/spring/starter/wxjava/mp/config/WxMpStorageAutoConfiguration.java b/src/main/java/com/binarywang/spring/starter/wxjava/mp/config/WxMpStorageAutoConfiguration.java new file mode 100644 index 0000000..cf3c486 --- /dev/null +++ b/src/main/java/com/binarywang/spring/starter/wxjava/mp/config/WxMpStorageAutoConfiguration.java @@ -0,0 +1,160 @@ +package com.binarywang.spring.starter.wxjava.mp.config; + +import com.binarywang.spring.starter.wxjava.mp.enums.StorageType; +import com.binarywang.spring.starter.wxjava.mp.properties.RedisProperties; +import com.binarywang.spring.starter.wxjava.mp.properties.WxMpProperties; +import com.google.common.collect.Sets; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import me.chanjar.weixin.common.redis.JedisWxRedisOps; +import me.chanjar.weixin.common.redis.RedisTemplateWxRedisOps; +import me.chanjar.weixin.common.redis.WxRedisOps; +import me.chanjar.weixin.mp.config.WxMpHostConfig; +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.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Value; +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 org.springframework.data.redis.core.StringRedisTemplate; +import redis.clients.jedis.JedisPool; +import redis.clients.jedis.JedisPoolAbstract; +import redis.clients.jedis.JedisPoolConfig; +import redis.clients.jedis.JedisSentinelPool; + +import java.util.Set; + +/** + * 微信公众号存储策略自动配置. + * + * @author Luo + */ +@Slf4j +@Configuration +@RequiredArgsConstructor +public class WxMpStorageAutoConfiguration { + private final ApplicationContext applicationContext; + + private final WxMpProperties wxMpProperties; + + @Bean + @ConditionalOnMissingBean(WxMpConfigStorage.class) + public WxMpConfigStorage wxMpConfigStorage() { + StorageType type = wxMpProperties.getConfigStorage().getType(); + WxMpConfigStorage config; + switch (type) { + case Jedis: + config = jedisConfigStorage(); + break; + case RedisTemplate: + config = redisTemplateConfigStorage(); + break; + default: + config = defaultConfigStorage(); + break; + } + // wx host config + if (null != wxMpProperties.getHosts() && StringUtils.isNotEmpty(wxMpProperties.getHosts().getApiHost())) { + WxMpHostConfig hostConfig = new WxMpHostConfig(); + hostConfig.setApiHost(wxMpProperties.getHosts().getApiHost()); + hostConfig.setMpHost(wxMpProperties.getHosts().getMpHost()); + hostConfig.setOpenHost(wxMpProperties.getHosts().getOpenHost()); + config.setHostConfig(hostConfig); + } + return config; + } + + private WxMpConfigStorage defaultConfigStorage() { + WxMpDefaultConfigImpl config = new WxMpDefaultConfigImpl(); + setWxMpInfo(config); + return config; + } + + private WxMpConfigStorage jedisConfigStorage() { + JedisPoolAbstract jedisPool; + if (wxMpProperties.getConfigStorage() != null && wxMpProperties.getConfigStorage().getRedis() != null + && StringUtils.isNotEmpty(wxMpProperties.getConfigStorage().getRedis().getHost())) { + jedisPool = getJedisPool(); + } else { + jedisPool = applicationContext.getBean(JedisPool.class); + } + WxRedisOps redisOps = new JedisWxRedisOps(jedisPool); + WxMpRedisConfigImpl wxMpRedisConfig = new WxMpRedisConfigImpl(redisOps, + wxMpProperties.getConfigStorage().getKeyPrefix()); + setWxMpInfo(wxMpRedisConfig); + return wxMpRedisConfig; + } + + private WxMpConfigStorage redisTemplateConfigStorage() { + StringRedisTemplate redisTemplate = null; + try { + redisTemplate = applicationContext.getBean(StringRedisTemplate.class); + } catch (Exception e) { + log.error(e.getMessage(), e); + } + try { + if (null == redisTemplate) { + redisTemplate = (StringRedisTemplate) applicationContext.getBean("stringRedisTemplate"); + } + } catch (Exception e) { + log.error(e.getMessage(), e); + } + + if (null == redisTemplate) { + redisTemplate = (StringRedisTemplate) applicationContext.getBean("redisTemplate"); + } + + WxRedisOps redisOps = new RedisTemplateWxRedisOps(redisTemplate); + WxMpRedisConfigImpl wxMpRedisConfig = new WxMpRedisConfigImpl(redisOps, + wxMpProperties.getConfigStorage().getKeyPrefix()); + + setWxMpInfo(wxMpRedisConfig); + return wxMpRedisConfig; + } + + private void setWxMpInfo(WxMpDefaultConfigImpl config) { + WxMpProperties properties = wxMpProperties; + WxMpProperties.ConfigStorage configStorageProperties = properties.getConfigStorage(); + config.setAppId(properties.getAppId()); + config.setSecret(properties.getSecret()); + config.setToken(properties.getToken()); + config.setAesKey(properties.getAesKey()); + + config.setHttpProxyHost(configStorageProperties.getHttpProxyHost()); + config.setHttpProxyUsername(configStorageProperties.getHttpProxyUsername()); + config.setHttpProxyPassword(configStorageProperties.getHttpProxyPassword()); + if (configStorageProperties.getHttpProxyPort() != null) { + config.setHttpProxyPort(configStorageProperties.getHttpProxyPort()); + } + } + + private JedisPoolAbstract getJedisPool() { + RedisProperties redis = wxMpProperties.getConfigStorage().getRedis(); + + JedisPoolConfig config = new JedisPoolConfig(); + if (redis.getMaxActive() != null) { + config.setMaxTotal(redis.getMaxActive()); + } + if (redis.getMaxIdle() != null) { + config.setMaxIdle(redis.getMaxIdle()); + } + if (redis.getMaxWaitMillis() != null) { + config.setMaxWaitMillis(redis.getMaxWaitMillis()); + } + if (redis.getMinIdle() != null) { + config.setMinIdle(redis.getMinIdle()); + } + config.setTestOnBorrow(true); + config.setTestWhileIdle(true); + if (StringUtils.isNotEmpty(redis.getSentinelIps())) { + Set sentinels = Sets.newHashSet(redis.getSentinelIps().split(",")); + return new JedisSentinelPool(redis.getSentinelName(), sentinels); + } + + return new JedisPool(config, redis.getHost(), redis.getPort(), redis.getTimeout(), redis.getPassword(), + redis.getDatabase()); + } +} diff --git a/src/main/java/com/binarywang/spring/starter/wxjava/mp/enums/HttpClientType.java b/src/main/java/com/binarywang/spring/starter/wxjava/mp/enums/HttpClientType.java new file mode 100644 index 0000000..f67ef97 --- /dev/null +++ b/src/main/java/com/binarywang/spring/starter/wxjava/mp/enums/HttpClientType.java @@ -0,0 +1,22 @@ +package com.binarywang.spring.starter.wxjava.mp.enums; + +/** + * httpclient类型. + * + * @author Binary Wang + * created on 2020-08-30 + */ +public enum HttpClientType { + /** + * HttpClient. + */ + HttpClient, + /** + * OkHttp. + */ + OkHttp, + /** + * JoddHttp. + */ + JoddHttp, +} diff --git a/src/main/java/com/binarywang/spring/starter/wxjava/mp/enums/StorageType.java b/src/main/java/com/binarywang/spring/starter/wxjava/mp/enums/StorageType.java new file mode 100644 index 0000000..05ed6ce --- /dev/null +++ b/src/main/java/com/binarywang/spring/starter/wxjava/mp/enums/StorageType.java @@ -0,0 +1,26 @@ +package com.binarywang.spring.starter.wxjava.mp.enums; + +/** + * storage类型. + * + * @author Binary Wang + * created on 2020-08-30 + */ +public enum StorageType { + /** + * 内存. + */ + Memory, + /** + * redis(JedisClient). + */ + Jedis, + /** + * redis(Redisson). + */ + Redisson, + /** + * redis(RedisTemplate). + */ + RedisTemplate +} diff --git a/src/main/java/com/binarywang/spring/starter/wxjava/mp/properties/HostConfig.java b/src/main/java/com/binarywang/spring/starter/wxjava/mp/properties/HostConfig.java new file mode 100644 index 0000000..b8c0f15 --- /dev/null +++ b/src/main/java/com/binarywang/spring/starter/wxjava/mp/properties/HostConfig.java @@ -0,0 +1,18 @@ +package com.binarywang.spring.starter.wxjava.mp.properties; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class HostConfig implements Serializable { + + private static final long serialVersionUID = -4172767630740346001L; + + private String apiHost; + + private String openHost; + + private String mpHost; + +} diff --git a/src/main/java/com/binarywang/spring/starter/wxjava/mp/properties/RedisProperties.java b/src/main/java/com/binarywang/spring/starter/wxjava/mp/properties/RedisProperties.java new file mode 100644 index 0000000..573c876 --- /dev/null +++ b/src/main/java/com/binarywang/spring/starter/wxjava/mp/properties/RedisProperties.java @@ -0,0 +1,56 @@ +package com.binarywang.spring.starter.wxjava.mp.properties; + +import lombok.Data; + +import java.io.Serializable; + +/** + * redis 配置属性. + * + * @author Binary Wang + * created on 2020-08-30 + */ +@Data +public class RedisProperties implements Serializable { + private static final long serialVersionUID = -5924815351660074401L; + + /** + * 主机地址. + */ + private String host = "127.0.0.1"; + + /** + * 端口号. + */ + private int port = 6379; + + /** + * 密码. + */ + private String password; + + /** + * 超时. + */ + private int timeout = 2000; + + /** + * 数据库. + */ + private int database = 0; + + /** + * sentinel ips + */ + private String sentinelIps; + + /** + * sentinel name + */ + private String sentinelName; + + private Integer maxActive; + private Integer maxIdle; + private Integer maxWaitMillis; + private Integer minIdle; +} diff --git a/src/main/java/com/binarywang/spring/starter/wxjava/mp/properties/WxMpProperties.java b/src/main/java/com/binarywang/spring/starter/wxjava/mp/properties/WxMpProperties.java new file mode 100644 index 0000000..89d0e66 --- /dev/null +++ b/src/main/java/com/binarywang/spring/starter/wxjava/mp/properties/WxMpProperties.java @@ -0,0 +1,101 @@ +package com.binarywang.spring.starter.wxjava.mp.properties; + +import com.binarywang.spring.starter.wxjava.mp.enums.HttpClientType; +import com.binarywang.spring.starter.wxjava.mp.enums.StorageType; +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.context.properties.NestedConfigurationProperty; + +import java.io.Serializable; + +import static com.binarywang.spring.starter.wxjava.mp.enums.StorageType.Memory; +import static com.binarywang.spring.starter.wxjava.mp.properties.WxMpProperties.PREFIX; + +/** + * 微信接入相关配置属性. + * + * @author someone + */ +@Data +@ConfigurationProperties(PREFIX) +public class WxMpProperties { + public static final String PREFIX = "wx.mp"; + + /** + * 设置微信公众号的appid. + */ + private String appId; + + /** + * 设置微信公众号的app secret. + */ + private String secret; + + /** + * 设置微信公众号的token. + */ + private String token; + + /** + * 设置微信公众号的EncodingAESKey. + */ + private String aesKey; + + /** + * 自定义host配置 + */ + private HostConfig hosts; + + /** + * 存储策略 + */ + private final ConfigStorage configStorage = new ConfigStorage(); + + @Data + public static class ConfigStorage implements Serializable { + private static final long serialVersionUID = 4815731027000065434L; + + /** + * 存储类型. + */ + private StorageType type = Memory; + + /** + * 指定key前缀. + */ + private String keyPrefix = "wx"; + + /** + * redis连接配置. + */ + @NestedConfigurationProperty + private final RedisProperties redis = new RedisProperties(); + + /** + * http客户端类型. + */ + private HttpClientType httpClientType = HttpClientType.HttpClient; + + /** + * http代理主机. + */ + private String httpProxyHost; + + /** + * http代理端口. + */ + private Integer httpProxyPort; + + /** + * http代理用户名. + */ + private String httpProxyUsername; + + /** + * http代理密码. + */ + private String httpProxyPassword; + + } + +} diff --git a/src/main/resources/META-INF/spring.factories b/src/main/resources/META-INF/spring.factories new file mode 100644 index 0000000..6634593 --- /dev/null +++ b/src/main/resources/META-INF/spring.factories @@ -0,0 +1 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.binarywang.spring.starter.wxjava.mp.config.WxMpAutoConfiguration diff --git a/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 0000000..cdffb05 --- /dev/null +++ b/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1 @@ +com.binarywang.spring.starter.wxjava.mp.config.WxMpAutoConfiguration