Merge branch 'master' of github.com:redisson/redisson

pull/3060/head
Nikita Koksharov 4 years ago
commit eb663c6f2f

@ -6,13 +6,9 @@ Supports Apache Tomcat 7.x, 8.x, 9.x
<sub>Consider __[Redisson PRO](https://redisson.pro)__ version for advanced features and support by SLA.</sub>
## Advantages
Current implementation differs from any other Redis based Tomcat Session Manager in terms of efficient storage and optimized writes. Each session attribute is written into Redis during each `HttpSession.setAttribute` invocation. While other solutions serialize whole session each time.
## Usage
### 1. Add `RedissonSessionManager`
### 1. Add session manager
Add `RedissonSessionManager` in `tomcat/conf/context.xml` or per context in `tomcat/conf/server.xml`

@ -104,11 +104,14 @@ public class ConfigSupport {
}
private String resolveEnvParams(String content) {
Pattern pattern = Pattern.compile("\\$\\{(\\w+(:-.+?)?)\\}");
Pattern pattern = Pattern.compile("\\$\\{([\\w\\.]+(:-.+?)?)\\}");
Matcher m = pattern.matcher(content);
while (m.find()) {
String[] parts = m.group(1).split(":-");
String v = System.getenv(parts[0]);
if (v == null) {
v = System.getProperty(parts[0]);
}
if (v != null) {
content = content.replace(m.group(), v);
} else if (parts.length == 2) {

@ -25,6 +25,14 @@ public class ConfigSupportTest {
assertEquals("redis://1.1.1.1", config.getAddress());
}
@Test
public void testParsingProperty() throws IOException {
mockHostProperty("1.1.1.1");
SingleServerConfig config = mkConfig("${REDIS_URI}");
assertEquals("redis://1.1.1.1", config.getAddress());
}
@Test
public void testParsingEnv2() throws IOException {
@ -34,9 +42,18 @@ public class ConfigSupportTest {
assertEquals("redis://1.1.1.1:6379", config.getAddress());
}
@Test
public void testParsingProperty2() throws IOException {
mockHostPortProperty("1.1.1.1", "6379");
SingleServerConfig config = mkConfig("${REDIS_HOST}:${REDIS_PORT}");
assertEquals("redis://1.1.1.1:6379", config.getAddress());
}
@Test
public void testParsingEnv_envMissing() throws IOException {
mockHostEnv(null);
mockHostProperty(null);
final SingleServerConfig config = mkConfig("${REDIS_URI}");
assertEquals("redis://${REDIS_URI}", config.getAddress());
@ -49,6 +66,14 @@ public class ConfigSupportTest {
assertEquals("redis://11.0.0.1", config.getAddress());
}
@Test
public void testParsingDefault_propertyPresent() throws IOException {
mockHostProperty("11.0.0.1");
SingleServerConfig config = mkConfig("${REDIS_URI:-10.0.0.1}");
assertEquals("redis://11.0.0.1", config.getAddress());
}
@Test
public void testParsingDefault_envPresent2() throws IOException {
@ -57,10 +82,19 @@ public class ConfigSupportTest {
assertEquals("redis://11.0.0.1:1234", config.getAddress());
}
@Test
public void testParsingDefault_propertyPresent2() throws IOException {
mockHostPortProperty("11.0.0.1", "1234");
SingleServerConfig config = mkConfig("${REDIS_HOST:-127.0.0.1}:${REDIS_PORT:-6379}");
assertEquals("redis://11.0.0.1:1234", config.getAddress());
}
@Test
public void testParsingDefault_envMissing() throws IOException {
mockHostEnv(null);
mockHostProperty(null);
SingleServerConfig config = mkConfig("${REDIS_URI:-10.0.0.1}");
assertEquals("redis://10.0.0.1", config.getAddress());
@ -69,10 +103,27 @@ public class ConfigSupportTest {
@Test
public void testParsingDefault_envMissing2() throws IOException {
mockHostPortEnv(null, null);
mockHostPortProperty(null, null);
SingleServerConfig config = mkConfig("${REDIS_HOST:-127.0.0.1}:${REDIS_PORT:-6379}");
assertEquals("redis://127.0.0.1:6379", config.getAddress());
}
@Test
public void testParsingDefaultPeriod_propertyPresent2() throws IOException {
mockHostPortPropertyPeriod("11.0.0.1", "1234");
SingleServerConfig config = mkConfig("${REDIS.HOST:-127.0.0.1}:${REDIS.PORT:-6379}");
assertEquals("redis://11.0.0.1:1234", config.getAddress());
}
@Test
public void testParsingDefaultPeriod_envMissing() throws IOException {
mockHostPortProperty(null, null);
SingleServerConfig config = mkConfig("${REDIS.HOST:-127.0.0.1}:${REDIS.PORT:-6379}");
assertEquals("redis://127.0.0.1:6379", config.getAddress());
}
private SingleServerConfig mkConfig(String authorityValue) throws IOException {
String config = "singleServerConfig:\n address: redis://" + authorityValue;
@ -87,6 +138,15 @@ public class ConfigSupportTest {
}
};
}
private void mockHostProperty(String value) {
new MockUp<System>() {
@Mock
String getProperty(String name) {
return value;
}
};
}
private void mockHostPortEnv(String host, String port) {
new MockUp<System>() {
@ -104,4 +164,36 @@ public class ConfigSupportTest {
};
}
private void mockHostPortProperty(String host, String port) {
new MockUp<System>() {
@Mock
String getProperty(String name) {
switch (name) {
case "REDIS_HOST":
return host;
case "REDIS_PORT":
return port;
default:
return null;
}
}
};
}
private void mockHostPortPropertyPeriod(String host, String port) {
new MockUp<System>() {
@Mock
String getProperty(String name) {
switch (name) {
case "REDIS.HOST":
return host;
case "REDIS.PORT":
return port;
default:
return null;
}
}
};
}
}

Loading…
Cancel
Save