1

我使用的是弹簧靴2.2.4.RELEASE和骆驼版2.23.0

为了使骆驼可以访问属性并在uri路由中使用它们{{ }}

添加camel-spring-boot-starter依赖和定义PropertySourcesPlaceholderConfigurerSpringCamelContextbean就足够了

@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-starter3.0.0-RC3遵循迁移指南并修复了组件的导入之后。在运行时,骆驼找不到属性,我得到了这个:

Property with key [xxx] not found in properties from text: activemq:queue:{{xxx}}

任何想法发生了什么变化,为什么{{ }}我的路线不再起作用?


更新 1

我更新了弹簧靴来回,我2.2.6.RELEASE仍然得到同样的东西camel-spring-boot-starter......3.2.0org.apache.camel.springboot

路线并不花哨。

我需要{{ }}从中读取xxxmyProperties.properties

使用@Value("${xxx}")works,spring可以访问它,我可以将它传递给路由URI字符串。

在骆驼 URI 中访问{{xxx}}是更新后停止工作的原因。

@Component
public class MyRoutes extends RouteBuilder {
    @Override
    public void configure() throws Exception {
        from("activemq:queue:{{xxx}}")
            .to("activemq:topic:targetTopic");
    }
}

更新 2

我反映了接受答案所做的测试。去除SpringCamelContextPropertySourcesPlaceholderConfigurer豆子就可以了。

我取出了豆子SpringCamelContext,它起作用了。显然,这个新的 spring camel starter 会SpringCamelContext自行处理,我的 bean 使用了与骆驼读取属性相关的自动配置{{ }}

我还删除了 bean PropertySourcesPlaceholderConfigurer,@Value 并没有停止工作。

4

1 回答 1

1

您是否在 Spring Boot 应用程序中使用 application.properties 文件?如果是这样 {{}} 应该可以工作。不过,查看您的骆驼代码会有所帮助。

编辑1:

这对我有用。我正在使用 Spring Boot 2.2.6 运行 Camel 3.2.0。prop=Hello World我的类路径中的文件中有一个属性myProperties.properties。我不必定义PropertySourcesPlaceholderConfigurerand SpringCamelContextbean

@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:

您可能正在从交易所取回您的财产,这可能会导致此问题。自 Camel 版本 3.0.0 以来,从交换中获取属性已更改。你能试一下吗exchangeProperty("xxx")

于 2020-04-28T12:51:04.733 回答