Spring integration MQTT-Spring集成

Spring integration MQTT-Spring集成,spring-integration,Spring Integration,我正在尝试运行示例MQTT-SPring集成项目。我如何修改一些配置细节以从属性文件获取。并尝试从runMQTT.java文件连接到MessageBroker 代码片段如下所示 MQTT-Context.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001

我正在尝试运行示例MQTT-SPring集成项目。我如何修改一些配置细节以从属性文件获取。并尝试从
runMQTT.java
文件连接到MessageBroker

代码片段如下所示

MQTT-Context.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:int="http://www.springframework.org/schema/integration"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:int-mqtt="http://www.springframework.org/schema/integration/mqtt"
    xsi:schemaLocation="
        http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration-4.1.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
        http://www.springframework.org/schema/integration/mqtt http://www.springframework.org/schema/integration/mqtt/spring-integration-mqtt-4.1.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-4.1.xsd">


    <bean id="clientFactory"
        class="org.springframework.integration.mqtt.core.DefaultMqttPahoClientFactory">
        <property name="userName" value="username" />
        <property name="password" value="password" />
        <property name="serverURIs" value="${serveruri}"></property>
    </bean>

    <!-- intercept and log every message -->
    <int:logging-channel-adapter id="logger"
        level="ERROR" />
    <int:wire-tap channel="logger" />
    <!-- Mark the auto-startup="true" for starting MqttPahoMessageDrivenChannelAdapter from configuration  -->
    <int-mqtt:message-driven-channel-adapter
        id="startCaseAdapter" client-id="clientId" url="${mqttbrokerurl}"
        topics="topic" channel="startCase" auto-startup="true"  />
    <int:channel id="startCase" />


    <int:service-activator id="startCaseService"
        input-channel="startCase" ref="mqttCaseService" method="startCase" />

    <bean id="mqttCaseService" class="com.XXX.integration.ieg.mqtt.MqttCaseService" />
</beans>
根上下文
根上下文如下所示

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="
           http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context.xsd">
     <!-- This file will be the root context file for web app. All other context will be imported here -->
     <!-- Security context . Now the spring security with basic authentication implemented. OAuth2 will be implemented -->
    <import resource="security-config.xml" />
    <!-- rest service call context -->
    <import resource="classpath:META-INF/spring/integration/rest/applicationContext-http-int.xml"/>
    <!--  Sftp context-->
    <import resource="classpath:META-INF/spring/integration/sftp/SftpInboundReceive-context.xml"/>
    <import resource="classpath:META-INF/spring/integration/sftp/SftpOutboundTransfer-context.xml"/>
    <import resource="classpath:META-INF/spring/integration/sftp/SftpOutboundTransfer-poll.xml"/>
    <!--  mqtt context-->
    <import resource="classpath:META-INF/spring/integration/mqtt/mqtt-context.xml"/>


    <!--Component scan base package  -->
    <context:component-scan base-package="com.XXX.integration.ieg"/>
    <!-- All the property configuration moved to parent context file to solve the propert not found exception -->
        <context:property-placeholder order="1"
        location="classpath:/sftpuser.properties, classpath:/sftpfile.properties,classpath:/resthttp.properties, classpath:/mqtt.properties" ignore-unresolvable="true"/>

</beans>

在这种情况下,mqtt或sftp或resthttp属性加载失败。请帮助解决

java.lang.IllegalArgumentException: ${mqttbrokerurl}
    at org.eclipse.paho.client.mqttv3.MqttConnectOptions.validateURI(MqttConnectOptions.java:448)
    at org.eclipse.paho.client.mqttv3.MqttAsyncClient.<init>(MqttAsyncClient.java:260)
    at org.springframework.integration.mqtt.core.DefaultMqttPahoClientFactory.getAsyncClientInstance(DefaultMqttPahoClientFactory.java:119)
    at org.springframework.integration.mqtt.inbound.MqttPahoMessageDrivenChannelAdapter.connectAndSubscribe(MqttPahoMessageDrivenChannelAdapter.java:189)
    at org.springframework.integration.mqtt.inbound.MqttPahoMessageDrivenChannelAdapter.doStart(MqttPahoMessageDrivenChannelAdapter.java:110)
    at org.springframework.integration.endpoint.AbstractEndpoint.start(AbstractEndpoint.java:94)
    at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:173)
    at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:51)
    at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:346)
    at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:149)
    at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:112)
    at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:770)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:483)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
    at com.XXX.integration.ieg.mqtt.RunMqtt.test(RunMqtt.java:18)
    at com.XXX.integration.ieg.mqtt.RunMqtt.main(RunMqtt.java:39)
