Maven Spring与Spring引导应用程序的集成

Maven Spring与Spring引导应用程序的集成,maven,spring-boot,Maven,Spring Boot,嗨,我是一个新手,我正在尝试实现SpringMQTT与SpringBoot应用程序的集成,下面是我的主要类 package com.ehydromet.springboot; import org.eclipse.paho.client.mqttv3.IMqttClient; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootAppl

嗨,我是一个新手,我正在尝试实现SpringMQTT与SpringBoot应用程序的集成,下面是我的主要类

package com.ehydromet.springboot;
import org.eclipse.paho.client.mqttv3.IMqttClient;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.ComponentScan;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ImportResource;
import org.springframework.integration.support.MessageBuilder;
import org.springframework.messaging.MessageChannel;

import com.ehydromet.outbound.MqttClientFactoryBean;
import com.ehydromet.outbound.MqttSendingMessageHandler;

@EntityScan(basePackages = {"com.ehydromet.entity"})
@SpringBootApplication(scanBasePackages={"com.ehydromet"})
public class SpringBootStandAloneApp extends SpringBootServletInitializer {

@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
    System.out.println("hi i am servlet initializer");
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MqttConfiguration.class);

        MessageChannel messageChannel = context.getBean("messages", MessageChannel.class);
        messageChannel.send(MessageBuilder.withPayload("Josh and Andy say hi!".getBytes()).build());
    return application.sources(SpringBootStandAloneApp.class);

}
public static void main(String[] args) {
    System.out.println("hi i am main function");
    SpringApplication.run(SpringBootStandAloneApp.class, args);
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MqttConfiguration.class);

        MessageChannel messageChannel = context.getBean("messages", MessageChannel.class);
        messageChannel.send(MessageBuilder.withPayload("Josh and Andy say hi!".getBytes()).build());
}
 @Configuration
    @ImportResource("simple-integration.xml")
    public static class MqttConfiguration {
        @Bean
        public MqttClientFactoryBean mqttClientFactoryBean() {
            return new MqttClientFactoryBean("localhost");
        }

        @Bean
        public MqttSendingMessageHandler mqttSendingMessageHandler(IMqttClient client) {
            return new MqttSendingMessageHandler(client, "cats");
        }
    }
}
下面是spring-integration.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:mqtt="http://www.springframework.org/schema/integration"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                        http://www.springframework.org/schema/beans/spring-beans.xsd
                        http://www.springframework.org/schema/integration
                        http://www.springframework.org/schema/integration/spring-integration.xsd ">

<int:channel id="messages"/>
<int:outbound-channel-adapter ref="mqttSendingMessageHandler" channel="messages" />
</beans>

例外情况的原因是

Could not open ServletContext resource [/simple-integration.xml]
ServletContextResources:

解释web应用程序根目录中的相对路径

改用

 @ImportResource("classpath:simple-integration.xml")
 @ImportResource("classpath:simple-integration.xml")