2016-10-10 109 views
0

我使用Apache的骆驼2.16.0与Spring DSL 我在我所定义的属性占位符读取各种文件的属性一个Spring上下文XML如下 -Apache的骆驼春DSL,指的是一个环境变量HOSTNAME

<bean id="propertyPlaceholder" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/> 
    <property name="ignoreResourceNotFound" value="false"/> 
    <property name="locations"> 
     <list> 
      <value>classpath:/properties/versioning.properties</value> 
      <value>classpath:/properties/#{inetAddress.hostName}.properties</value> 
     </list> 
    </property> 
</bean> 
<bean id="inetAddress" class="java.net.InetAddress" factory-method="getLocalHost"/> 

的属性值被用来构建其他豆类如 -

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
    <property name="driverClassName" value="org.gjt.mm.mysql.Driver"/> 
    <property name="url" value="${${LIVE_}DATASOURCE_URL}"/> 
    <property name="username" value="${${LIVE_}DATASOURCE_USERNAME}"/> 
    <property name="password" value="${${LIVE_}DATASOURCE_PASSWORD}"/> 
</bean> 

这工作得很好,我可以看到正在创建的豆。 我也有另一个Spring上下文XML在同一个应用程序,它有一个骆驼上下文,我想使用相同的属性文件中定义的一些其他属性。我知道,骆驼支持Spring属性占位符,请参见下面摘录从上下文 -

<camelContext id="charge-process-context" xmlns="http://camel.apache.org/schema/spring"> 
    <propertyPlaceholder id="properties" 
     location="classpath:/properties/versioning.properties, 
          properties/${env:HOSTNAME}.properties" 
     xmlns="http://camel.apache.org/schema/spring" /> 
    ..... 
    ..... 
</camelContext> 

由于这个环境的一部分,我有一个使用的路由HTTPS从属性文件中的值,如下面的组成部分 -

<to uri="https4:{{LIVE_AUTH_RESPONSE_HOST}}:{{LIVE_AUTH_RESPONSE_PORT}}/{{LIVE_AUTH_RESPONSE_CONTEXT_PATH}}"/> 

这条路线没有启动,并抛出以下异常 -

Caused by: java.lang.IllegalArgumentException: Cannot find system environment with key: HOSTNAME 
    at org.apache.camel.util.FilePathResolver.resolvePath(FilePathResolver.java:54) 
    at org.apache.camel.component.properties.PropertiesComponent.parseLocations(PropertiesComponent.java:434) 
    at org.apache.camel.component.properties.PropertiesComponent.parseUri(PropertiesComponent.java:163) 
    at org.apache.camel.component.properties.PropertiesComponent.parseUri(PropertiesComponent.java:148) 
    at org.apache.camel.impl.DefaultCamelContext.resolvePropertyPlaceholders(DefaultCamelContext.java:2261) 
    at org.apache.camel.model.ProcessorDefinitionHelper.resolvePropertyPlaceholders(ProcessorDefinitionHelper.java:730) 
    at org.apache.camel.model.ProcessorDefinition.createOutputsProcessorImpl(ProcessorDefinition.java:427) 
    at org.apache.camel.model.ProcessorDefinition.createOutputsProcessor(ProcessorDefinition.java:413) 
    at org.apache.camel.model.ProcessorDefinition.createOutputsProcessor(ProcessorDefinition.java:165) 
    at org.apache.camel.model.ExpressionNode.createFilterProcessor(ExpressionNode.java:109) 
    at org.apache.camel.model.WhenDefinition.createProcessor(WhenDefinition.java:74) 
    at org.apache.camel.model.WhenDefinition.createProcessor(WhenDefinition.java:32) 
    at org.apache.camel.model.ProcessorDefinition.createProcessor(ProcessorDefinition.java:483) 
    at org.apache.camel.model.ChoiceDefinition.createProcessor(ChoiceDefinition.java:135) 
    at org.apache.camel.model.ProcessorDefinition.makeProcessorImpl(ProcessorDefinition.java:534) 
    at org.apache.camel.model.ProcessorDefinition.makeProcessor(ProcessorDefinition.java:495) 
    at org.apache.camel.model.ProcessorDefinition.addRoutes(ProcessorDefinition.java:219) 
    at org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:1069) 

请注意:我上的AWS部署我的应用程序为WAR文件在Tomcat 8实例。 我在Windows 10上有一个开发环境,我发现这个工作在Windows操作系统上。我还看到Apache Camel 2.16中的FilePathResolver.java文件使用System.getenv(key)获取值,即System.getenv(“HOSTNAME”),它在AWS实例上返回null,在Windows 10上返回正确的值。也尝试过使用ENV:主机名(小字母UNIX系统),但仍然没有运气...

回答

0

我找到了解决办法,在http://camel.apache.org/using-propertyplaceholder.html 在桥接弹簧和骆驼物业占位符

它提到以下 -

Spring框架不允许第三方框架(如Apache Camel)无缝挂接到Spring属性占位符机制中。然而,通过声明Spring org.springframework.beans.factory.config.PropertyPlaceholderConfigurer类型的org.apache.camel.spring.spi.BridgePropertyPlaceholderConfigurer类型,您可以轻松地连接Spring和Camel。