更新测试代码

This commit is contained in:
yexuejc 2019-07-27 11:26:48 +08:00
parent 32f5528047
commit 8e39507e18
9 changed files with 90 additions and 223 deletions

View File

@ -1,9 +1,8 @@
# yexuejc-springboot
### 说明
>基于springboot版本分别维护1.x(对应springboot1.5.16.RELEASE) 2.x(对应springboot2.0.5.RELEASE) 分支 <br>
>master将继续同步1.x分支后期获取会同步于2.x
>本分支基于 springboot 2.x 开发版本号也将保持2.x
>1.x分支继续基于 springboot 1.x开发
#### 项目介绍
基于springboot maven 封装可继承基础工程
@ -13,8 +12,8 @@ parent版本封装<br/>
base:功能封装
#### 最新版本
* yexuejc.springboot.version=1.2.1 <br>
* yexuejc.base.version=1.3.9
>yexuejc.springboot.version=2.0.5 <br>
>yexuejc.base.version=1.3.9
pom.xml
```

View File

@ -1,77 +1,70 @@
yexuejc-springboot 更新内容
-------------------
#### version 1.2.1
**time2019-7-27 09:39:24** <br/>
#### version 2.1.0
**time2019-7-24 18:30:49** <br/>
**branch** master <br/>
**关联工程:** <br/>
```
springboot-base:1.3.9
spring-boot-starter-parent:1.5.16.RELEASE
spring-boot-starter-parent:2.0.5.RELEASE
```
**update** <br/>
1. 所有自动装配增加开关,默认不装配。装配方式请参考[本项目自动装配开关](doc/plugin/AutoConfigure.md)
#
#### version 1.2.0
**time2018-12-1 12:19:06** <br/>
#### version 2.0.6
**time2019年4月2日21:08:453** <br/>
**branch** master <br/>
**关联工程:** <br/>
```
springboot-base:1.3.9
spring-boot-starter-parent:2.0.5.RELEASE
```
**update** <br/>
1. 升级依赖
2. 出入参加密 ParamsRequestBodyAdvice/ParamsResponseBodyAdvice 增加开关(默认关)
#
#### version 2.0.5
**time2018-12-1 12:27:10** <br/>
**branch** master <br/>
**关联工程:** <br/>
```
springboot-base:1.2.4
spring-boot-starter-parent:1.5.16.RELEASE
spring-boot-starter-parent:2.0.5.RELEASE
```
**update** <br/>
1. security多方登录第一个稳定版<br/>
支持账号登录、短信登录、第三方授权openid登录<br/>
功能链接[security重构-多方登录](doc/SECURITY.md)
#
#### version 1.1.6-1.1.9
**time2018-11-21 15:03:01** <br/>
#
#### version 2.0.3
**time2018-11-9 16:58:06** <br/>
**branch** master <br/>
**关联工程:** <br/>
```
springboot-base:1.2.1
spring-boot-starter-parent:1.5.16.RELEASE
```
**update** <br/>
1. security 登录开放处理
#
#### version 1.1.5
**time2018年11月20日20:26:06** <br/>
**branch** master <br/>
**关联工程:** <br/>
```
springboot-base:1.2.1
spring-boot-starter-parent:1.5.16.RELEASE
```
**update** <br/>
1. 修复security登录
#
#### version 1.1.4
**time2018-11-9 16:55:53** <br/>
**branch** master <br/>
**关联工程:** <br/>
```
springboot-base:1.2.1
spring-boot-starter-parent:1.5.16.RELEASE
spring-boot-starter-parent:2.0.5.RELEASE
```
**update** <br/>
1. 集成springboot security 多方登录
2. 文档拆分
#
#### version 1.1.3
**time2018-10-27 16:40:36** <br/>
#### version 2.0.2
**time2018-10-27 16:42:08** <br/>
**branch** master <br/>
**关联工程:** <br/>
```
springboot-base:1.2.0
spring-boot-starter-parent:1.5.16.RELEASE
spring-boot-starter-parent:2.0.5.RELEASE
```
**update** <br/>
1. 日志优化,按天切割日志<br>
@ -93,28 +86,29 @@ logging.path=/logs/yexuejc-springboot-parent
```
#
#### version 1.1.2
**time2018-9-28 15:23:32** <br/>
**branch** master <br/>
#### version 2.0.1
**time2018-9-28 15:25:30** <br/>
**branch** 2.x <br/>
**关联工程:** <br/>
```
springboot-base:1.1.9
spring-boot-starter-parent:1.5.16.RELEASE
spring-boot-starter-parent:2.0.5.RELEASE
```
**update** <br/>
1. 新增声明包
#
#### version 1.1.1
**time2018-9-26 17:00:38** <br/>
**branch** master <br/>
#### version 2.0.0
**time2018-9-26 16:55:00** <br/>
**branch** 2.x <br/>
**关联工程:** <br/>
```
springboot-base:1.1.9
spring-boot-starter-parent:1.5.16.RELEASE
spring-boot-starter-parent:2.0.5.RELEASE
```
**update** <br/>
1. 升级依赖
2. 2.x分支将基于springboot 2.x 开发
#
#### version 1.1.0

