Skip to content

Commit e5d5323

Browse files
Adapter Spring Boot 2.x
1 parent 25b3711 commit e5d5323

File tree

9 files changed

+116
-296
lines changed

9 files changed

+116
-296
lines changed

pom.xml

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>com.childrengreens</groupId>
88
<artifactId>multi-source-spring-boot-starter</artifactId>
9-
<version>2.0</version>
9+
<version>1.0-SNAPSHOT</version>
1010
<packaging>pom</packaging>
1111

1212
<name>Spring Boot Starter for Multi Source</name>
@@ -30,7 +30,7 @@
3030
<url>https://github.com/ChildrenGreens/multi-source-spring-boot-starter</url>
3131
<connection>scm:git:[email protected]:ChildrenGreens/multi-source-spring-boot-starter.git</connection>
3232
<developerConnection>scm:git:[email protected]:ChildrenGreens/multi-source-spring-boot-starter.git</developerConnection>
33-
<tag>HEAD</tag>
33+
<tag>1.0</tag>
3434
</scm>
3535

3636
<licenses>
@@ -58,13 +58,13 @@
5858

5959

6060
<properties>
61-
<java.version>17</java.version>
62-
<maven.compiler.source>17</maven.compiler.source>
63-
<maven.compiler.target>17</maven.compiler.target>
61+
<java.version>1.8</java.version>
62+
<maven.compiler.source>8</maven.compiler.source>
63+
<maven.compiler.target>8</maven.compiler.target>
6464
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
6565
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
6666

67-
<spring-boot-dependencies.version>3.4.0</spring-boot-dependencies.version>
67+
<spring-boot-dependencies.version>2.7.18</spring-boot-dependencies.version>
6868
</properties>
6969

7070
<dependencyManagement>
@@ -93,7 +93,7 @@
9393
<plugin>
9494
<groupId>com.mycila</groupId>
9595
<artifactId>license-maven-plugin</artifactId>
96-
<version>4.6</version>
96+
<version>4.1</version>
9797
<configuration>
9898
<!-- Template location -->
9999
<header>licence-header.template</header>
@@ -127,15 +127,17 @@
127127
<plugin>
128128
<groupId>org.apache.maven.plugins</groupId>
129129
<artifactId>maven-compiler-plugin</artifactId>
130-
<version>3.13.0</version>
130+
<version>3.10.1</version>
131131
<configuration>
132-
<release>${java.version}</release>
132+
<source>1.8</source>
133+
<target>1.8</target>
134+
<compilerArgs>-parameters</compilerArgs>
133135
</configuration>
134136
</plugin>
135137
<plugin>
136138
<groupId>org.apache.maven.plugins</groupId>
137139
<artifactId>maven-release-plugin</artifactId>
138-
<version>3.1.1</version>
140+
<version>2.5.3</version>
139141
<configuration>
140142
<autoVersionSubmodules>true</autoVersionSubmodules>
141143
<useReleaseProfile>false</useReleaseProfile>
@@ -156,7 +158,7 @@
156158
<plugin>
157159
<groupId>org.apache.maven.plugins</groupId>
158160
<artifactId>maven-gpg-plugin</artifactId>
159-
<version>3.2.7</version>
161+
<version>3.0.1</version>
160162
<executions>
161163
<execution>
162164
<id>sign-artifacts</id>
@@ -170,7 +172,7 @@
170172
<plugin>
171173
<groupId>org.apache.maven.plugins</groupId>
172174
<artifactId>maven-source-plugin</artifactId>
173-
<version>3.3.1</version>
175+
<version>3.2.1</version>
174176
<executions>
175177
<execution>
176178
<id>attach-sources</id>
@@ -183,7 +185,7 @@
183185
<plugin>
184186
<groupId>org.apache.maven.plugins</groupId>
185187
<artifactId>maven-javadoc-plugin</artifactId>
186-
<version>3.11.1</version>
188+
<version>3.4.1</version>
187189
<configuration>
188190
<doclint>none</doclint>
189191
</configuration>

redis-multi-source-spring-boot-starter/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<parent>
88
<groupId>com.childrengreens</groupId>
99
<artifactId>multi-source-spring-boot-starter</artifactId>
10-
<version>2.0</version>
10+
<version>1.0-SNAPSHOT</version>
1111
</parent>
1212

1313
<artifactId>redis-multi-source-spring-boot-starter</artifactId>

redis-multi-source-spring-boot-starter/src/main/java/com/childrengreens/multi/source/LettuceConnectionMultiSourcesRegistrar.java

