【问题标题】:Property value is not access属性值不可访问
【发布时间】:2019-03-25 10:31:47
【问题描述】:

我是骆驼的初学者。我有一些问题。

我们正在使用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]
    

【问题讨论】:

  • 您是否尝试将 camelap.properties 放在 src/main/resources 或 src/test/resources 中?

标签: apache-camel spring-camel


【解决方案1】:

如果你想使用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

不确定您是否使用弹簧靴,有一种简单的方法可以在 Camel Route 中利用弹簧靴 properties

【讨论】:

  • 感谢您的评论。但是我想使用Property,而不是propertyPlaceholder,因为我阅读了一些文章,可以通过使用属性在运行时更改属性值,但是使用propertyplaceholder不能更改值。我想如何使用属性标签绑定属性。谢谢。
  • PropertyPlaceHolder 帮助我们从属性组件中解析值。该示例旨在帮助您修复异常。如果你使用端点uri上的属性,它只在camel解析端点时取属性的值。
猜你喜欢
  • 1970-01-01
  • 2012-11-19
  • 2012-12-07
  • 2012-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-11
相关资源
最近更新 更多