我们开发了一个spring-boot服务,该服务提供一个rest api(spring-webflux)并通过RabbitMQ(spring-rabbit)发送数据。该服务已部署在Cloud Foundry上,我们在版本2.1.4中使用spring-boot。我们添加了spring-boot-starter-data-redis来使用Redis缓存一些数据,但出现以下错误:
SELECT
IF(Num_B in (select distinct Num_A from mydata) , concat(Num_A,Num_B), Null) as Comm_1,
IF(Num_C in (select distinct Num_A from mydata) , concat(Num_A,Num_C), Null) as Comm_2
FROM mydata
此错误仅在我们在Cloud Foundry上运行服务时发生,如果在本地运行,则不会出现任何错误。
我们不对连接工厂或stringRedisTemplate进行任何配置,而仅使用由spring-autoconfiguration配置的stringRedisTemplate。 我们将以下配置用于Cloud Foundry上的Redis:
pl/sql
这就是我们使用模板的方式
[io.netty.util.ResourceLeakDetector] [] LEAK: HashedWheelTimer.release() was not called before it's garbage-collected. See http://netty.io/wiki/reference-counted-objects.html for more information.
Recent access records:
Created at:
io.netty.util.HashedWheelTimer.<init>(HashedWheelTimer.java:284)
io.netty.util.HashedWheelTimer.<init>(HashedWheelTimer.java:217)
io.netty.util.HashedWheelTimer.<init>(HashedWheelTimer.java:196)
io.netty.util.HashedWheelTimer.<init>(HashedWheelTimer.java:178)
io.netty.util.HashedWheelTimer.<init>(HashedWheelTimer.java:162)
io.lettuce.core.resource.DefaultClientResources.<init>(DefaultClientResources.java:169)
io.lettuce.core.resource.DefaultClientResources$Builder.build(DefaultClientResources.java:532)
io.lettuce.core.resource.DefaultClientResources.create(DefaultClientResources.java:233)
io.lettuce.core.AbstractRedisClient.<init>(AbstractRedisClient.java:98)
io.lettuce.core.RedisClient.<init>(RedisClient.java:87)
io.lettuce.core.RedisClient.create(RedisClient.java:124)
org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory.lambda$createClient$7(LettuceConnectionFactory.java:971)
java.base/java.util.Optional.orElseGet(Unknown Source)
org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory.createClient(LettuceConnectionFactory.java:971)
org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory.afterPropertiesSet(LettuceConnectionFactory.java:273)
org.springframework.cloud.service.keyval.RedisConnectionFactoryCreator.create(RedisConnectionFactoryCreator.java:88)
org.springframework.cloud.service.keyval.RedisConnectionFactoryCreator.create(RedisConnectionFactoryCreator.java:31)
org.springframework.cloud.Cloud.getServiceConnector(Cloud.java:288)
org.springframework.cloud.Cloud.getSingletonServiceConnector(Cloud.java:202)
org.springframework.cloud.config.java.CloudServiceConnectionFactory.redisConnectionFactory(CloudServiceConnectionFactory.java:260)
org.springframework.cloud.config.java.CloudServiceConnectionFactory.redisConnectionFactory(CloudServiceConnectionFactory.java:242)
...
这些是我们的Spring依赖项:
@Configuration
@Profile( "cloud" )
public class CloudSpecificConfig extends AbstractCloudConfig {
@Bean
public RedisConnectionFactory redisConnectionFactory() {
return connectionFactory().redisConnectionFactory();
}
}
由于我们并没有进行任何特定的配置,因此我们对此感到非常困惑。在我们看来,云上的弹簧配置有问题。我们做错什么了吗?我们是否需要进行其他配置?这是错误吗?
答案 0 :(得分:0)
这就是我要做的
我会看看是否可以找到一种更优雅的方式
@Bean(destroyMethod = "shutdown")
public DefaultClientResources lettuceClientResources() {
return DefaultClientResources.create();
}
@SuppressWarnings("unused")
@Bean
public RedisConnectionFactory redisConnectionFactory(DefaultClientResources dependency) {
return connectionFactory().redisConnectionFactory("redis-pcf-service");
}
答案 1 :(得分:0)
最后,由于我们将redis客户从生菜改为jedis,问题在我们这边消失了。
生菜存在问题,我们将失去与云基础架构上的Redis服务的连接。但是,由于更改客户端的同时对redis服务进行了更新,因此我们真的不知道它是否与生菜有关。
也许自动配置与基于Cloudfoundry的云基础架构上的redis服务结合起来还是有问题的