使用 spring boot 2.2.4 更新到 camel 3.0.0-RC3 后,Camel 在文本属性中找不到 {{xxx}}
Camel cannot find {{xxx}} in properties from text after update to camel 3.0.0-RC3 using spring boot 2.2.4
我使用的是 spring boot 2.2.4.RELEASE
和 camel 版本 2.23.0
为了使 camel 能够访问属性并使用 {{ }}
在 uri 路由中使用它们
添加 camel-spring-boot-starter
依赖项并定义 PropertySourcesPlaceholderConfigurer
、SpringCamelContext
bean 足以使其工作
@SpringBootApplication
@PropertySource(ignoreResourceNotFound = false, value= {"classpath:myProperties.properties"})
public class MyApp {
...
@Bean
public SpringCamelContext camelContext(ApplicationContext applicationContext) {
return new SpringCamelContext(applicationContext);
}
@Bean
public static PropertySourcesPlaceholderConfigurer propertyConfigInDev() {
return new PropertySourcesPlaceholderConfigurer();
}
}
--
现在,在我按照迁移指南将 camel-spring-boot-starter
更新为 3.0.0-RC3
并修复了组件的导入之后。在运行时,骆驼找不到属性,我得到这个:
Property with key [xxx] not found in properties from text: activemq:queue:{{xxx}}
任何想法有什么变化以及为什么 {{ }}
在我的路线中不再起作用?
更新 1
我将 spring 引导更新为 2.2.6.RELEASE
,将 camel-spring-boot-starter
从 org.apache.camel.springboot
更新为 3.2.0
我仍然得到同样的结果...
路线并不花哨。
我需要 {{ }}
从 myProperties.properties
中读取 xxx
值
使用@Value("${xxx}")
有效,spring可以访问它,我可以将它传递给路由URI字符串。
访问 {{xxx}}
中的骆驼 URI 是更新后停止工作的。
@Component
public class MyRoutes extends RouteBuilder {
@Override
public void configure() throws Exception {
from("activemq:queue:{{xxx}}")
.to("activemq:topic:targetTopic");
}
}
更新 2
我复制了接受答案所做的测试。删除 SpringCamelContext
和 PropertySourcesPlaceholderConfigurer
bean 就成功了。
我删除了 bean SpringCamelContext
并且它起作用了。显然这个新的 spring camel starter 自己处理 SpringCamelContext
并且我的 bean 使用 {{ }}
覆盖了与 camel 读取属性相关的自动配置
我也删除了 bean PropertySourcesPlaceholderConfigurer
并且 @Value 没有停止工作。
您是否在 spring 启动应用程序中使用 application.properties 文件?如果是这样,{{}} 应该可以工作。不过,看看你的骆驼代码会有所帮助。
编辑 1:
这对我有用。我是 运行 Camel 3.2.0 和 Spring Boot 2.2.6。我的类路径中的文件 myProperties.properties
中有一个 属性 prop=Hello World
。我不必定义 PropertySourcesPlaceholderConfigurer
和 SpringCamelContext
beans
@SpringBootApplication
@PropertySource(ignoreResourceNotFound = false, value = {"classpath:myProperties.properties"})
public class DemoApplication extends RouteBuilder{
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@Override
public void configure() throws Exception {
from("timer:foo?repeatCount=1")
.log("{{prop}}");
}
}
日志
2020-04-28 21:26:57.904 INFO 10392 --- [ restartedMain] o.a.c.impl.engine.AbstractCamelContext : Route: route6 started and consuming from: timer://foo
2020-04-28 21:26:57.921 INFO 10392 --- [ restartedMain] o.a.c.impl.engine.AbstractCamelContext : Total 1 routes, of which 1 are started
2020-04-28 21:26:57.937 INFO 10392 --- [ restartedMain] o.a.c.impl.engine.AbstractCamelContext : Apache Camel 3.2.0 (CamelContext: camel-6) started in 0.067 seconds
2020-04-28 21:26:57.938 INFO 10392 --- [ restartedMain] c.p.testproperties.DemoApplication : Started DemoApplication in 0.406 seconds (JVM running for 82.808)
2020-04-28 21:26:57.955 INFO 10392 --- [ restartedMain] .ConditionEvaluationDeltaLoggingListener : Condition evaluation unchanged
2020-04-28 21:26:58.920 INFO 10392 --- [4 - timer://foo] route6 : Hello World
编辑 2:
您可能正在从 Exchange 获取您的 属性,这可能会导致此问题。从 Camel 版本 3.0.0 开始,从交易所获取属性已经改变。你能试试exchangeProperty("xxx")
我使用的是 spring boot 2.2.4.RELEASE
和 camel 版本 2.23.0
为了使 camel 能够访问属性并使用 {{ }}
添加 camel-spring-boot-starter
依赖项并定义 PropertySourcesPlaceholderConfigurer
、SpringCamelContext
bean 足以使其工作
@SpringBootApplication
@PropertySource(ignoreResourceNotFound = false, value= {"classpath:myProperties.properties"})
public class MyApp {
...
@Bean
public SpringCamelContext camelContext(ApplicationContext applicationContext) {
return new SpringCamelContext(applicationContext);
}
@Bean
public static PropertySourcesPlaceholderConfigurer propertyConfigInDev() {
return new PropertySourcesPlaceholderConfigurer();
}
}
--
现在,在我按照迁移指南将 camel-spring-boot-starter
更新为 3.0.0-RC3
并修复了组件的导入之后。在运行时,骆驼找不到属性,我得到这个:
Property with key [xxx] not found in properties from text: activemq:queue:{{xxx}}
任何想法有什么变化以及为什么 {{ }}
在我的路线中不再起作用?
更新 1
我将 spring 引导更新为 2.2.6.RELEASE
,将 camel-spring-boot-starter
从 org.apache.camel.springboot
更新为 3.2.0
我仍然得到同样的结果...
路线并不花哨。
我需要 {{ }}
从 myProperties.properties
xxx
值
使用@Value("${xxx}")
有效,spring可以访问它,我可以将它传递给路由URI字符串。
访问 {{xxx}}
中的骆驼 URI 是更新后停止工作的。
@Component
public class MyRoutes extends RouteBuilder {
@Override
public void configure() throws Exception {
from("activemq:queue:{{xxx}}")
.to("activemq:topic:targetTopic");
}
}
更新 2
我复制了接受答案所做的测试。删除 SpringCamelContext
和 PropertySourcesPlaceholderConfigurer
bean 就成功了。
我删除了 bean SpringCamelContext
并且它起作用了。显然这个新的 spring camel starter 自己处理 SpringCamelContext
并且我的 bean 使用 {{ }}
我也删除了 bean PropertySourcesPlaceholderConfigurer
并且 @Value 没有停止工作。
您是否在 spring 启动应用程序中使用 application.properties 文件?如果是这样,{{}} 应该可以工作。不过,看看你的骆驼代码会有所帮助。
编辑 1:
这对我有用。我是 运行 Camel 3.2.0 和 Spring Boot 2.2.6。我的类路径中的文件 myProperties.properties
中有一个 属性 prop=Hello World
。我不必定义 PropertySourcesPlaceholderConfigurer
和 SpringCamelContext
beans
@SpringBootApplication
@PropertySource(ignoreResourceNotFound = false, value = {"classpath:myProperties.properties"})
public class DemoApplication extends RouteBuilder{
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@Override
public void configure() throws Exception {
from("timer:foo?repeatCount=1")
.log("{{prop}}");
}
}
日志
2020-04-28 21:26:57.904 INFO 10392 --- [ restartedMain] o.a.c.impl.engine.AbstractCamelContext : Route: route6 started and consuming from: timer://foo
2020-04-28 21:26:57.921 INFO 10392 --- [ restartedMain] o.a.c.impl.engine.AbstractCamelContext : Total 1 routes, of which 1 are started
2020-04-28 21:26:57.937 INFO 10392 --- [ restartedMain] o.a.c.impl.engine.AbstractCamelContext : Apache Camel 3.2.0 (CamelContext: camel-6) started in 0.067 seconds
2020-04-28 21:26:57.938 INFO 10392 --- [ restartedMain] c.p.testproperties.DemoApplication : Started DemoApplication in 0.406 seconds (JVM running for 82.808)
2020-04-28 21:26:57.955 INFO 10392 --- [ restartedMain] .ConditionEvaluationDeltaLoggingListener : Condition evaluation unchanged
2020-04-28 21:26:58.920 INFO 10392 --- [4 - timer://foo] route6 : Hello World
编辑 2:
您可能正在从 Exchange 获取您的 属性,这可能会导致此问题。从 Camel 版本 3.0.0 开始,从交易所获取属性已经改变。你能试试exchangeProperty("xxx")