/*
* Copyright 2014-2015 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.data.redis.connection; import static org.springframework.util.Assert.*;
import static org.springframework.util.StringUtils.*; import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Set; import org.springframework.core.env.MapPropertySource;
import org.springframework.core.env.PropertySource;
import org.springframework.util.StringUtils; /**
* Configuration class used for setting up {@link RedisConnection} via {@link RedisConnectionFactory} using connecting
* to <a href="http://redis.io/topics/sentinel">Redis Sentinel(s)</a>. Useful when setting up a high availability Redis
* environment.
*
* @author Christoph Strobl
* @author Thomas Darimont
* @since 1.4
*/
public class RedisSentinelConfiguration { private static final String REDIS_SENTINEL_MASTER_CONFIG_PROPERTY = "spring.redis.sentinel.master";
private static final String REDIS_SENTINEL_NODES_CONFIG_PROPERTY = "spring.redis.sentinel.nodes"; private NamedNode master;
private Set<RedisNode> sentinels; /**
* Creates new {@link RedisSentinelConfiguration}.
*/
public RedisSentinelConfiguration() {
this(new MapPropertySource("RedisSentinelConfiguration", Collections.<String, Object> emptyMap()));
} /**
* Creates {@link RedisSentinelConfiguration} for given hostPort combinations.
*
* <pre>
* sentinelHostAndPorts[0] = 127.0.0.1:23679
* sentinelHostAndPorts[1] = 127.0.0.1:23680
* ...
*
* <pre>
*
* @param sentinelHostAndPorts must not be {@literal null}.
* @since 1.5
*/
public RedisSentinelConfiguration(String master, Set<String> sentinelHostAndPorts) {
this(new MapPropertySource("RedisSentinelConfiguration", asMap(master, sentinelHostAndPorts)));
} /**
* Creates {@link RedisSentinelConfiguration} looking up values in given {@link PropertySource}.
*
* <pre>
* <code>
* spring.redis.sentinel.master=myMaster
* spring.redis.sentinel.nodes=127.0.0.1:23679,127.0.0.1:23680,127.0.0.1:23681
* </code>
* </pre>
*
* @param propertySource must not be {@literal null}.
* @since 1.5
*/
public RedisSentinelConfiguration(PropertySource<?> propertySource) { notNull(propertySource, "PropertySource must not be null!"); this.sentinels = new LinkedHashSet<RedisNode>(); if (propertySource.containsProperty(REDIS_SENTINEL_MASTER_CONFIG_PROPERTY)) {
this.setMaster(propertySource.getProperty(REDIS_SENTINEL_MASTER_CONFIG_PROPERTY).toString());
} if (propertySource.containsProperty(REDIS_SENTINEL_NODES_CONFIG_PROPERTY)) {
appendSentinels(commaDelimitedListToSet(propertySource.getProperty(REDIS_SENTINEL_NODES_CONFIG_PROPERTY)
.toString()));
}
} /**
* Set {@literal Sentinels} to connect to.
*
* @param sentinels must not be {@literal null}.
*/
public void setSentinels(Iterable<RedisNode> sentinels) { notNull(sentinels, "Cannot set sentinels to 'null'."); this.sentinels.clear(); for (RedisNode sentinel : sentinels) {
addSentinel(sentinel);
}
}
public void setSentinels(Set<RedisNode> sentinels) { notNull(sentinels, "Cannot set sentinels to 'null'."); this.sentinels.clear(); for (RedisNode sentinel : sentinels) {
addSentinel(sentinel);
}
} /**
* Returns an {@link Collections#unmodifiableSet(Set)} of {@literal Sentinels}.
*
* @return {@link Set} of sentinels. Never {@literal null}.
*/
public Set<RedisNode> getSentinels() {
return Collections.unmodifiableSet(sentinels);
} /**
* Add sentinel.
*
* @param sentinel must not be {@literal null}.
*/
public void addSentinel(RedisNode sentinel) { notNull(sentinel, "Sentinel must not be 'null'.");
this.sentinels.add(sentinel);
} /**
* Set the master node via its name.
*
* @param name must not be {@literal null}.
*/
public void setMaster(final String name) { notNull(name, "Name of sentinel master must not be null.");
setMaster(new NamedNode() { @Override
public String getName() {
return name;
}
});
} /**
* Set the master.
*
* @param master must not be {@literal null}.
*/
public void setMaster(NamedNode master) { notNull("Sentinel master node must not be 'null'.");
this.master = master;
} /**
* Get the {@literal Sentinel} master node.
*
* @return
*/
public NamedNode getMaster() {
return master;
} /**
* @see #setMaster(String)
* @param master
* @return
*/
public RedisSentinelConfiguration master(String master) {
this.setMaster(master);
return this;
} /**
* @see #setMaster(NamedNode)
* @param master
* @return
*/
public RedisSentinelConfiguration master(NamedNode master) {
this.setMaster(master);
return this;
} /**
* @see #addSentinel(RedisNode)
* @param sentinel
* @return
*/
public RedisSentinelConfiguration sentinel(RedisNode sentinel) {
this.addSentinel(sentinel);
return this;
} /**
* @see #sentinel(RedisNode)
* @param host
* @param port
* @return
*/
public RedisSentinelConfiguration sentinel(String host, Integer port) {
return sentinel(new RedisNode(host, port));
} private void appendSentinels(Set<String> hostAndPorts) { for (String hostAndPort : hostAndPorts) {
addSentinel(readHostAndPortFromString(hostAndPort));
}
} private RedisNode readHostAndPortFromString(String hostAndPort) { String[] args = split(hostAndPort, ":"); notNull(args, "HostAndPort need to be seperated by ':'.");
isTrue(args.length == 2, "Host and Port String needs to specified as host:port");
return new RedisNode(args[0], Integer.valueOf(args[1]).intValue());
} /**
* @param master must not be {@literal null} or empty.
* @param sentinelHostAndPorts must not be {@literal null}.
* @return
*/
private static Map<String, Object> asMap(String master, Set<String> sentinelHostAndPorts) { hasText(master, "Master address must not be null or empty!");
notNull(sentinelHostAndPorts, "SentinelHostAndPorts must not be null!"); Map<String, Object> map = new HashMap<String, Object>();
map.put(REDIS_SENTINEL_MASTER_CONFIG_PROPERTY, master);
map.put(REDIS_SENTINEL_NODES_CONFIG_PROPERTY, StringUtils.collectionToCommaDelimitedString(sentinelHostAndPorts)); return map;
}
}