View File

@ -9,8 +9,7 @@
### 内部集成
#
* 1.2.1 项目所集成的插件都增加开关-默认关闭,升级版本请阅读[第三方集成具体使用](plugin/AutoConfigure.md)
* [1.1.4新增 集成security登录](SECURITY.md)
* [(2.0.3-2.0.5)新增 集成security多方登录](SECURITY.md)
单独使用例子工程:[https://github.com/yexuejc/springboot-security-login-simple](https://github.com/yexuejc/springboot-security-login-simple)
* [1.0.6新增 针对API请求安全解决方案](PARAMS_RSA_DECRYPT_ENCRYPT.md)<br/>
* [1.0.6新增 加密功能](PARAMS_RSA_DECRYPT_ENCRYPT.md)

16
pom.xml
View File

@ -5,7 +5,7 @@
<groupId>com.yexuejc.springboot</groupId>
<artifactId>yexuejc-springboot-parent</artifactId>
<version>1.2.1</version>
<version>2.1.0</version>
<packaging>pom</packaging>
<name>${project.artifactId}</name>
@ -15,10 +15,16 @@
<!-- spring boot父级,包含了统一版本管理,统一插件管理等 -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.16.RELEASE</version>
<!-- <relativePath/> lookup parent from repository -->
<version>2.0.5.RELEASE</version>
<!--<relativePath/>-->
<!--lookup parent from repository-->
</parent>
<modules>
<module>yexuejc-springboot-base</module>
</modules>
<properties>
<yexuejc.base.version>1.3.9</yexuejc.base.version>
<repos.yexuejc.url>https://nexus.yexuejc.club/repository/</repos.yexuejc.url>
@ -304,8 +310,4 @@
</snapshotRepository>
</distributionManagement>
<modules>
<module>yexuejc-springboot-base</module>
<module>yexuejc-springboot-example</module>
</modules>
</project>

View File

@ -9,9 +9,9 @@
<parent>
<groupId>com.yexuejc.springboot</groupId>
<artifactId>yexuejc-springboot-parent</artifactId>
<version>1.2.1</version>
<version>2.1.0</version>
<!-- 本地打包:使用相对关联路径 -->
<!--<relativePath>../../yexuejc</relativePath>-->
<!--<relativePath>../</relativePath>-->
</parent>
<name>${project.artifactId}</name>

View File

@ -1,22 +1,19 @@
package com.yexuejc.springboot.base.autoconfigure;
import org.apache.commons.pool2.impl.GenericObjectPool;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.autoconfigure.data.redis.RedisProperties;
import org.springframework.boot.autoconfigure.data.redis.RedisProperties.Cluster;
import org.springframework.boot.autoconfigure.data.redis.RedisProperties.Sentinel;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.annotation.Order;
import org.springframework.data.redis.connection.RedisClusterConfiguration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.RedisNode;
import org.springframework.data.redis.connection.RedisSentinelConfiguration;
import org.springframework.data.redis.connection.RedisPassword;
import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
import org.springframework.data.redis.connection.jedis.JedisClientConfiguration;
import org.springframework.data.redis.connection.jedis.JedisConnection;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisOperations;
@ -24,25 +21,17 @@ import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.util.Assert;
import org.springframework.util.StringUtils;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPoolConfig;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.List;
/**
* 对redis 多个databasse封装
* 多个database配置
*
* @author maxf
* @version 1.0
* @ClassName MutiRedisAutoConfiguration
* @PackageName com.yexuejc.springboot.base.autoconfigure
* @Description
* @date 2018/11/1 10:31
* @date 2018/9/26 15:27
*/
@Configuration
@ConditionalOnClass({JedisConnection.class, RedisOperations.class, Jedis.class})
@ -50,7 +39,6 @@ import java.util.List;
@Order(1)
@ConditionalOnProperty(name = "yexuejc.autoconfigure.redis.enable", matchIfMissing = false)
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";
@ -83,207 +71,94 @@ public class MutiRedisAutoConfiguration {
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 {
private final RedisProperties properties;
private final RedisSentinelConfiguration sentinelConfiguration;
private final RedisClusterConfiguration clusterConfiguration;
public RedisConnectionConfiguration(RedisProperties properties,
ObjectProvider<RedisSentinelConfiguration> sentinelConfiguration,
ObjectProvider<RedisClusterConfiguration> clusterConfiguration) {
public RedisConnectionConfiguration(RedisProperties properties) {
this.properties = properties;
this.sentinelConfiguration = sentinelConfiguration.getIfAvailable();
this.clusterConfiguration = clusterConfiguration.getIfAvailable();
}
@Primary
@Bean(BEAN_REDIS_FACTORY0)
@ConditionalOnProperty(name = "yexuejc.redis.db0", matchIfMissing = true)
public JedisConnectionFactory redisConnectionFactory0() throws UnknownHostException {
return applyProperties(createJedisConnectionFactory(), 0);
return createJedisConnectionFactory(0);
}
@Bean(BEAN_REDIS_FACTORY1)
@ConditionalOnProperty(name = "yexuejc.redis.db1")
public JedisConnectionFactory redisConnectionFactory1() throws UnknownHostException {
return applyProperties(createJedisConnectionFactory(), 1);
return createJedisConnectionFactory(1);
}
@Bean(BEAN_REDIS_FACTORY2)
@ConditionalOnProperty(name = "yexuejc.redis.db2")
public JedisConnectionFactory redisConnectionFactory2() throws UnknownHostException {
return applyProperties(createJedisConnectionFactory(), 2);
return createJedisConnectionFactory(2);
}
@Bean(BEAN_REDIS_FACTORY3)
@ConditionalOnProperty(name = "yexuejc.redis.db3")
public JedisConnectionFactory redisConnectionFactory3() throws UnknownHostException {
return applyProperties(createJedisConnectionFactory(), 3);
return createJedisConnectionFactory(3);
}
@Bean(BEAN_REDIS_FACTORY4)
@ConditionalOnProperty(name = "yexuejc.redis.db4")
public JedisConnectionFactory redisConnectionFactory4() throws UnknownHostException {
return applyProperties(createJedisConnectionFactory(), 4);
return createJedisConnectionFactory(4);
}
@Bean(BEAN_REDIS_FACTORY5)
@ConditionalOnProperty(name = "yexuejc.redis.db5")
public JedisConnectionFactory redisConnectionFactory5() throws UnknownHostException {
return applyProperties(createJedisConnectionFactory(), 5);
return createJedisConnectionFactory(5);
}
@Bean(BEAN_REDIS_FACTORY6)
@ConditionalOnProperty(name = "yexuejc.redis.db6")
public JedisConnectionFactory redisConnectionFactory6() throws UnknownHostException {
return applyProperties(createJedisConnectionFactory(), 6);
return createJedisConnectionFactory(6);
}
@Bean(BEAN_REDIS_FACTORY7)
@ConditionalOnProperty(name = "yexuejc.redis.db7")
public JedisConnectionFactory redisConnectionFactory7() throws UnknownHostException {
return applyProperties(createJedisConnectionFactory(), 7);
return createJedisConnectionFactory(7);
}
@Bean(BEAN_REDIS_FACTORY8)
@ConditionalOnProperty(name = "yexuejc.redis.db8")
public JedisConnectionFactory redisConnectionFactory8() throws UnknownHostException {
return applyProperties(createJedisConnectionFactory(), 8);
return createJedisConnectionFactory(8);
}
@Bean(BEAN_REDIS_FACTORY9)
@ConditionalOnProperty(name = "yexuejc.redis.db9")
public JedisConnectionFactory redisConnectionFactory9() throws UnknownHostException {
return applyProperties(createJedisConnectionFactory(), 9);
return createJedisConnectionFactory(9);
}
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());
}
private JedisConnectionFactory createJedisConnectionFactory(int database) {
RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();
redisStandaloneConfiguration.setHostName(properties.getHost());
redisStandaloneConfiguration.setPort(properties.getPort());
redisStandaloneConfiguration.setDatabase(database);
redisStandaloneConfiguration.setPassword(RedisPassword.of(properties.getPassword()));
JedisClientConfiguration.JedisClientConfigurationBuilder jedisClientConfiguration = JedisClientConfiguration.builder();
JedisConnectionFactory factory = new JedisConnectionFactory(redisStandaloneConfiguration,
jedisClientConfiguration.build());
return factory;
}
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());
}
}
}
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 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;
}
/**
* 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());
if (clusterProperties.getMaxRedirects() != null) {
config.setMaxRedirects(clusterProperties.getMaxRedirects());
}
return config;
}
private List<RedisNode> createSentinels(Sentinel sentinel) {
List<RedisNode> nodes = new ArrayList<RedisNode>();
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 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);
}
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;
}
}
/**
* Standard Redis configuration.
*/
@ -469,5 +344,4 @@ public class MutiRedisAutoConfiguration {
}
}
}

View File

@ -19,7 +19,6 @@ import com.yexuejc.springboot.base.util.LogUtil;
import com.yexuejc.springboot.base.util.SSLUtil;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.autoconfigure.condition.ConditionalOnResource;
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.web.servlet.FilterRegistrationBean;

View File

@ -16,7 +16,7 @@
<parent>
<groupId>com.yexuejc.springboot</groupId>
<artifactId>yexuejc-springboot-parent</artifactId>
<version>1.2.1</version>
<version>2.1.0</version>
</parent>
<properties>
<yexuejc.base.version>1.3.9</yexuejc.base.version>

View File

@ -5,7 +5,7 @@
<parent>
<groupId>com.yexuejc.springboot</groupId>
<artifactId>yexuejc-springboot-parent</artifactId>
<version>1.2.1</version>
<version>2.1.0</version>
</parent>
<groupId>top.yexuejc</groupId>
<artifactId>yexuejc-springboot-simple</artifactId>
@ -21,7 +21,7 @@
<dependency>
<groupId>com.yexuejc.springboot</groupId>
<artifactId>yexuejc-springboot-base</artifactId>
<version>1.2.1</version>
<version>${parent.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>