[spring-projects/spring-boot]支持RedisConnectionFactory可控

2024-04-29 162 views
1
@Configuration
@ConditionalOnClass({RedisOperations.class})
@EnableConfigurationProperties({RedisProperties.class})
@Import({LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class})
public class RedisAutoConfiguration {
@Configuration
@ConditionalOnClass({RedisClient.class})
class LettuceConnectionConfiguration extends RedisConnectionConfiguration {
@Configuration
@ConditionalOnClass({GenericObjectPool.class, JedisConnection.class, Jedis.class})
class JedisConnectionConfiguration extends RedisConnectionConfiguration {

首先,我不想自己配置工厂。请将这两个类公开,以便我可以控制这两个类的加载顺序

回答

2

版本是2.0.0.RC1

5

您能描述一下您想要解决的问题吗?

3

现在这种写法会导致JedisConnectionConfiguration这个类永远不会被加载,并且无法在框架外更改,你可能会得到一个类型的配置项

3
@Bean
    @ConditionalOnMissingBean({RedisConnectionFactory.class})
    public JedisConnectionFactory redisConnectionFactory() throws UnknownHostException {
        return this.createJedisConnectionFactory();
    }

说的重点是这个方法永远不会被加载

8

抱歉,我还是不知道你要解决什么问题。忽略 Boot 自己的代码,您想在代码中做什么?

2

这个类没有任何意义,关键方法永远不会被执行,因为它是短路的。

Jedis连接配置

8

你能理解吗,我是一个中国人,也许有些问题是用英文描述的

7

抱歉,我还是不明白,但让我尝试做出一个有根据的猜测。

如果 Lettuce 位于类路径上,您在原始描述中引用的配置将自动配置基于 Lettuce 的连接工厂。如果 Lettuce 不在类路径上,如果 Jedis 在类路径上,它将自动配置基于 Jedis 的连接工厂。如果你想使用 Jedis,那么你应该排除 Lettuce,并添加对 Jedis 的依赖。

这有帮助吗?如果没有,请描述您要解决的问题。也许分享一些描述问题的示例代码会更容易?

9

所以,LettuceConnectionConfiguration不是公开的,我不能排除它

5

没错,不能排除。然而,应该没有必要排除它。

在没有得到我所要求的信息的情况下,我已经在这个问题上花费了我能承受的所有时间。如果您希望我多花一些时间,请提供一些示例代码来演示您的问题。

6

非常感谢!

即使这个类可以排除,它已经被RedisAutoConfiguration引入了,所以,如果我想使用jedis,我需要为JedisConnectionFactory创建一个bean,而JedisConnectionConfiguration没有任何意义。

这是我一直想说的话

4

没有必要排除它。的条件LettuceConnectionConfiguration意味着如果 Lettuce 不在类路径上,它将被忽略。正如我上面所说,如果您想使用 Jedis,请从项目的依赖项中排除 Lettuce,并添加对 Jedis 的依赖项。文档中对此进行了描述。

如果您需要任何进一步的帮助,请在 Stack Overflow 上提问。

6

我明白了,我明白注释@ConditionalOnClass不到位,我回头看看源码,谢谢