属性 值未访问
Property value is not access
我是骆驼初学者。我有一些问题。
我们正在使用 camel 实现文件传输系统。
我从外部 属性 文件设置 属性。
但应用程序无法访问此 属性 文件。我们不能使用 propertyplaceholder
因为该值将在运行时更改。
我们实现如下。
camelContext.xml
:
<bean id="myProperties" class="java.util.Properties"/>
<bean id="propertylist"
class="org.apache.camel.component.properties.PropertiesComponent">
<property name="cache" value="true"/>
<property name="location" value="classpath:camelap.properties"/>
<property name="overrideProperties" ref="myProperties"/>
</bean>
<camelContext id="camelContext-f611cb6c-d516-4346-9adc-5512d327a88d"
trace="false" xmlns="http://camel.apache.org/schema/spring">
<camel:route id="initial_info">
<camel:from id="_initial" uri="direct:sqlParam"/>
<camel:to id="_selectReference" uri="sql:{{sql.referenceInfo}}?
dataSource=dataSource"/>
<camel:process id="_process1" ref="tempBean"/>
<camel:log id="_aaaa" loggingLevel="WARN" message="tttttttt :::
{{test}} ::: ${header.sourceDirectory}"/>
</camel:route>
camelap.properties
:
path : target/classes
file.uri=/home/WRK/KR/SND/DAT
test=OLD_VALUE
file.pattern=SLPNPM*,SPLNCC*,SLPNCM*,SLPNPC*
############################################
## SQL Statement ##
############################################
sql.referenceInfo=SELECT DISTINCT \
A.WFLOW_INST_ID ,\
TO_CHAR(A.EFCT_ST_DT,'YYYYMMDDHH24MISS') EFCT_ST_DT, \
B.NE_ID , \
B.NE_TYPE_ID , \
B.CDR_FILE_COLEC_DIR_NM , \
B.ORIGIN_FMT_ID , \
B.TRM_DIR_NM , \
D.CDR_FILE_NMNG_RULE_SBST, \
D.FILE_NM_LEN , \
B.FNS_FILE_CRET_YN , \
B.FNS_FILE_DIV_CD \
FROM TB_WFLOW_INFO A, \
TB_CDRSEND_BASE_INFO B, \
TB_FILE_FMT_INFO D \
WHERE A.WFLOW_INST_ID = 'P1_IPTVKR' \
AND B.NE_ID = 'KRLPPM10' \
AND now() BETWEEN A.EFCT_ST_DT AND A.EXP_DT \
AND now() BETWEEN B.EFCT_ST_DT AND B.EXP_DT \
AND A.WFLOW_INST_ID = B.WFLOW_INST_ID \
AND B.ORIGIN_FMT_ID = D.CDR_FILE_FMT_ID;
Error Log
:
org.apache.camel.RuntimeCamelException:
org.apache.camel.FailedToCreateRouteException: Failed to create route initial_info at: >>> To[sql:{{sql.referenceInfo}}?dataSource=dataSource] <<< in route: Route(initial_info)[[From[direct:sqlParam]] -> [To[sql:{{sql... because of Property with key [sql.referenceInfo] not found in properties from text: sql:{{sql.referenceInfo}}?dataSource=dataSource
at org.apache.camel.util.ObjectHelper.wrapRuntimeCamelException(ObjectHelper.java:1826) ~[camel-core-2.23.1.jar:2.23.1]
at org.apache.camel.spring.SpringCamelContext.start(SpringCamelContext.java:136) ~[camel-spring-2.23.1.jar:2.23.1]
at org.apache.camel.spring.CamelContextFactoryBean.start(CamelContextFactoryBean.java:370) ~[camel-spring-2.23.1.jar:2.23.1]
at org.apache.camel.spring.CamelContextFactoryBean.onApplicationEvent(CamelContextFactoryBean.java:417) ~[camel-spring-2.23.1.jar:2.23.1]
at org.apache.camel.spring.CamelContextFactoryBean.onApplicationEvent(CamelContextFactoryBean.java:95) ~[camel-spring-2.23.1.jar:2.23.1]
at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172) ~[spring-context-5.1.5.RELEASE.jar:5.1.5.RELEASE]
at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165) ~[spring-context-5.1.5.RELEASE.jar:5.1.5.RELEASE]
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139) ~[spring-context-5.1.5.RELEASE.jar:5.1.5.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:402) ~[spring-context-5.1.5.RELEASE.jar:5.1.5.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:359) ~[spring-context-5.1.5.RELEASE.jar:5.1.5.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:896) ~[spring-context-5.1.5.RELEASE.jar:5.1.5.RELEASE]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.finishRefresh(ServletWebServerApplicationContext.java:163) ~[spring-boot-2.1.3.RELEASE.jar:2.1.3.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:552) ~[spring-context-5.1.5.RELEASE.jar:5.1.5.RELEASE]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:142) ~[spring-boot-2.1.3.RELEASE.jar:2.1.3.RELEASE]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:775) ~[spring-boot-2.1.3.RELEASE.jar:2.1.3.RELEASE]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) ~[spring-boot-2.1.3.RELEASE.jar:2.1.3.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:316) ~[spring-boot-2.1.3.RELEASE.jar:2.1.3.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1260) ~[spring-boot-2.1.3.RELEASE.jar:2.1.3.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1248) ~[spring-boot-2.1.3.RELEASE.jar:2.1.3.RELEASE]
at com.ktds.openmzn.OpenmznApplication.main(OpenmznApplication.java:25) ~[classes/:na]
.....
Caused by: java.lang.IllegalArgumentException: Property with key [sql.referenceInfo] not found in properties from text: sql:{{sql.referenceInfo}}?dataSource=dataSource
at org.apache.camel.component.properties.DefaultPropertiesParser$ParsingContext.getPropertyValue(DefaultPropertiesParser.java:271) ~[camel-core-2.23.1.jar:2.23.1]
at org.apache.camel.component.properties.DefaultPropertiesParser$ParsingContext.readProperty(DefaultPropertiesParser.java:157) ~[camel-core-2.23.1.jar:2.23.1]
at org.apache.camel.component.properties.DefaultPropertiesParser$ParsingContext.doParse(DefaultPropertiesParser.java:116) ~[camel-core-2.23.1.jar:2.23.1]
at org.apache.camel.component.properties.DefaultPropertiesParser$ParsingContext.parse(DefaultPropertiesParser.java:100) ~[camel-core-2.23.1.jar:2.23.1]
at org.apache.camel.component.properties.DefaultPropertiesParser.parseUri(DefaultPropertiesParser.java:63) ~[camel-core-2.23.1.jar:2.23.1]
at org.apache.camel.component.properties.PropertiesComponent.parseUri(PropertiesComponent.java:235) ~[camel-core-2.23.1.jar:2.23.1]
at org.apache.camel.component.properties.PropertiesComponent.parseUri(PropertiesComponent.java:178) ~[camel-core-2.23.1.jar:2.23.1]
at org.apache.camel.impl.DefaultCamelContext.resolvePropertyPlaceholders(DefaultCamelContext.java:2547) ~[camel-core-2.23.1.jar:2.23.1]
如果要使用properties组件,需要给name绑定properties,就像这样
<camelContext trace="{{foo.trace}}" xmlns="http://camel.apache.org/schema/spring">
<propertyPlaceholder id="properties" location="org/apache/camel/spring/processor/myprop.properties"/>
<template id="camelTemplate" defaultEndpoint="{{foo.cool}}"/>
<route>
<from uri="direct:start"/>
<setHeader headerName="{{foo.header}}">
<simple>${in.body} World!</simple>
</setHeader>
<to uri="mock:result"/>
</route>
</camelContext>
您可以找到更多信息here
不确定您是否使用 spring 引导,有一种简单的方法可以利用 spring 引导 properties within Camel Route。
我是骆驼初学者。我有一些问题。
我们正在使用 camel 实现文件传输系统。
我从外部 属性 文件设置 属性。
但应用程序无法访问此 属性 文件。我们不能使用 propertyplaceholder
因为该值将在运行时更改。
我们实现如下。
camelContext.xml
:<bean id="myProperties" class="java.util.Properties"/> <bean id="propertylist" class="org.apache.camel.component.properties.PropertiesComponent"> <property name="cache" value="true"/> <property name="location" value="classpath:camelap.properties"/> <property name="overrideProperties" ref="myProperties"/> </bean> <camelContext id="camelContext-f611cb6c-d516-4346-9adc-5512d327a88d" trace="false" xmlns="http://camel.apache.org/schema/spring"> <camel:route id="initial_info"> <camel:from id="_initial" uri="direct:sqlParam"/> <camel:to id="_selectReference" uri="sql:{{sql.referenceInfo}}? dataSource=dataSource"/> <camel:process id="_process1" ref="tempBean"/> <camel:log id="_aaaa" loggingLevel="WARN" message="tttttttt ::: {{test}} ::: ${header.sourceDirectory}"/> </camel:route>
camelap.properties
:path : target/classes file.uri=/home/WRK/KR/SND/DAT test=OLD_VALUE file.pattern=SLPNPM*,SPLNCC*,SLPNCM*,SLPNPC* ############################################ ## SQL Statement ## ############################################ sql.referenceInfo=SELECT DISTINCT \ A.WFLOW_INST_ID ,\ TO_CHAR(A.EFCT_ST_DT,'YYYYMMDDHH24MISS') EFCT_ST_DT, \ B.NE_ID , \ B.NE_TYPE_ID , \ B.CDR_FILE_COLEC_DIR_NM , \ B.ORIGIN_FMT_ID , \ B.TRM_DIR_NM , \ D.CDR_FILE_NMNG_RULE_SBST, \ D.FILE_NM_LEN , \ B.FNS_FILE_CRET_YN , \ B.FNS_FILE_DIV_CD \ FROM TB_WFLOW_INFO A, \ TB_CDRSEND_BASE_INFO B, \ TB_FILE_FMT_INFO D \ WHERE A.WFLOW_INST_ID = 'P1_IPTVKR' \ AND B.NE_ID = 'KRLPPM10' \ AND now() BETWEEN A.EFCT_ST_DT AND A.EXP_DT \ AND now() BETWEEN B.EFCT_ST_DT AND B.EXP_DT \ AND A.WFLOW_INST_ID = B.WFLOW_INST_ID \ AND B.ORIGIN_FMT_ID = D.CDR_FILE_FMT_ID;
Error Log
:org.apache.camel.RuntimeCamelException: org.apache.camel.FailedToCreateRouteException: Failed to create route initial_info at: >>> To[sql:{{sql.referenceInfo}}?dataSource=dataSource] <<< in route: Route(initial_info)[[From[direct:sqlParam]] -> [To[sql:{{sql... because of Property with key [sql.referenceInfo] not found in properties from text: sql:{{sql.referenceInfo}}?dataSource=dataSource at org.apache.camel.util.ObjectHelper.wrapRuntimeCamelException(ObjectHelper.java:1826) ~[camel-core-2.23.1.jar:2.23.1] at org.apache.camel.spring.SpringCamelContext.start(SpringCamelContext.java:136) ~[camel-spring-2.23.1.jar:2.23.1] at org.apache.camel.spring.CamelContextFactoryBean.start(CamelContextFactoryBean.java:370) ~[camel-spring-2.23.1.jar:2.23.1] at org.apache.camel.spring.CamelContextFactoryBean.onApplicationEvent(CamelContextFactoryBean.java:417) ~[camel-spring-2.23.1.jar:2.23.1] at org.apache.camel.spring.CamelContextFactoryBean.onApplicationEvent(CamelContextFactoryBean.java:95) ~[camel-spring-2.23.1.jar:2.23.1] at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172) ~[spring-context-5.1.5.RELEASE.jar:5.1.5.RELEASE] at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165) ~[spring-context-5.1.5.RELEASE.jar:5.1.5.RELEASE] at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139) ~[spring-context-5.1.5.RELEASE.jar:5.1.5.RELEASE] at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:402) ~[spring-context-5.1.5.RELEASE.jar:5.1.5.RELEASE] at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:359) ~[spring-context-5.1.5.RELEASE.jar:5.1.5.RELEASE] at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:896) ~[spring-context-5.1.5.RELEASE.jar:5.1.5.RELEASE] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.finishRefresh(ServletWebServerApplicationContext.java:163) ~[spring-boot-2.1.3.RELEASE.jar:2.1.3.RELEASE] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:552) ~[spring-context-5.1.5.RELEASE.jar:5.1.5.RELEASE] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:142) ~[spring-boot-2.1.3.RELEASE.jar:2.1.3.RELEASE] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:775) ~[spring-boot-2.1.3.RELEASE.jar:2.1.3.RELEASE] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) ~[spring-boot-2.1.3.RELEASE.jar:2.1.3.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:316) ~[spring-boot-2.1.3.RELEASE.jar:2.1.3.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1260) ~[spring-boot-2.1.3.RELEASE.jar:2.1.3.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1248) ~[spring-boot-2.1.3.RELEASE.jar:2.1.3.RELEASE] at com.ktds.openmzn.OpenmznApplication.main(OpenmznApplication.java:25) ~[classes/:na] ..... Caused by: java.lang.IllegalArgumentException: Property with key [sql.referenceInfo] not found in properties from text: sql:{{sql.referenceInfo}}?dataSource=dataSource at org.apache.camel.component.properties.DefaultPropertiesParser$ParsingContext.getPropertyValue(DefaultPropertiesParser.java:271) ~[camel-core-2.23.1.jar:2.23.1] at org.apache.camel.component.properties.DefaultPropertiesParser$ParsingContext.readProperty(DefaultPropertiesParser.java:157) ~[camel-core-2.23.1.jar:2.23.1] at org.apache.camel.component.properties.DefaultPropertiesParser$ParsingContext.doParse(DefaultPropertiesParser.java:116) ~[camel-core-2.23.1.jar:2.23.1] at org.apache.camel.component.properties.DefaultPropertiesParser$ParsingContext.parse(DefaultPropertiesParser.java:100) ~[camel-core-2.23.1.jar:2.23.1] at org.apache.camel.component.properties.DefaultPropertiesParser.parseUri(DefaultPropertiesParser.java:63) ~[camel-core-2.23.1.jar:2.23.1] at org.apache.camel.component.properties.PropertiesComponent.parseUri(PropertiesComponent.java:235) ~[camel-core-2.23.1.jar:2.23.1] at org.apache.camel.component.properties.PropertiesComponent.parseUri(PropertiesComponent.java:178) ~[camel-core-2.23.1.jar:2.23.1] at org.apache.camel.impl.DefaultCamelContext.resolvePropertyPlaceholders(DefaultCamelContext.java:2547) ~[camel-core-2.23.1.jar:2.23.1]
如果要使用properties组件,需要给name绑定properties,就像这样
<camelContext trace="{{foo.trace}}" xmlns="http://camel.apache.org/schema/spring">
<propertyPlaceholder id="properties" location="org/apache/camel/spring/processor/myprop.properties"/>
<template id="camelTemplate" defaultEndpoint="{{foo.cool}}"/>
<route>
<from uri="direct:start"/>
<setHeader headerName="{{foo.header}}">
<simple>${in.body} World!</simple>
</setHeader>
<to uri="mock:result"/>
</route>
</camelContext>
您可以找到更多信息here
不确定您是否使用 spring 引导,有一种简单的方法可以利用 spring 引导 properties within Camel Route。