У меня есть устаревший код с этими версиями (версия Spring: 3.2.1.RELEASE и версия 2.2.3.RELEASE Spring).Я хотел бы перенести все конфигурации xml весенней интеграции в конфигурацию java.Прежде чем начать миграцию, я делаю некоторый тест и борюсь с @ServiceActivator
, который не работает.Мой пример:
@Configuration
@ImportResource("classpath*:integration-config.xml")
public static class IntegrationConfig {
@Bean
public MessageChannel queueChannel() {
return new QueueChannel(5);
}
@Bean
public MessageChannel pubSubChannel() {
PublishSubscribeChannel publishSubscribeChannel = new PublishSubscribeChannel();
publishSubscribeChannel.subscribe(new MessageHandler() {
@Override
public void handleMessage(Message<?> message) throws MessagingException {
System.out.println("First handler :" + message.getPayload());
}
});
publishSubscribeChannel.subscribe(new MessageHandler() {
@Override
public void handleMessage(Message<?> message) throws MessagingException {
System.out.println("Second handler :" + message.getPayload());
}
});
return publishSubscribeChannel;
}
}
И:
@MessageEndpoint
public static class MessageEndpointDefintion {
@ServiceActivator(inputChannel = "queueChannel")
public void queueActivator(String payload) {
System.out.println("Payload from queue : " + payload);
}
@ServiceActivator(inputChannel = "pubSubChannel")
public void pubSubActivator(Message<String> message) {
System.out.println("Payload from pub-sub :" + message.getPayload());
}
}
Когда я посылаю некоторые сообщения по каналам, вызывается любой @ServiceActivator
.
Как указано здесь: , добавление @EnableIntegration
(доступно начиная с версии 4 Spring Integration) может решить проблему, но в моем случае я использую версию 2.2.3, которая не предоставляет эту аннотацию.Если они предоставляют эту аннотацию в этой версии, я думаю, что мы можем использовать ее, но как?
Другой вопрос, могу ли я обновить версию Spring Integration до 4 с той же версией Spring (3.2.1)?Спасибо
РЕДАКТИРОВАТЬ
Я называю свою конфигурацию так: AbstractApplicationContext context = new AnnotationConfigApplicationContext(IntegrationConfig.class);
и пример теста:
PublishSubscribeChannel publishSubscribeChannel;
publishSubscribeChannel = (PublishSubscribeChannel) context.getBean("pubSubChannel", MessageChannel.class);
publishSubscribeChannel.send(MessageBuilder.withPayload("==PUB-SUB-CHANNEL== ").build());
И integration-config.xml
:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.springframework.org/schema/c"
xmlns:int="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:annotation-config/>
<xsd:element name="annotation-config">
<xsd:annotation>
<xsd:documentation>
Enables annotation support for Message Endpoints.
</xsd:documentation>
</xsd:annotation>
</xsd:element>