fromJSON and toJSON methods were added to Config object. #351

pull/382/head
Nikita 9 years ago
parent 702498628e
commit 1bdcf06f66

@ -15,9 +15,10 @@
*/
package org.redisson;
import java.io.IOException;
import org.redisson.client.codec.Codec;
import org.redisson.codec.JsonJacksonCodec;
import org.redisson.connection.ConnectionListener;
/**
* Redisson configuration
@ -49,8 +50,6 @@ public class Config {
private boolean useLinuxNativeEpoll;
private ConnectionListener connectionListener;
public Config() {
}
@ -62,7 +61,6 @@ public class Config {
oldConf.setCodec(new JsonJacksonCodec());
}
setConnectionListener(oldConf.getConnectionListener());
setThreads(oldConf.getThreads());
setCodec(oldConf.getCodec());
if (oldConf.getSingleServerConfig() != null) {
@ -337,21 +335,15 @@ public class Config {
return useLinuxNativeEpoll;
}
@Deprecated
public ConnectionListener getConnectionListener() {
return connectionListener;
public static Config fromJSON(String content) throws IOException {
ConfigSupport support = new ConfigSupport();
return support.fromJSON(content);
}
/**
* Use {@code org.redisson.core.NodesGroup#addConnectionListener(ConnectionListener)}
*
* @param connectionListener
* @return
*/
@Deprecated
public Config setConnectionListener(ConnectionListener connectionListener) {
this.connectionListener = connectionListener;
return this;
public String toJSON() throws IOException {
ConfigSupport support = new ConfigSupport();
return support.toJSON(this);
}
}

@ -0,0 +1,105 @@
package org.redisson;
import java.io.IOException;
import java.net.URI;
import java.util.List;
import org.redisson.client.codec.Codec;
import org.redisson.connection.balancer.LoadBalancer;
import com.fasterxml.jackson.annotation.JsonFilter;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ser.FilterProvider;
import com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter;
import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider;
public class ConfigSupport {
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "class")
@JsonFilter("classFilter")
public static class ClassMixIn {
}
public abstract static class SingleSeverConfigMixIn {
@JsonProperty
List<URI> address;
@JsonIgnore
abstract SingleServerConfig setAddress(String address);
@JsonIgnore
abstract URI getAddress();
@JsonIgnore
abstract void setAddress(URI address);
}
public abstract static class MasterSlaveServersConfigMixIn {
@JsonProperty
List<URI> masterAddress;
@JsonIgnore
abstract MasterSlaveServersConfig setMasterAddress(String masterAddress);
@JsonIgnore
abstract URI getMasterAddress();
@JsonIgnore
abstract void setMasterAddress(URI masterAddress);
}
@JsonIgnoreProperties("clusterConfig")
public static class ConfigMixIn {
@JsonProperty
SentinelServersConfig sentinelServersConfig;
@JsonProperty
MasterSlaveServersConfig masterSlaveServersConfig;
@JsonProperty
SingleServerConfig singleServerConfig;
@JsonProperty
ClusterServersConfig clusterServersConfig;
@JsonProperty
ElasticacheServersConfig elasticacheServersConfig;
}
ObjectMapper mapper = createMapper();
public Config fromJSON(String content) throws IOException {
return mapper.readValue(content, Config.class);
}
public String toJSON(Config config) throws IOException {
return mapper.writeValueAsString(config);
}
private ObjectMapper createMapper() {
ObjectMapper mapper = new ObjectMapper();
mapper.addMixIn(MasterSlaveServersConfig.class, MasterSlaveServersConfigMixIn.class);
mapper.addMixIn(SingleServerConfig.class, SingleSeverConfigMixIn.class);
mapper.addMixIn(Config.class, ConfigMixIn.class);
mapper.addMixIn(Codec.class, ClassMixIn.class);
mapper.addMixIn(LoadBalancer.class, ClassMixIn.class);
FilterProvider filterProvider = new SimpleFilterProvider()
.addFilter("classFilter", SimpleBeanPropertyFilter.filterOutAllExcept());
mapper.setFilterProvider(filterProvider);
mapper.setSerializationInclusion(Include.NON_NULL);
return mapper;
}
}

