Skip to content

Commit 1574838

Browse files
author
jruaux
committed
deps: Upgraded to Spring Batch Redis 3.7.4
1 parent a9bc1e9 commit 1574838

15 files changed

+564
-526
lines changed

core/redis-kafka-connect/redis-kafka-connect.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ dependencies {
2020
implementation group: 'com.redis', name: 'spring-batch-redis', version: springBatchRedisVersion
2121
implementation 'org.apache.commons:commons-pool2'
2222
implementation 'org.slf4j:slf4j-api'
23-
runtimeOnly 'org.slf4j:slf4j-log4j12'
2423
compileOnly 'org.apache.kafka:connect-api'
2524
compileOnly 'org.apache.kafka:connect-json'
2625
testImplementation 'org.apache.kafka:connect-api'
@@ -32,6 +31,7 @@ dependencies {
3231
testImplementation 'org.junit.jupiter:junit-jupiter-engine'
3332
testImplementation 'org.junit.platform:junit-platform-launcher'
3433
testImplementation 'org.slf4j:slf4j-simple'
34+
testImplementation group: 'com.redis', name: 'spring-batch-redis', version: springBatchRedisVersion, classifier: 'tests'
3535
testImplementation group: 'org.testcontainers', name: 'junit-jupiter', version: testcontainersVersion
3636
testImplementation(group: 'com.redis.testcontainers', name: 'testcontainers-redis', version: testcontainersRedisVersion) {
3737
exclude group: 'com.redis', module: 'lettucemod'

core/redis-kafka-connect/src/main/java/com/redis/kafka/connect/common/RedisConfig.java

Lines changed: 88 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -21,75 +21,104 @@
2121

2222
import org.apache.kafka.common.config.AbstractConfig;
2323
import org.apache.kafka.common.config.types.Password;
24+
import org.springframework.util.StringUtils;
2425

25-
import com.redis.lettucemod.util.ClientBuilder;
26-
import com.redis.lettucemod.util.RedisURIBuilder;
27-
import com.redis.spring.batch.common.PoolOptions;
26+
import com.redis.lettucemod.RedisModulesClient;
27+
import com.redis.lettucemod.cluster.RedisModulesClusterClient;
2828

2929
import io.lettuce.core.AbstractRedisClient;
30+
import io.lettuce.core.ClientOptions;
3031
import io.lettuce.core.RedisURI;
31-
import io.lettuce.core.SslVerifyMode;
32-
import io.netty.util.internal.StringUtil;
32+
import io.lettuce.core.SslOptions;
33+
import io.lettuce.core.SslOptions.Builder;
34+
import io.lettuce.core.cluster.ClusterClientOptions;
3335

3436
public abstract class RedisConfig extends AbstractConfig {
3537

36-
protected RedisConfig(RedisConfigDef config, Map<?, ?> originals) {
37-
super(config, originals);
38-
}
38+
private static final char[] EMPTY_PASSWORD = new char[0];
3939

40-
public RedisURI uri() {
41-
RedisURIBuilder builder = RedisURIBuilder.create();
42-
String uri = getString(RedisConfigDef.URI_CONFIG);
43-
if (StringUtil.isNullOrEmpty(uri)) {
44-
builder.host(getString(RedisConfigDef.HOST_CONFIG));
45-
builder.port(getInt(RedisConfigDef.PORT_CONFIG));
46-
} else {
47-
builder.uri(uri);
48-
}
49-
if (Boolean.TRUE.equals(getBoolean(RedisConfigDef.INSECURE_CONFIG))) {
50-
builder.sslVerifyMode(SslVerifyMode.NONE);
51-
}
52-
builder.ssl(getBoolean(RedisConfigDef.TLS_CONFIG));
53-
String username = getString(RedisConfigDef.USERNAME_CONFIG);
54-
if (!StringUtil.isNullOrEmpty(username)) {
55-
builder.username(username);
56-
}
57-
Password password = getPassword(RedisConfigDef.PASSWORD_CONFIG);
58-
if (password != null && !StringUtil.isNullOrEmpty(password.value())) {
59-
builder.password(password.value().toCharArray());
60-
}
61-
Long timeout = getLong(RedisConfigDef.TIMEOUT_CONFIG);
62-
if (timeout != null) {
63-
builder.timeout(Duration.ofSeconds(timeout));
64-
}
65-
return builder.build();
66-
}
40+
protected RedisConfig(RedisConfigDef config, Map<?, ?> originals) {
41+
super(config, originals);
42+
}
6743

68-
private AbstractRedisClient client(RedisURI uri) {
69-
ClientBuilder builder = ClientBuilder.create(uri);
70-
builder.cluster(getBoolean(RedisConfigDef.CLUSTER_CONFIG));
71-
String keyFile = getString(RedisConfigDef.KEY_CONFIG);
72-
if (!StringUtil.isNullOrEmpty(keyFile)) {
73-
builder.key(new File(keyFile));
74-
builder.keyCert(new File(getString(RedisConfigDef.KEY_CERT_CONFIG)));
75-
Password password = getPassword(RedisConfigDef.KEY_PASSWORD_CONFIG);
76-
if (password != null && !StringUtil.isNullOrEmpty(password.value())) {
77-
builder.keyPassword(password.value().toCharArray());
78-
}
79-
}
80-
String cacert = getString(RedisConfigDef.CACERT_CONFIG);
81-
if (!StringUtil.isNullOrEmpty(cacert)) {
82-
builder.trustManager(new File(cacert));
83-
}
84-
return builder.build();
85-
}
44+
public RedisURI uri() {
45+
RedisURI.Builder builder = redisURIBuilder();
46+
Boolean ssl = getBoolean(RedisConfigDef.TLS_CONFIG);
47+
if (Boolean.TRUE.equals(ssl)) {
48+
builder.withSsl(ssl);
49+
Boolean insecure = getBoolean(RedisConfigDef.INSECURE_CONFIG);
50+
if (Boolean.TRUE.equals(insecure)) {
51+
builder.withVerifyPeer(false);
52+
}
53+
}
54+
Password password = getPassword(RedisConfigDef.PASSWORD_CONFIG);
55+
if (password != null) {
56+
String passwordString = password.value();
57+
if (StringUtils.hasLength(passwordString)) {
58+
String username = getString(RedisConfigDef.USERNAME_CONFIG);
59+
if (StringUtils.hasLength(username)) {
60+
builder.withAuthentication(username, passwordString);
61+
} else {
62+
builder.withPassword((CharSequence) passwordString);
63+
}
64+
}
65+
}
66+
Long timeout = getLong(RedisConfigDef.TIMEOUT_CONFIG);
67+
if (timeout != null) {
68+
builder.withTimeout(Duration.ofSeconds(timeout));
69+
}
70+
return builder.build();
71+
}
8672

87-
public AbstractRedisClient client() {
88-
return client(uri());
89-
}
73+
private RedisURI.Builder redisURIBuilder() {
74+
String uri = getString(RedisConfigDef.URI_CONFIG);
75+
if (StringUtils.hasLength(uri)) {
76+
return RedisURI.builder(RedisURI.create(uri));
77+
}
78+
String host = getString(RedisConfigDef.HOST_CONFIG);
79+
int port = getInt(RedisConfigDef.PORT_CONFIG);
80+
return RedisURI.Builder.redis(host, port);
81+
}
9082

91-
public PoolOptions poolOptions() {
92-
return PoolOptions.builder().maxTotal(getInt(RedisConfigDef.POOL_MAX_CONFIG)).build();
93-
}
83+
private AbstractRedisClient client(RedisURI uri) {
84+
Boolean cluster = getBoolean(RedisConfigDef.CLUSTER_CONFIG);
85+
if (Boolean.TRUE.equals(cluster)) {
86+
RedisModulesClusterClient client = RedisModulesClusterClient.create(uri);
87+
client.setOptions(clientOptions(ClusterClientOptions.builder()).build());
88+
return client;
89+
}
90+
RedisModulesClient client = RedisModulesClient.create(uri);
91+
client.setOptions(clientOptions(ClientOptions.builder()).build());
92+
return client;
93+
}
94+
95+
private <B extends ClientOptions.Builder> B clientOptions(B builder) {
96+
builder.sslOptions(sslOptions());
97+
return builder;
98+
}
99+
100+
private SslOptions sslOptions() {
101+
Builder options = SslOptions.builder();
102+
String key = getString(RedisConfigDef.KEY_CONFIG);
103+
if (StringUtils.hasLength(key)) {
104+
String cert = getString(RedisConfigDef.KEY_CERT_CONFIG);
105+
Password password = getPassword(RedisConfigDef.KEY_PASSWORD_CONFIG);
106+
char[] passwordCharArray = password == null ? EMPTY_PASSWORD : password.value().toCharArray();
107+
options.keyManager(new File(cert), new File(key), passwordCharArray);
108+
}
109+
String cacert = getString(RedisConfigDef.CACERT_CONFIG);
110+
if (StringUtils.hasLength(cacert)) {
111+
options.trustManager(new File(cacert));
112+
}
113+
return options.build();
114+
}
115+
116+
public AbstractRedisClient client() {
117+
return client(uri());
118+
}
119+
120+
public int getPoolSize() {
121+
return getInt(RedisConfigDef.POOL_MAX_CONFIG);
122+
}
94123

95124
}

core/redis-kafka-connect/src/main/java/com/redis/kafka/connect/common/RedisConfigDef.java

Lines changed: 112 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -2,92 +2,120 @@
22

33
import org.apache.kafka.common.config.ConfigDef;
44

5-
import com.redis.spring.batch.common.PoolOptions;
5+
import com.redis.spring.batch.common.AbstractOperationExecutor;
66

77
import io.lettuce.core.RedisURI;
88

99
public abstract class RedisConfigDef extends ConfigDef {
1010

11-
public static final String CLUSTER_CONFIG = "redis.cluster";
12-
private static final boolean CLUSTER_DEFAULT = false;
13-
private static final String CLUSTER_DOC = "Connect to a Redis Cluster database";
14-
15-
public static final String HOST_CONFIG = "redis.host";
16-
private static final String HOST_DEFAULT = "localhost";
17-
private static final String HOST_DOC = "The Redis host to connect to";
18-
19-
public static final String PORT_CONFIG = "redis.port";
20-
private static final int PORT_DEFAULT = RedisURI.DEFAULT_REDIS_PORT;
21-
private static final String PORT_DOC = "The Redis port to connect to";
22-
23-
public static final String URI_CONFIG = "redis.uri";
24-
private static final String URI_DEFAULT = "";
25-
private static final String URI_DOC = "URI of the Redis database to connect to, e.g. redis://redis-12000.redis.com:12000. For secure connections use rediss URI scheme, e.g. rediss://...";
26-
27-
public static final String USERNAME_CONFIG = "redis.username";
28-
private static final String USERNAME_DEFAULT = "";
29-
private static final String USERNAME_DOC = "Username to use to connect to Redis";
30-
31-
public static final String PASSWORD_CONFIG = "redis.password";
32-
private static final String PASSWORD_DEFAULT = "";
33-
private static final String PASSWORD_DOC = "Password to use to connect to Redis";
34-
35-
public static final String TIMEOUT_CONFIG = "redis.timeout";
36-
private static final long TIMEOUT_DEFAULT = RedisURI.DEFAULT_TIMEOUT;
37-
private static final String TIMEOUT_DOC = "Redis command timeout in seconds";
38-
39-
public static final String POOL_MAX_CONFIG = "redis.pool";
40-
private static final int POOL_MAX_DEFAULT = PoolOptions.DEFAULT_MAX_TOTAL;
41-
private static final String POOL_MAX_DOC = "Max pool connections";
42-
43-
public static final String TLS_CONFIG = "redis.tls";
44-
private static final boolean TLS_DEFAULT = false;
45-
private static final String TLS_DOC = "Establish a secure TLS connection";
46-
47-
public static final String INSECURE_CONFIG = "redis.insecure";
48-
private static final boolean INSECURE_DEFAULT = false;
49-
private static final String INSECURE_DOC = "Allow insecure connections (e.g. invalid certificates) to Redis when using SSL";
50-
51-
public static final String KEY_CONFIG = "redis.key.file";
52-
public static final String KEY_DEFAULT = "";
53-
private static final String KEY_DOC = "PKCS#8 private key file to authenticate with (PEM format)";
54-
55-
public static final String KEY_CERT_CONFIG = "redis.key.cert";
56-
public static final String KEY_CERT_DEFAULT = "";
57-
private static final String KEY_CERT_DOC = "X.509 certificate chain file to authenticate with (PEM format)";
58-
59-
public static final String KEY_PASSWORD_CONFIG = "redis.key.password";
60-
private static final String KEY_PASSWORD_DEFAULT = "";
61-
private static final String KEY_PASSWORD_DOC = "Password of the private key file. Leave empty if key file is not password-protected";
62-
63-
public static final String CACERT_CONFIG = "redis.cacert";
64-
public static final String CACERT_DEFAULT = "";
65-
private static final String CACERT_DOC = "X.509 CA certificate file to verify with";
66-
67-
protected RedisConfigDef() {
68-
defineConfigs();
69-
}
70-
71-
protected RedisConfigDef(ConfigDef base) {
72-
super(base);
73-
defineConfigs();
74-
}
75-
76-
private void defineConfigs() {
77-
define(CLUSTER_CONFIG, Type.BOOLEAN, CLUSTER_DEFAULT, Importance.MEDIUM, CLUSTER_DOC);
78-
define(HOST_CONFIG, Type.STRING, HOST_DEFAULT, Importance.HIGH, HOST_DOC);
79-
define(PORT_CONFIG, Type.INT, PORT_DEFAULT, Importance.HIGH, PORT_DOC);
80-
define(URI_CONFIG, Type.STRING, URI_DEFAULT, Importance.MEDIUM, URI_DOC);
81-
define(TLS_CONFIG, Type.BOOLEAN, TLS_DEFAULT, Importance.MEDIUM, TLS_DOC);
82-
define(INSECURE_CONFIG, Type.BOOLEAN, INSECURE_DEFAULT, Importance.MEDIUM, INSECURE_DOC);
83-
define(PASSWORD_CONFIG, Type.PASSWORD, PASSWORD_DEFAULT, Importance.MEDIUM, PASSWORD_DOC);
84-
define(USERNAME_CONFIG, Type.STRING, USERNAME_DEFAULT, Importance.MEDIUM, USERNAME_DOC);
85-
define(TIMEOUT_CONFIG, Type.LONG, TIMEOUT_DEFAULT, Importance.MEDIUM, TIMEOUT_DOC);
86-
define(POOL_MAX_CONFIG, Type.INT, POOL_MAX_DEFAULT, Importance.MEDIUM, POOL_MAX_DOC);
87-
define(KEY_CONFIG, Type.STRING, KEY_DEFAULT, Importance.MEDIUM, KEY_DOC);
88-
define(KEY_CERT_CONFIG, Type.STRING, KEY_CERT_DEFAULT, Importance.MEDIUM, KEY_CERT_DOC);
89-
define(KEY_PASSWORD_CONFIG, Type.PASSWORD, KEY_PASSWORD_DEFAULT, Importance.MEDIUM, KEY_PASSWORD_DOC);
90-
define(CACERT_CONFIG, Type.STRING, CACERT_DEFAULT, Importance.MEDIUM, CACERT_DOC);
91-
}
92-
93-
}
11+
public static final String CLUSTER_CONFIG = "redis.cluster";
12+
13+
private static final boolean CLUSTER_DEFAULT = false;
14+
15+
private static final String CLUSTER_DOC = "Connect to a Redis Cluster database";
16+
17+
public static final String HOST_CONFIG = "redis.host";
18+
19+
private static final String HOST_DEFAULT = "localhost";
20+
21+
private static final String HOST_DOC = "The Redis host to connect to";
22+
23+
public static final String PORT_CONFIG = "redis.port";
24+
25+
private static final int PORT_DEFAULT = RedisURI.DEFAULT_REDIS_PORT;
26+
27+
private static final String PORT_DOC = "The Redis port to connect to";
28+
29+
public static final String URI_CONFIG = "redis.uri";
30+
31+
private static final String URI_DEFAULT = "";
32+
33+
private static final String URI_DOC = "URI of the Redis database to connect to, e.g. redis://redis-12000.redis.com:12000. For secure connections use rediss URI scheme, e.g. rediss://...";
34+
35+
public static final String USERNAME_CONFIG = "redis.username";
36+
37+
private static final String USERNAME_DEFAULT = "";
38+
39+
private static final String USERNAME_DOC = "Username to use to connect to Redis";
40+
41+
public static final String PASSWORD_CONFIG = "redis.password";
42+
43+
private static final String PASSWORD_DEFAULT = "";
44+
45+
private static final String PASSWORD_DOC = "Password to use to connect to Redis";
46+
47+
public static final String TIMEOUT_CONFIG = "redis.timeout";
48+
49+
private static final long TIMEOUT_DEFAULT = RedisURI.DEFAULT_TIMEOUT;
50+
51+
private static final String TIMEOUT_DOC = "Redis command timeout in seconds";
52+
53+
public static final String POOL_MAX_CONFIG = "redis.pool";
54+
55+
private static final int POOL_MAX_DEFAULT = AbstractOperationExecutor.DEFAULT_POOL_SIZE;
56+
57+
private static final String POOL_MAX_DOC = "Max pool connections";
58+
59+
public static final String TLS_CONFIG = "redis.tls";
60+
61+
private static final boolean TLS_DEFAULT = false;
62+
63+
private static final String TLS_DOC = "Establish a secure TLS connection";
64+
65+
public static final String INSECURE_CONFIG = "redis.insecure";
66+
67+
private static final boolean INSECURE_DEFAULT = false;
68+
69+
private static final String INSECURE_DOC = "Allow insecure connections (e.g. invalid certificates) to Redis when using SSL";
70+
71+
public static final String KEY_CONFIG = "redis.key.file";
72+
73+
public static final String KEY_DEFAULT = "";
74+
75+
private static final String KEY_DOC = "PKCS#8 private key file to authenticate with (PEM format)";
76+
77+
public static final String KEY_CERT_CONFIG = "redis.key.cert";
78+
79+
public static final String KEY_CERT_DEFAULT = "";
80+
81+
private static final String KEY_CERT_DOC = "X.509 certificate chain file to authenticate with (PEM format)";
82+
83+
public static final String KEY_PASSWORD_CONFIG = "redis.key.password";
84+
85+
private static final String KEY_PASSWORD_DEFAULT = "";
86+
87+
private static final String KEY_PASSWORD_DOC = "Password of the private key file. Leave empty if key file is not password-protected";
88+
89+
public static final String CACERT_CONFIG = "redis.cacert";
90+
91+
public static final String CACERT_DEFAULT = "";
92+
93+
private static final String CACERT_DOC = "X.509 CA certificate file to verify with";
94+
95+
protected RedisConfigDef() {
96+
defineConfigs();
97+
}
98+
99+
protected RedisConfigDef(ConfigDef base) {
100+
super(base);
101+
defineConfigs();
102+
}
103+
104+
private void defineConfigs() {
105+
define(CLUSTER_CONFIG, Type.BOOLEAN, CLUSTER_DEFAULT, Importance.MEDIUM, CLUSTER_DOC);
106+
define(HOST_CONFIG, Type.STRING, HOST_DEFAULT, Importance.HIGH, HOST_DOC);
107+
define(PORT_CONFIG, Type.INT, PORT_DEFAULT, Importance.HIGH, PORT_DOC);
108+
define(URI_CONFIG, Type.STRING, URI_DEFAULT, Importance.MEDIUM, URI_DOC);
109+
define(TLS_CONFIG, Type.BOOLEAN, TLS_DEFAULT, Importance.MEDIUM, TLS_DOC);
110+
define(INSECURE_CONFIG, Type.BOOLEAN, INSECURE_DEFAULT, Importance.MEDIUM, INSECURE_DOC);
111+
define(PASSWORD_CONFIG, Type.PASSWORD, PASSWORD_DEFAULT, Importance.MEDIUM, PASSWORD_DOC);
112+
define(USERNAME_CONFIG, Type.STRING, USERNAME_DEFAULT, Importance.MEDIUM, USERNAME_DOC);
113+
define(TIMEOUT_CONFIG, Type.LONG, TIMEOUT_DEFAULT, Importance.MEDIUM, TIMEOUT_DOC);
114+
define(POOL_MAX_CONFIG, Type.INT, POOL_MAX_DEFAULT, Importance.MEDIUM, POOL_MAX_DOC);
115+
define(KEY_CONFIG, Type.STRING, KEY_DEFAULT, Importance.MEDIUM, KEY_DOC);
116+
define(KEY_CERT_CONFIG, Type.STRING, KEY_CERT_DEFAULT, Importance.MEDIUM, KEY_CERT_DOC);
117+
define(KEY_PASSWORD_CONFIG, Type.PASSWORD, KEY_PASSWORD_DEFAULT, Importance.MEDIUM, KEY_PASSWORD_DOC);
118+
define(CACERT_CONFIG, Type.STRING, CACERT_DEFAULT, Importance.MEDIUM, CACERT_DOC);
119+
}
120+
121+
}

0 commit comments

Comments
 (0)