Spring云流互斥属性问题
Spring cloud stream mutually exclusive property issue
我有 application.yml 配置,即
cloud:
stream:
poller:
# Cron for polling data.
cron: 0 0/30 * * * *
........
我遇到了类似
的错误
Description:
The following configuration properties are mutually exclusive:
spring.integration.poller.cron
spring.integration.poller.fixed-delay
spring.integration.poller.fixed-rate
However, more than one of those properties has been configured at the same time:
spring.integration.poller.cron
spring.integration.poller.fixed-delay
Action:
Update your configuration so that only one of the mutually exclusive properties is configured.
即使我没有添加 fix-delay 也显示我已经添加了它。
我看到如果 属性 不存在,PollerConfigEnvironmentPostProcessor class 会添加 fixed-delay
。那么如何使用 cron 表达式呢?
//TODO Must remain after removal of deprecated code above in the future
streamPollerProperties.putIfAbsent(INTEGRATION_PROPERTY_PREFIX + "fixed-delay", "1s");
streamPollerProperties.putIfAbsent(INTEGRATION_PROPERTY_PREFIX + "max-messages-per-poll", "1");
我还检查了 spring 集成轮询器属性而不是 spring 云流轮询器,因为它已被弃用但得到相同的错误
integration:
poller:
cron: 0 0/30 * * * *
之前使用 spring 云版本 2020.0.2,它运行良好。一旦我将 spring 云版本更新为 2021.0.1,就会开始出错
这是错误。那:
streamPollerProperties.putIfAbsent(INTEGRATION_PROPERTY_PREFIX + "fixed-delay", "1s");
如果还没有 spring.integration.poller.fixed-delay
或 spring.integration.poller.cron
, 必须是有条件的。
作为解决方法,我建议实施 EnvironmentPostProcessor
,如下所示:
public class RemoveStreamPollerEnvironmentPostProcessor implements EnvironmentPostProcessor {
@Override
public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {
environment.getPropertySources().remove("spring.integration.poller");
}
}
这样,与 Spring Cloud Stream 相关的所有 spring.integration.poller.
属性将从环境中删除。但是那些基于 spring.integration.poller.
手动配置的那些仍然存在。
因此你的:
spring:
integration:
poller:
cron: 0 0/30 * * * *
会好的。
注意:EnvironmentPostProcessor
必须在 spring.factories
中注册。
我有 application.yml 配置,即
cloud:
stream:
poller:
# Cron for polling data.
cron: 0 0/30 * * * *
........
我遇到了类似
的错误Description:
The following configuration properties are mutually exclusive:
spring.integration.poller.cron
spring.integration.poller.fixed-delay
spring.integration.poller.fixed-rate
However, more than one of those properties has been configured at the same time:
spring.integration.poller.cron
spring.integration.poller.fixed-delay
Action:
Update your configuration so that only one of the mutually exclusive properties is configured.
即使我没有添加 fix-delay 也显示我已经添加了它。
我看到如果 属性 不存在,PollerConfigEnvironmentPostProcessor class 会添加 fixed-delay
。那么如何使用 cron 表达式呢?
//TODO Must remain after removal of deprecated code above in the future
streamPollerProperties.putIfAbsent(INTEGRATION_PROPERTY_PREFIX + "fixed-delay", "1s");
streamPollerProperties.putIfAbsent(INTEGRATION_PROPERTY_PREFIX + "max-messages-per-poll", "1");
我还检查了 spring 集成轮询器属性而不是 spring 云流轮询器,因为它已被弃用但得到相同的错误
integration:
poller:
cron: 0 0/30 * * * *
之前使用 spring 云版本 2020.0.2,它运行良好。一旦我将 spring 云版本更新为 2021.0.1,就会开始出错
这是错误。那:
streamPollerProperties.putIfAbsent(INTEGRATION_PROPERTY_PREFIX + "fixed-delay", "1s");
如果还没有 spring.integration.poller.fixed-delay
或 spring.integration.poller.cron
,必须是有条件的。
作为解决方法,我建议实施 EnvironmentPostProcessor
,如下所示:
public class RemoveStreamPollerEnvironmentPostProcessor implements EnvironmentPostProcessor {
@Override
public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {
environment.getPropertySources().remove("spring.integration.poller");
}
}
这样,与 Spring Cloud Stream 相关的所有 spring.integration.poller.
属性将从环境中删除。但是那些基于 spring.integration.poller.
手动配置的那些仍然存在。
因此你的:
spring:
integration:
poller:
cron: 0 0/30 * * * *
会好的。
注意:EnvironmentPostProcessor
必须在 spring.factories
中注册。