@ -16,7 +16,9 @@
package org.redisson;
import java.net.URI;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.redisson.misc.URIBuilder;
@ -31,7 +33,7 @@ public class MasterSlaveServersConfig extends BaseMasterSlaveServersConfig<Maste
/**
* Redis master server address
*/
private URI masterAddress;
private List<URI> masterAddress;
public MasterSlaveServersConfig() {
}
@ -49,14 +51,21 @@ public class MasterSlaveServersConfig extends BaseMasterSlaveServersConfig<Maste
* @param masterAddress
*/
public MasterSlaveServersConfig setMasterAddress(String masterAddress) {
this.masterAddress = URIBuilder.create(masterAddress);
if (masterAddress != null) {
this.masterAddress = Collections.singletonList(URIBuilder.create(masterAddress));
}
return this;
}
public URI getMasterAddress() {
return masterAddress;
if (masterAddress != null) {
return masterAddress.get(0);
}
return null;
}
public void setMasterAddress(URI masterAddress) {
this.masterAddress = masterAddress;
if (masterAddress != null) {
this.masterAddress = Collections.singletonList(masterAddress);
}
}
/**

@ -16,6 +16,8 @@
package org.redisson;
import java.net.URI;
import java.util.Collections;
import java.util.List;
import org.redisson.misc.URIBuilder;
@ -25,7 +27,7 @@ public class SingleServerConfig extends BaseConfig<SingleServerConfig> {
* Redis server address
*
*/
private URI address;
private List<URI> address;
/**
* Minimum idle subscription connection amount
@ -112,14 +114,21 @@ public class SingleServerConfig extends BaseConfig<SingleServerConfig> {
* @param address
*/
public SingleServerConfig setAddress(String address) {
this.address = URIBuilder.create(address);
if (address != null) {
this.address = Collections.singletonList(URIBuilder.create(address));
}
return this;
}
public URI getAddress() {
return address;
if (address != null) {
return address.get(0);
}
return null;
}
void setAddress(URI address) {
this.address = address;
if (address != null) {
this.address = Collections.singletonList(address);
}
}
/**

@ -4,20 +4,43 @@ import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.InetSocketAddress;
import java.net.URI;
import java.net.URL;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import org.junit.Assert;
import org.junit.Test;
import org.redisson.client.RedisConnectionException;
import org.redisson.client.WriteRedisConnectionException;
import org.redisson.client.codec.Codec;
import org.redisson.codec.SerializationCodec;
import org.redisson.connection.ConnectionListener;
import org.redisson.connection.balancer.LoadBalancer;
import org.redisson.core.ClusterNode;
import org.redisson.core.Node;
import org.redisson.core.NodesGroup;
import org.redisson.misc.URIBuilder;
import com.fasterxml.jackson.annotation.JsonFilter;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.SerializableString;
import com.fasterxml.jackson.core.io.CharacterEscapes;
import com.fasterxml.jackson.core.io.SerializedString;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ser.FilterProvider;
import com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter;
import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider;
import static org.assertj.core.api.Assertions.*;
import net.jodah.concurrentunit.Waiter;
@ -141,6 +164,36 @@ public class RedissonTest {
Assert.assertTrue(nodes.pingAll());
}
@Test
public void testClusterConfig() throws IOException {
Config originalConfig = new Config();
originalConfig.useClusterServers().addNodeAddress("123.123.1.23:1902", "9.3.1.0:1902");
String t = originalConfig.toJSON();
Config c = Config.fromJSON(t);
System.out.println(t);
assertThat(c.toJSON()).isEqualTo(t);
}
@Test
public void testSingleConfig() throws IOException {
RedissonClient r = Redisson.create();
String t = r.getConfig().toJSON();
Config c = Config.fromJSON(t);
System.out.println(t);
assertThat(c.toJSON()).isEqualTo(t);
}
@Test
public void testMasterSlaveConfig() throws IOException {
Config c2 = new Config();
c2.useMasterSlaveServers().setMasterAddress("123.1.1.1:1231").addSlaveAddress("82.12.47.12:1028");
String t = c2.toJSON();
Config c = Config.fromJSON(t);
System.out.println(t);
assertThat(c.toJSON()).isEqualTo(t);
}
@Test
public void testCluster() {
NodesGroup<ClusterNode> nodes = redisson.getClusterNodesGroup();

Loading…
Cancel
Save