本文介绍了JedisPoolConfig无法分配给GenericObjectPoolConfig的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我在Heroku上托管了一个基于Spring的Java Web应用程序.我正在尝试使用Redis实现来利用Spring Caching抽象.服务器启动时,出现错误消息:
I have a Spring based java web application hosted on Heroku. I am attempting to utilize the Spring Caching abstraction using the Redis implementation. When the server starts, I get an error saying:
Type 'redis/clients/jedis/JedisPoolConfig' (current frame, stack[3]) is not assignable to 'org/apache/commons/pool2/impl/GenericObjectPoolConfig'
这是我的配置:
@Bean
RedisConnectionFactory jedisConnectionFactory() throws Exception {
URI redisUri = new URI(System.getenv("REDISCLOUD_URL"));
JedisConnectionFactory redisConnectionFactory = new JedisConnectionFactory();
redisConnectionFactory.setHostName(redisUri.getHost());
redisConnectionFactory.setPort(redisUri.getPort());
redisConnectionFactory.setPassword(redisUri.getUserInfo().split(":",2)[1]);
redisConnectionFactory.setUsePool(true);
return redisConnectionFactory;
}
@Bean
RedisTemplate<Object, Object> redisTemplate() {
RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<Object, Object>();
try {
redisTemplate.setConnectionFactory(jedisConnectionFactory());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return redisTemplate;
}
@Override
@Bean
public CacheManager cacheManager() {
// configure and return an implementation of Spring's CacheManager SPI
RedisCacheManager manager = new RedisCacheManager(redisTemplate());
List<String> caches = new ArrayList<String>();
caches.add("Suppliers");
caches.add("Manufacturer");
caches.add("Sheeting");
caches.add("SignTypeFlat");
manager.setCacheNames(caches);
return manager;
}
这是整个错误消息:
Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: Factory m ethod [org.springframework.data.redis.connection.RedisConnectionFactory com.signInventory.config.ProdDataSourceConfiguration.jedisConnectionFactory() throws java.lang.Exception] threw exception; nested exception is java.lang.VerifyError: Bad type on operand stack Exception Details: Location:
org/springframework/data/redis/connection/jedis/JedisConnectionFactory.afterPropertiesSet()V @109: invokespecial Reason:
Type 'redis/clients/jedis/JedisPoolConfig' (current frame, stack[3]) is not assignable to 'org/apache/commons/pool2/impl/GenericObjectPoolConfig' Current Frame:
bci: @109
flags: { }
locals: { 'org/springframework/data/redis/connection/jedis/JedisConnectionFactory' }
stack: { 'org/springframework/data/redis/connection/jedis/JedisConnectionFactory', uninitialized 73, uninitialized 73, 'redis/clients/jedis/JedisPoolConfig', 'java/lang/String', integer, integer, 'java/lang/String' } Bytecode:
0000000: 2ab4 000d c700 3d2a bb00 1759 2ab4 0003
0000010: 2ab4 0004 b700 18b5 000d 2ab4 0019 b800
0000020: 1a99 000e 2ab4 000d 2ab4 0019 b600 1b2a
0000030: b400 059e 000e 2ab4 000d 2ab4 0005 b600
0000040: 1c2a b400 0699 002e 2abb 001d 592a b400
0000050: 0a2a b400 0db6 001e 2ab4 000d b600 1f2a
0000060: b400 0db6 0020 2ab4 000d b600 21b7 0022
0000070: b500 07b1 Stackmap Table:
same_frame(@47)
same_frame(@65)
same_frame(@115) at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:181) at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:578) ... 36 more Caused by: java.lang.VerifyError: Bad type on operand stack Exception Details: Location:
org/springframework/data/redis/connection/jedis/JedisConnectionFactory.afterPropertiesSet()V @109: invokespecial Reason:
Type 'redis/clients/jedis/JedisPoolConfig' (current frame, stack[3]) is not assignable to 'org/apache/commons/pool2/impl/GenericObjectPoolConfig' Current Frame:
bci: @109
flags: { }
locals: { 'org/springframework/data/redis/connection/jedis/JedisConnectionFactory' }
stack: { 'org/springframework/data/redis/connection/jedis/JedisConnectionFactory', uninitialized 73, uninitialized 73, 'redis/clients/jedis/JedisPoolConfig', 'java/lang/String', integer, integer, 'java/lang/String' } Bytecode:
0000000: 2ab4 000d c700 3d2a bb00 1759 2ab4 0003
0000010: 2ab4 0004 b700 18b5 000d 2ab4 0019 b800
0000020: 1a99 000e 2ab4 000d 2ab4 0019 b600 1b2a
0000030: b400 059e 000e 2ab4 000d 2ab4 0005 b600
0000040: 1c2a b400 0699 002e 2abb 001d 592a b400
0000050: 0a2a b400 0db6 001e 2ab4 000d b600 1f2a
0000060: b400 0db6 0020 2ab4 000d b600 21b7 0022
0000070: b500 07b1 Stackmap Table:
same_frame(@47)
same_frame(@65)
same_frame(@115) at com.signInventory.config.ProdDataSourceConfiguration.jedisConnectionFactory(ProdDataSourceConfiguration.java:46) at com.signInventory.config.ProdDataSourceConfiguration$$EnhancerByCGLIB$$258faa2b.CGLIB$jedisConnectionFactory$8(<generated>) at com.signInventory.config.ProdDataSourceConfiguration$$EnhancerByCGLIB$$258faa2b$$FastClassByCGLIB$$b4f3aedd.invoke(<generated>) at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228) at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:286) at com.signInventory.config.ProdDataSourceConfiguration$$EnhancerByCGLIB$$258faa2b.jedisConnectionFactory(<generated>) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:160) ... 37 more
任何帮助将不胜感激.
谢谢!
推荐答案
当我升级到Spring Data Redis v1.2.1-RELEASE时,出现了完全相同的问题.将Jedis升级到最新版本-v2.4.2后,我解决了该问题.如果您使用的是Maven,请检查以下依赖项.
Had exactly the same problem when I upgraded to Spring Data Redis v1.2.1-RELEASE. I solved the problem after upgrading Jedis to the latest version - v2.4.2. If you are using Maven, check the following dependencies.
<properties>
<spring.data.redis>1.2.1.RELEASE</spring.data.redis>
<jedis>2.4.2</jedis>
</properties>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>${spring.data.redis}</version>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>${jedis}</version>
</dependency>
希望这会有所帮助:)
这篇关于JedisPoolConfig无法分配给GenericObjectPoolConfig的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!