Invalid property 'sentinels' of bean class redis  ,spring 集成redis时报的错,集成配置如下,

<!-- redis配置 -->
<bean id="redisSentinelConfiguration"
class="org.springframework.data.redis.connection.RedisSentinelConfiguration">
<property name="master">
<bean class="org.springframework.data.redis.connection.RedisNode">
<property name="name" value="${redis.sentinels.name}">
</property>
</bean>
</property>
<property name="sentinels">
<set>
<bean class="org.springframework.data.redis.connection.RedisNode">
<constructor-arg name="host" value="${redis.sentinels.ip1}" />
<constructor-arg name="port" value="${redis.sentinels.port1}" />
</bean>
<bean class="org.springframework.data.redis.connection.RedisNode">
<constructor-arg name="host" value="${redis.sentinels.ip2}" />
<constructor-arg name="port" value="${redis.sentinels.port2}" />
</bean>
</set>
</property>
</bean>
<!-- <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" >
<property name="hostName" value="${redis.hostName}"></property>
<property name="port" value="${redis.port}"></property>
<property name="password" value="${redis.password}"></property>
<property name="timeout" value="${redis.timeout}" />
<property name="usePool" value="true" />
<property name="poolConfig" ref="jedisPoolConfig" />
</bean> -->
<bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" >
<constructor-arg name="sentinelConfig" ref="redisSentinelConfiguration"></constructor-arg>
<property name="password" value="${redis.sentinels.password}"></property>
<constructor-arg name="poolConfig" ref="jedisPoolConfig"></constructor-arg>
</bean> <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
<property name="maxTotal" value="${redis.maxTotal}"></property>
<property name="maxIdle" value="${redis.maxIdle}"></property>
<property name="maxWaitMillis" value="${redis.maxWaitMillis}"></property>
<property name="testOnBorrow" value="${redis.testOnBorrow}"></property>
</bean> <bean id="stringRedisSerializer" class="org.springframework.data.redis.serializer.StringRedisSerializer" /> <!-- <bean id="jacksonJsonRedisSerializer" class="org.springframework.data.redis.serializer.JacksonJsonRedisSerializer" >
<constructor-arg type="java.lang.Class" value="java.lang.Object"/>
</bean> --> <bean id="jacksonJsonRedisSerializer" class="org.springframework.data.redis.serializer.JacksonJsonRedisSerializer" >
<constructor-arg type="java.lang.Class" value="java.lang.Object"/>
</bean> <bean id="jdkSerializationRedisSerializer" class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer"/> <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
<property name="connectionFactory" ref="jedisConnectionFactory"></property>
<property name="keySerializer" ref="stringRedisSerializer"/>
<property name="valueSerializer" ref="stringRedisSerializer" />
<property name="hashKeySerializer" ref="stringRedisSerializer" />
<property name="hashValueSerializer" ref="stringRedisSerializer"/>
</bean>
<bean id="propertyConfigurer"
  class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
  <property name="locations">
   <list>
    <value>classpath:jdbc.properties</value>
    <value>classpath:redis.properties</value>
   </list>
  </property>
 </bean>