stacktrace

java.lang.IllegalArgumentException: ${mqttbrokerurl}
    at org.eclipse.paho.client.mqttv3.MqttConnectOptions.validateURI(MqttConnectOptions.java:448)
    at org.eclipse.paho.client.mqttv3.MqttAsyncClient.<init>(MqttAsyncClient.java:260)
    at org.springframework.integration.mqtt.core.DefaultMqttPahoClientFactory.getAsyncClientInstance(DefaultMqttPahoClientFactory.java:119)
    at org.springframework.integration.mqtt.inbound.MqttPahoMessageDrivenChannelAdapter.connectAndSubscribe(MqttPahoMessageDrivenChannelAdapter.java:189)
    at org.springframework.integration.mqtt.inbound.MqttPahoMessageDrivenChannelAdapter.doStart(MqttPahoMessageDrivenChannelAdapter.java:110)
    at org.springframework.integration.endpoint.AbstractEndpoint.start(AbstractEndpoint.java:94)
    at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:173)
    at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:51)
    at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:346)
    at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:149)
    at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:112)
    at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:770)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:483)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
    at com.XXX.integration.ieg.mqtt.RunMqtt.test(RunMqtt.java:18)
    at com.XXX.integration.ieg.mqtt.RunMqtt.main(RunMqtt.java:39)
java.lang.IllegalArgumentException:${mqttbrokerurl}
位于org.eclipse.paho.client.mqttv3.MqttConnectOptions.validateURI(MqttConnectOptions.java:448)
位于org.eclipse.paho.client.mqttv3.MqttAsyncClient.(MqttAsyncClient.java:260)
位于org.springframework.integration.mqtt.core.DefaultMqttPahoClientFactory.getAsyncClientInstance(DefaultMqttPahoClientFactory.java:119)
位于org.springframework.integration.mqtt.inbound.MqttPahoMessageDrivenChannelAdapter.connectAndSubscribe(MqttPahoMessageDrivenChannelAdapter.java:189)
位于org.springframework.integration.mqtt.inbound.MqttPahoMessageDrivenChannelAdapter.doStart(MqttPahoMessageDrivenChannelAdapter.java:110)
位于org.springframework.integration.endpoint.AbstractEndpoint.start(AbstractEndpoint.java:94)
位于org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:173)
位于org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:51)
位于org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:346)
位于org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:149)
位于org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:112)
位于org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:770)
位于org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:483)
位于org.springframework.context.support.ClassPathXmlApplicationContext。(ClassPathXmlApplicationContext.java:139)
位于org.springframework.context.support.ClassPathXmlApplicationContext。(ClassPathXmlApplicationContext.java:83)
位于com.XXX.integration.ieg.mqtt.RunMqtt.test(RunMqtt.java:18)
位于com.XXX.integration.ieg.mqtt.RunMqtt.main(RunMqtt.java:39)
属性文件 mqtt.properties
mqttbrokerrurl=tcp://172.18.128.150:1883根据StackTrace,您的属性占位符没有解析,这只是因为您的属性文件没有

即使你说它是:

属性(mqttbrokerurl、serveruri)是从根上下文加载的

我在你的代码中没有看到这些东西:

  • 仅显示
    MQTT Context.xml

  • 您的
    RunMqtt
    仅启动该上下文:

    new ClassPathXmlApplicationContext("/META-INF/spring/integration/mqtt/mqtt-context.xml");
    

  • 因此,请修复这些问题,并返回给我们进一步的进展。

    请参阅。在web应用程序中运行时,类路径与web上下文相关。

    根上下文如下所示:无问题!但正如我所说:您不需要从
    RunMqtt
    加载它,只需
    mqtt context.xml
    ,您应该确保
    classpath:/mqtt.properties
    是正确的路径,并且您的属性文件位于根目录中。否则,您应该在
    .M-M-M中为上下文指定完整路径。这不适合你吗<代码>类路径:/mqtt.properties。我的意思是没有slashPlease,打开
    org.springframewrok
    DEBUG
    ,查看日志中
    propertysourcesplaceconfigurer
    对文件的说明。