我无法使用Spring Boot连接Redis Sentinal节点。我在创建bean cacheManager和localCacheManager时收到UnsatisfiedDependencyException。我没有做错事。谁能帮我一下吗。
使用Spring boot版本- 2.6。Maven依赖项是-
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>2.6.6</version>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>4.2.2</version>
<optional>true</optional>
</dependency>
代码-
@EnableAutoConfiguration
@Configuration
@EnableCaching
public class RedisCacheConfig {
private final Logger logger = LoggerFactory.getLogger(RedisCacheConfig.class);
@Value("${spring.profiles.active}")
private String profiles;
@Value("${redis.sentinel.nodes}")
private String sentinelNodes;
@Value("${redis.sentinel.password}")
private String redisPassword;
@Value("${redis.sentinel.master.name}")
private String redisMasterName;
@Value("${redis.sentinel.master.node}")
private String redisMasterNode;
@Value("${redis.sentinel.port}")
private Integer redisSentinelPort;
@Value("${redis.port}")
private Integer redisPort;
@Value("${pool.max.wait.seconds}")
public int secondsToWait;
@Value("${pool.max.total}")
public int maxTotal;
@Value("${pool.max.idle}")
public int maxIdle;
@Value("${pool.min.idle}")
public int minIdle;
public String cacheNames;
@Bean
public CacheManager cacheManager(RedisTemplate<String, String> redisTemplate) {
if(!StringUtils.hasLength(profiles)) {
if(profiles.toLowerCase().contains("dev")) {
cacheNames = ":DEV:";
} else if(profiles.toLowerCase().contains("qa")) {
cacheNames = ":PROD:";
}
}
RedisCacheManager.builder(connectionFactory())
.cacheDefaults(RedisCacheConfiguration
.defaultCacheConfig().prefixCacheNameWith(cacheNames)).build();
return cacheManager(redisTemplate);
}
@Bean
public static PropertySourcesPlaceholderConfigurer propertyPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
@Bean
public JedisConnectionFactory connectionFactory() {
JedisConnectionFactory factory = null;
try {
long seconds=secondsToWait * 1000L;
JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxTotal(maxTotal);
poolConfig.setMaxIdle(maxIdle);
poolConfig.setMinIdle(minIdle);
poolConfig.setTestOnBorrow(true);
poolConfig.setTestOnReturn(true);
poolConfig.setTestWhileIdle(true);
poolConfig.setMaxWaitMillis(seconds);
factory = new JedisConnectionFactory(sentinelConfig(), poolConfig);
factory.setUsePool(true);
factory.setPassword(redisPassword);
factory.setPort(redisPort);
factory.afterPropertiesSet();
} catch(Exception e) {
e.printStackTrace();
}
return factory;
}
@Bean
public RedisSentinelConfiguration sentinelConfig() {
String[] nodes = StringUtils.commaDelimitedListToStringArray(sentinelNodes);
logger.info("===================== Connecting to Redis 3 =====================");
logger.info(Arrays.toString(nodes));
final RedisSentinelConfiguration SENTINEL_CONFIG = new RedisSentinelConfiguration().master(redisMasterName).sentinel(redisMasterNode, redisSentinelPort);
SENTINEL_CONFIG.setPassword(redisPassword);
for (String node : nodes) {
SENTINEL_CONFIG.sentinel(node, redisSentinelPort);
}
return SENTINEL_CONFIG;
}
}
代码 (重制模板) -
@Bean
public RedisTemplate<Object, Object> redisTemplate(JedisConnectionFactory cf) {
RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<Object, Object>();
redisTemplate.setConnectionFactory(cf);
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setDefaultSerializer(new GenericJackson2JsonRedisSerializer());
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setKeySerializer(new GenericToStringSerializer<Long>(Long.class));
return redisTemplate;
}
下面是我得到的错误代码-
取消刷新尝试:创建名为'localCacheManager'的bean:通过字段'redisCacheManager'表示的不满足依赖项;
嵌套异常 在类路径资源中定义了名称“缓存管理器”的 Bean 时出错 [com/RedisCacheConfig.class]:
嵌套异常 在类路径资源中定义名称为“字符串RedisTemplate”的 Bean 时出错 [组织/Spring框架/引导/自动配置/数据/redis/RedisAuto 配置.class]:通过方法“字符串RedisTemplate”参数 0 表示的未满足的依赖关系;
嵌套异常为org . spring framework . beans . factory . beancreationexception:创建在类路径资源[com/ABC/mbile/XYZ/rediscacheconfig . class]中定义的名为“connectionFactory”的bean时出错:通过工厂方法进行的Bean实例化失败;
嵌套异常是org.springframework.beans。BeaInstantiationException:未能实例化[org.springframework.data.redis.connection.jedis.jedis.JedisConnectionFactory]:工厂方法“connectionFactory”引发异常;
嵌套异常是Java . lang . noclassdeffounderror:redis/clients/jedis/geo unit
您正在尝试将Jedis 4.x与Spring boot 2.x配合使用。将Jedis4.x与Springboot 2.x配合使用可能会很困难。
有一些用户正在使用Jedis 4,但如果您没有使用某些特定功能并且愿意完成一些额外的工作,这是可能的。
在Spring发布对Jedis 4的支持之前,你可能会考虑坚持使用Jedis 3.x。
问题内容: 我有一些漂亮的标准代码,它从流中获取序列化的对象,基本上看起来像这样: 然后,我的资源文件夹中有一个文件,因此在开发机器上,我可以将其引用为文件或JarResource: 在我的脑海中,两个都应该做完全相同的事情。但是,碰巧两种情况都解析为有效(非空)流,但是FileInputStream正确地从我的getObjectFromStream(InputStream)方法返回了一个Obje
问题内容: 我想创建一个简单的JNI层。我使用Visual Studio 2008创建了一个dll(带有DLL作为选项的Win 32 Console Application项目类型)。我在调用本地方法时收到此异常: 生成的头文件是: 实现文件是: Java文件是: 当我调用本地方法“ Hello”时,我得到执行。 我观察到的另一件事是,当我使用以下命令在命令行中进行编译时:“ cl -I” C:\
我刚从下载了Tess4Jhttp://tess4j.sourceforge.net/并将其导入到netbeans中。我遵循这个url,我正确地遵循了每一步,但当我尝试执行时,我得到了下面的错误。 错误: 我搜索并发现人们建议更新到 Visual Visual Studio 2013 的可再发行组件包,我做了,但事实证明没有帮助,我仍然遇到同样的问题。我不知道我做错了什么,下面是我的代码。 代码:
我在stackoverflow上四处寻找类似的问题,但我找到的解决方案似乎都不适合我。我在一台Linux /Ubuntu机器上。我只是在练习JNI,但我发现了这个错误: 我提供了我的 .c、.h 和 .java文件。 .java文件: .c文件: .h 文件: 我使用这些命令生成. h文件,编译/生成. so文件,然后运行: JAVACnativetest.java javah-jni nativ
我用vscode写了一个java程序。但是我在java输出中得到了意想不到的答案。通常这个sout应该是6.6,但是java说6.6000000000000005。为什么