redis 配置文件

#redis连接池配置
redis.maxTotal=300
redis.maxIdle=20
#读取超时
redis.maxWaitMillis=5000
redis.testOnBorrow=true #redis连接配置
redis.hostName=192.168.100.75
redis.port=6379
redis.password=desc@1997
#连接超时
redis.timeout=5000 #哨兵的配置
redis.sentinels.ip1=192.168.100.67
redis.sentinels.port1=26378 redis.sentinels.ip2=192.168.100.67
redis.sentinels.port2=26379 redis.sentinels.name=mymaster
redis.sentinels.password=lolaage_cache
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>1.5.0.RELEASE</version>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.6.2</version>
</dependency>

出现错误的原因是 spring用的3.1的版本,需要spring4的版本才不会报错,懒得升级版本,研究了一下,发现加个方法可以解决,

加个如下的类,RedisSentinelConfiguration ,如下的方法即可解决

public void setSentinels(Set<RedisNode> sentinels) {

notNull(sentinels, "Cannot set sentinels to 'null'.");

this.sentinels.clear();

for (RedisNode sentinel : sentinels) {
            addSentinel(sentinel);
        }
    }

Invalid property 'sentinels' of bean class redis spring 错误修改的更多相关文章

  1. Invalid property 'url' of bean class [com.mchange.v2.c3p0.ComboPooledDataSource]

    1.错误描述 INFO:2015-05-01 13:13:05[localhost-startStop-1] - Initializing c3p0-0.9.2.1 [built 20-March-2 ...

  2. Invalid property 'driver_class' of bean class

    1.错误描述 INFO:2015-05-01 13:06:07[localhost-startStop-1] - Initializing c3p0-0.9.2.1 [built 20-March-2 ...

  3. Invalid property 'annotatedClasses' of bean class

    Invalid property 'annotatedClasses' of bean class 在整合Hibernate和Spring时出现,Invalid property 'annotated ...

  4. Caused by: org.springframework.beans.NotWritablePropertyException: Invalid property 'URIType' of bean class [com.alibaba.citrus.service.uribroker.uri.GenericURIBroker]

    linux中的JDK为JDK8,tomcat为tomcat8 加入dubbo.war包 启动报错! Caused by: org.springframework.beans.factory.BeanC ...

  5. 使用springmvc时报错org.springframework.beans.NullValueInNestedPathException: Invalid property 'department' of bean class [com.atguigu.springmvc.crud.entities.Employee]:

    使用springmvc时报错 org.springframework.beans.NullValueInNestedPathException: Invalid property 'departmen ...

  6. Initialization of bean failed; nested exception is org.springframework.beans.InvalidPropertyException: Invalid property 'dataSource' of bean class [com.liuyang.jdbc.PersonDao]: No property 'dataSource

    这个错误是说我的启动失败了.这类问题要从配置文件中开始找原因,我用的是spring框架,所以我从application.中找的原因 然后对比路径,对比文件的命名和id,都没有问题,为什么会在启动的时候 ...

  7. Invalid property 'driverClassName' of bean class [com.mchange.v2.c3p0.ComboPooledDataSource]

    spring配置文件中配置c3p0错误,错误原因在于c3p0连接池与DBCP连接池在驱动.连接.数据库用户名这些属性名称的差别

  8. Error setting property values; nested exception is org.springframework.beans.NotWritablePropertyException: Invalid property 'URIType' of bean class

    查阅了资料原始JDK的问题.解决方法 1.重新安装JDK为1.7版本 2.修改配置 1.webx的依赖改为3.1.6版: <dependency> <groupId>com.a ...

  9. spring错误汇总

    在学习spring过程中遇见了种种不同的异常错误,这里做了一下总结.希望遇见类似错误的同学们共勉一下. 1. 错误一 Error creating bean with name 'helloServi ...

随机推荐

  1. win7创建webdav

    环境 win7+iis 构筑条件 存放路径:c:\Data 访问方式:192.168.x.xxx/webdav 用户名:yx 密码:yx 搭建顺序 1.添加iis.启动->控制面板->程序 ...

  2. Linux下Makefile的automake生成全攻略

    作为Linux下的程序开发人员,大家一定都遇到过Makefile,用make命令来编译自己写的程序确实是很方便.一般情况下,大家都是手工写一个简单Makefile,如果要想写出一个符合自由软件惯例的M ...

  3. [Angular] Set Metadata in HTTP Headers with Angular HttpHeaders

    Besides sending (or requesting) the actual data to the server API, there’s also often the need to se ...

  4. uva 10641 (来当雷锋的这回....)

    #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> using ...

  5. 模拟实现Spring IoC功能

    为了加深理解Spring 今天自己写了一个模拟的Spring.... 步骤: 1.利用jdom解析bean.xml(pull,sax也能够,我这里用了jdom) 2.先解析全部的<bean/&g ...

  6. Thrift源代码分析(七)-- TServerserver分析

    Thrift採用了TServer来作为server的抽象,提供了多种类型的server实现.用TServerTransport作为server的Acceptor抽象,来监听端口.创建clientSoc ...

  7. bzoj3275: Number(最小割)

    3275: Number 题目:传送门 题解: 双倍经验@bzoj3158 代码: #include<cstdio> #include<cstring> #include< ...

  8. bzoj1022: [SHOI2008]小约翰的游戏John(博弈SG-nim游戏)

    1022: [SHOI2008]小约翰的游戏John 题目:传送门 题目大意: 一道反nim游戏,即给出n堆石子,每次可以取完任意一堆或一堆中的若干个(至少取1),最后一个取的LOSE  题解: 一道 ...

  9. m_Orchestrate learning system---四、多看参考文档很多事情很轻松就解决了

    m_Orchestrate learning system---四.多看参考文档很多事情很轻松就解决了 一.总结 一句话总结:多看参考文档啊 1.面包屑导航如何实现? 1 <ol class=& ...

  10. m_Orchestrate learning system---九、在无法保证是否有图片的情况下,如何保证页面格式

    m_Orchestrate learning system---九.在无法保证是否有图片的情况下,如何保证页面格式 一.总结 一句话总结:都配上默认缩略图就可以解决了 1.如何获取页面get方式传过来 ...