Lines changed: 9 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -22,28 +22,24 @@
2222
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
2323
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
2424
import org.springframework.boot.autoconfigure.data.redis.LettuceClientConfigurationBuilderCustomizer;
25-
import org.springframework.boot.autoconfigure.data.redis.LettuceClientOptionsBuilderCustomizer;
26-
import org.springframework.boot.autoconfigure.data.redis.RedisConnectionDetails;
27-
import org.springframework.boot.autoconfigure.thread.Threading;
2825
import org.springframework.boot.context.properties.ConfigurationProperties;
2926
import org.springframework.boot.context.properties.bind.BindResult;
3027
import org.springframework.boot.context.properties.bind.Binder;
31-
import org.springframework.boot.ssl.SslBundles;
3228
import org.springframework.context.EnvironmentAware;
3329
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
3430
import org.springframework.core.env.Environment;
35-
import org.springframework.core.task.SimpleAsyncTaskExecutor;
3631
import org.springframework.core.type.AnnotationMetadata;
3732
import org.springframework.data.redis.connection.RedisClusterConfiguration;
3833
import org.springframework.data.redis.connection.RedisSentinelConfiguration;
3934
import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
35+
import org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration;
4036
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
4137
import org.springframework.util.CollectionUtils;
4238

4339
import java.util.Objects;
4440

4541
/**
46-
* Dynamically create multiple {@link RedisConnectionDetails} and {@link LettuceConnectionFactory} based on Environment.
42+
* Dynamically create multiple {@link LettuceConnectionFactory} based on Environment.
4743
*
4844
* @author ChildrenGreens
4945
*/
@@ -62,54 +58,37 @@ public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, B
6258
return;
6359
}
6460

65-
if (registry instanceof ConfigurableListableBeanFactory beanFactory) {
61+
if (registry instanceof ConfigurableListableBeanFactory) {
6662

67-
// Whether it is virtual threads.
68-
boolean active = Threading.VIRTUAL.isActive(environment);
63+
ConfigurableListableBeanFactory beanFactory = (ConfigurableListableBeanFactory) registry;
6964

7065
redisMultiSourcesProperties.getSources().forEach((name, source) -> {
7166

7267
// Whether it is Primary
7368
boolean isPrimary = name.equals(redisMultiSourcesProperties.getPrimaryKey());
7469

75-
// PropertiesRedisMultiSourcesConnectionDetails registration
76-
BeanDefinition connectionDetailsBD = BeanDefinitionBuilder.genericBeanDefinition(PropertiesRedisMultiSourcesConnectionDetails.class,
77-
() -> new PropertiesRedisMultiSourcesConnectionDetails(source)).getBeanDefinition();
78-
connectionDetailsBD.setPrimary(isPrimary);
79-
String connectionDetailsBDN = name + PropertiesRedisMultiSourcesConnectionDetails.class.getSimpleName();
80-
registry.registerBeanDefinition(connectionDetailsBDN, connectionDetailsBD);
81-
82-
8370
// LettuceConnectionFactory registration
8471
BeanDefinition connectionFactoryBD = BeanDefinitionBuilder.genericBeanDefinition(LettuceConnectionFactory.class, () -> {
8572

8673
// new LettuceMultiSourcesConnectionConfiguration
87-
PropertiesRedisMultiSourcesConnectionDetails connectionDetails = beanFactory.getBean(connectionDetailsBDN, PropertiesRedisMultiSourcesConnectionDetails.class);
8874
ObjectProvider<RedisStandaloneConfiguration> standaloneProvider = beanFactory.getBeanProvider(RedisStandaloneConfiguration.class);
8975
ObjectProvider<RedisSentinelConfiguration> sentinelProvider = beanFactory.getBeanProvider(RedisSentinelConfiguration.class);
9076
ObjectProvider<RedisClusterConfiguration> clusterProvider = beanFactory.getBeanProvider(RedisClusterConfiguration.class);
91-
ObjectProvider<SslBundles> sslBundlesProvider = beanFactory.getBeanProvider(SslBundles.class);
9277

9378
LettuceMultiSourcesConnectionConfiguration lettuceMultiSourcesConnectionConfiguration = new LettuceMultiSourcesConnectionConfiguration(source,
9479
standaloneProvider,
9580
sentinelProvider,
96-
clusterProvider,
97-
connectionDetails,
98-
sslBundlesProvider);
81+
clusterProvider);
9982

10083
ObjectProvider<LettuceClientConfigurationBuilderCustomizer> configurationBuilderCustomizerProvider = beanFactory.getBeanProvider(LettuceClientConfigurationBuilderCustomizer.class);
101-
ObjectProvider<LettuceClientOptionsBuilderCustomizer> optionsBuilderCustomizerProvider = beanFactory.getBeanProvider(LettuceClientOptionsBuilderCustomizer.class);
10284
ClientResources clientResources = beanFactory.getBean(ClientResources.class);
10385

104-
LettuceConnectionFactory factory = lettuceMultiSourcesConnectionConfiguration.createConnectionFactory(configurationBuilderCustomizerProvider, optionsBuilderCustomizerProvider, clientResources);
86+
LettuceClientConfiguration clientConfig = lettuceMultiSourcesConnectionConfiguration.getLettuceClientConfiguration(configurationBuilderCustomizerProvider,
87+
clientResources,
88+
source.getLettuce().getPool());
10589

90+
return lettuceMultiSourcesConnectionConfiguration.createLettuceConnectionFactory(clientConfig);
10691

107-
if (active) {
108-
SimpleAsyncTaskExecutor executor = new SimpleAsyncTaskExecutor("redis-");
109-
executor.setVirtualThreads(true);
110-
factory.setExecutor(executor);
111-
}
112-
return factory;
11392
}).getBeanDefinition();
11493

11594
connectionFactoryBD.setPrimary(isPrimary);

redis-multi-source-spring-boot-starter/src/main/java/com/childrengreens/multi/source/LettuceMultiSourcesConnectionConfiguration.java

Lines changed: 18 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,6 @@
2424
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
2525
import org.springframework.beans.factory.ObjectProvider;
2626
import org.springframework.boot.autoconfigure.data.redis.*;
27-
import org.springframework.boot.ssl.SslBundle;
28-
import org.springframework.boot.ssl.SslBundles;
29-
import org.springframework.boot.ssl.SslOptions;
3027
import org.springframework.data.redis.connection.RedisClusterConfiguration;
3128
import org.springframework.data.redis.connection.RedisSentinelConfiguration;
3229
import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
@@ -47,26 +44,15 @@ class LettuceMultiSourcesConnectionConfiguration extends RedisMultiSourcesConnec
4744

4845

4946
LettuceMultiSourcesConnectionConfiguration(RedisProperties properties,
50-
ObjectProvider<RedisStandaloneConfiguration> standaloneConfigurationProvider,
51-
ObjectProvider<RedisSentinelConfiguration> sentinelConfigurationProvider,
52-
ObjectProvider<RedisClusterConfiguration> clusterConfigurationProvider,
53-
RedisConnectionDetails connectionDetails, ObjectProvider<SslBundles> sslBundles) {
54-
super(properties, connectionDetails, standaloneConfigurationProvider, sentinelConfigurationProvider,
55-
clusterConfigurationProvider, sslBundles);
47+
ObjectProvider<RedisStandaloneConfiguration> standaloneConfigurationProvider,
48+
ObjectProvider<RedisSentinelConfiguration> sentinelConfigurationProvider,
49+
ObjectProvider<RedisClusterConfiguration> clusterConfigurationProvider) {
50+
super(properties, standaloneConfigurationProvider, sentinelConfigurationProvider, clusterConfigurationProvider);
5651
}
5752

5853

5954

60-
LettuceConnectionFactory createConnectionFactory(
61-
ObjectProvider<LettuceClientConfigurationBuilderCustomizer> clientConfigurationBuilderCustomizers,
62-
ObjectProvider<LettuceClientOptionsBuilderCustomizer> clientOptionsBuilderCustomizers,
63-
ClientResources clientResources) {
64-
LettuceClientConfiguration clientConfig = getLettuceClientConfiguration(clientConfigurationBuilderCustomizers,
65-
clientOptionsBuilderCustomizers, clientResources, getProperties().getLettuce().getPool());
66-
return createLettuceConnectionFactory(clientConfig);
67-
}
68-
69-
private LettuceConnectionFactory createLettuceConnectionFactory(LettuceClientConfiguration clientConfiguration) {
55+
LettuceConnectionFactory createLettuceConnectionFactory(LettuceClientConfiguration clientConfiguration) {
7056
if (getSentinelConfig() != null) {
7157
return new LettuceConnectionFactory(getSentinelConfig(), clientConfiguration);
7258
}
@@ -76,18 +62,17 @@ private LettuceConnectionFactory createLettuceConnectionFactory(LettuceClientCon
7662
return new LettuceConnectionFactory(getStandaloneConfig(), clientConfiguration);
7763
}
7864

79-
private LettuceClientConfiguration getLettuceClientConfiguration(
80-
ObjectProvider<LettuceClientConfigurationBuilderCustomizer> clientConfigurationBuilderCustomizers,
81-
ObjectProvider<LettuceClientOptionsBuilderCustomizer> clientOptionsBuilderCustomizers,
65+
LettuceClientConfiguration getLettuceClientConfiguration(
66+
ObjectProvider<LettuceClientConfigurationBuilderCustomizer> builderCustomizers,
8267
ClientResources clientResources, RedisProperties.Pool pool) {
8368
LettuceClientConfiguration.LettuceClientConfigurationBuilder builder = createBuilder(pool);
8469
applyProperties(builder);
8570
if (StringUtils.hasText(getProperties().getUrl())) {
8671
customizeConfigurationFromUrl(builder);
8772
}
88-
builder.clientOptions(createClientOptions(clientOptionsBuilderCustomizers));
73+
builder.clientOptions(createClientOptions());
8974
builder.clientResources(clientResources);
90-
clientConfigurationBuilderCustomizers.orderedStream().forEach((customizer) -> customizer.customize(builder));
75+
builderCustomizers.orderedStream().forEach((customizer) -> customizer.customize(builder));
9176
return builder.build();
9277
}
9378

@@ -98,8 +83,9 @@ private LettuceClientConfiguration.LettuceClientConfigurationBuilder createBuild
9883
return LettuceClientConfiguration.builder();
9984
}
10085

101-
private void applyProperties(LettuceClientConfiguration.LettuceClientConfigurationBuilder builder) {
102-
if (isSslEnabled()) {
86+
private LettuceClientConfiguration.LettuceClientConfigurationBuilder applyProperties(
87+
LettuceClientConfiguration.LettuceClientConfigurationBuilder builder) {
88+
if (getProperties().isSsl()) {
10389
builder.useSsl();
10490
}
10591
if (getProperties().getTimeout() != null) {
@@ -114,32 +100,16 @@ private void applyProperties(LettuceClientConfiguration.LettuceClientConfigurati
114100
if (StringUtils.hasText(getProperties().getClientName())) {
115101
builder.clientName(getProperties().getClientName());
116102
}
103+
return builder;
117104
}
118105

119-
private ClientOptions createClientOptions(
120-
ObjectProvider<LettuceClientOptionsBuilderCustomizer> clientConfigurationBuilderCustomizers) {
106+
private ClientOptions createClientOptions() {
121107
ClientOptions.Builder builder = initializeClientOptionsBuilder();
122108
Duration connectTimeout = getProperties().getConnectTimeout();
123109
if (connectTimeout != null) {
124110
builder.socketOptions(SocketOptions.builder().connectTimeout(connectTimeout).build());
125111
}
126-
if (isSslEnabled() && getProperties().getSsl().getBundle() != null) {
127-
SslBundle sslBundle = getSslBundles().getBundle(getProperties().getSsl().getBundle());
128-
io.lettuce.core.SslOptions.Builder sslOptionsBuilder = io.lettuce.core.SslOptions.builder();
129-
sslOptionsBuilder.keyManager(sslBundle.getManagers().getKeyManagerFactory());
130-
sslOptionsBuilder.trustManager(sslBundle.getManagers().getTrustManagerFactory());
131-
SslOptions sslOptions = sslBundle.getOptions();
132-
if (sslOptions.getCiphers() != null) {
133-
sslOptionsBuilder.cipherSuites(sslOptions.getCiphers());
134-
}
135-
if (sslOptions.getEnabledProtocols() != null) {
136-
sslOptionsBuilder.protocols(sslOptions.getEnabledProtocols());
137-
}
138-
builder.sslOptions(sslOptionsBuilder.build());
139-
}
140-
builder.timeoutOptions(TimeoutOptions.enabled());
141-
clientConfigurationBuilderCustomizers.orderedStream().forEach((customizer) -> customizer.customize(builder));
142-
return builder.build();
112+
return builder.timeoutOptions(TimeoutOptions.enabled()).build();
143113
}
144114

145115
private ClientOptions.Builder initializeClientOptionsBuilder() {
@@ -160,15 +130,16 @@ private ClientOptions.Builder initializeClientOptionsBuilder() {
160130
}
161131

162132
private void customizeConfigurationFromUrl(LettuceClientConfiguration.LettuceClientConfigurationBuilder builder) {
163-
if (urlUsesSsl()) {
133+
RedisMultiSourcesConnectionConfiguration.ConnectionInfo connectionInfo = parseUrl(getProperties().getUrl());
134+
if (connectionInfo.isUseSsl()) {
164135
builder.useSsl();
165136
}
166137
}
167138

168139
/**
169140
* Inner class to allow optional commons-pool2 dependency.
170141
*/
171-
private static final class PoolBuilderFactory {
142+
private static class PoolBuilderFactory {
172143

173144
LettuceClientConfiguration.LettuceClientConfigurationBuilder createBuilder(RedisProperties.Pool properties) {
174145
return LettucePoolingClientConfiguration.builder().poolConfig(getPoolConfig(properties));

0 commit comments

Comments
 (0)