Add auto configuration for Spring 4.1 JMS features
This commit adds two additional auto-configuration items that are new in Spring 4.1 * A JmsMessagingTemplate is automatically created if none is present * A default JmsListenerContainerFactory is automatically created if @EnableJms has been triggered and no default has been set manually Fixes gh-1298
This commit is contained in:
parent
6217c1b095
commit
d089685935
|
|
@ -29,12 +29,17 @@ import org.springframework.boot.autoconfigure.jms.hornetq.HornetQAutoConfigurati
|
||||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.jms.annotation.EnableJms;
|
||||||
|
import org.springframework.jms.annotation.JmsListenerAnnotationBeanPostProcessor;
|
||||||
|
import org.springframework.jms.config.DefaultJmsListenerContainerFactory;
|
||||||
|
import org.springframework.jms.core.JmsMessagingTemplate;
|
||||||
import org.springframework.jms.core.JmsTemplate;
|
import org.springframework.jms.core.JmsTemplate;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@link EnableAutoConfiguration Auto-configuration} for Spring JMS.
|
* {@link EnableAutoConfiguration Auto-configuration} for Spring JMS.
|
||||||
*
|
*
|
||||||
* @author Greg Turnquist
|
* @author Greg Turnquist
|
||||||
|
* @author Stephane Nicoll
|
||||||
*/
|
*/
|
||||||
@Configuration
|
@Configuration
|
||||||
@ConditionalOnClass(JmsTemplate.class)
|
@ConditionalOnClass(JmsTemplate.class)
|
||||||
|
|
@ -57,4 +62,29 @@ public class JmsAutoConfiguration {
|
||||||
return jmsTemplate;
|
return jmsTemplate;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ConditionalOnClass(JmsMessagingTemplate.class)
|
||||||
|
@ConditionalOnMissingBean(JmsMessagingTemplate.class)
|
||||||
|
protected static class MessagingTemplateConfiguration {
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public JmsMessagingTemplate jmsMessagingTemplate(JmsTemplate jmsTemplate) {
|
||||||
|
return new JmsMessagingTemplate(jmsTemplate);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@ConditionalOnClass(EnableJms.class)
|
||||||
|
@ConditionalOnBean(JmsListenerAnnotationBeanPostProcessor.class)
|
||||||
|
protected static class AnnotationDrivenConfiguration {
|
||||||
|
|
||||||
|
@ConditionalOnMissingBean(name = "jmsListenerContainerFactory")
|
||||||
|
@Bean
|
||||||
|
public DefaultJmsListenerContainerFactory jmsListenerContainerFactory(ConnectionFactory connectionFactory) {
|
||||||
|
DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
|
||||||
|
factory.setConnectionFactory(connectionFactory);
|
||||||
|
return factory;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -29,6 +29,11 @@ import org.springframework.boot.test.EnvironmentTestUtils;
|
||||||
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
|
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.jms.annotation.EnableJms;
|
||||||
|
import org.springframework.jms.config.DefaultJmsListenerContainerFactory;
|
||||||
|
import org.springframework.jms.config.JmsListenerContainerFactory;
|
||||||
|
import org.springframework.jms.config.SimpleJmsListenerContainerFactory;
|
||||||
|
import org.springframework.jms.core.JmsMessagingTemplate;
|
||||||
import org.springframework.jms.core.JmsTemplate;
|
import org.springframework.jms.core.JmsTemplate;
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
|
|
@ -46,40 +51,69 @@ public class JmsAutoConfigurationTests {
|
||||||
private AnnotationConfigApplicationContext context;
|
private AnnotationConfigApplicationContext context;
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testDefaultJmsTemplate() {
|
public void testDefaultJmsConfiguration() {
|
||||||
load(TestConfiguration.class);
|
load(TestConfiguration.class);
|
||||||
JmsTemplate jmsTemplate = this.context.getBean(JmsTemplate.class);
|
|
||||||
ActiveMQConnectionFactory connectionFactory = this.context
|
ActiveMQConnectionFactory connectionFactory = this.context
|
||||||
.getBean(ActiveMQConnectionFactory.class);
|
.getBean(ActiveMQConnectionFactory.class);
|
||||||
assertNotNull(jmsTemplate);
|
JmsTemplate jmsTemplate = this.context.getBean(JmsTemplate.class);
|
||||||
assertNotNull(connectionFactory);
|
JmsMessagingTemplate messagingTemplate = this.context.getBean(JmsMessagingTemplate.class);
|
||||||
assertEquals(jmsTemplate.getConnectionFactory(), connectionFactory);
|
assertEquals(jmsTemplate.getConnectionFactory(), connectionFactory);
|
||||||
|
assertEquals(jmsTemplate, messagingTemplate.getJmsTemplate());
|
||||||
assertEquals(ActiveMQProperties.DEFAULT_EMBEDDED_BROKER_URL,
|
assertEquals(ActiveMQProperties.DEFAULT_EMBEDDED_BROKER_URL,
|
||||||
((ActiveMQConnectionFactory) jmsTemplate.getConnectionFactory())
|
((ActiveMQConnectionFactory) jmsTemplate.getConnectionFactory())
|
||||||
.getBrokerURL());
|
.getBrokerURL());
|
||||||
|
assertFalse("No listener container factory should be created by default",
|
||||||
|
context.containsBean("jmsListenerContainerFactory"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testConnectionFactoryBackoff() {
|
public void testConnectionFactoryBackOff() {
|
||||||
load(TestConfiguration2.class);
|
load(TestConfiguration2.class);
|
||||||
assertEquals("foobar", this.context.getBean(ActiveMQConnectionFactory.class)
|
assertEquals("foobar", this.context.getBean(ActiveMQConnectionFactory.class)
|
||||||
.getBrokerURL());
|
.getBrokerURL());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testJmsTemplateBackoff() {
|
public void testJmsTemplateBackOff() {
|
||||||
load(TestConfiguration3.class);
|
load(TestConfiguration3.class);
|
||||||
JmsTemplate jmsTemplate = this.context.getBean(JmsTemplate.class);
|
JmsTemplate jmsTemplate = this.context.getBean(JmsTemplate.class);
|
||||||
assertEquals(999, jmsTemplate.getPriority());
|
assertEquals(999, jmsTemplate.getPriority());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testJmsTemplateBackoffEverything() {
|
public void testJmsMessagingTemplateBackOff() {
|
||||||
this.context = createContext(TestConfiguration2.class, TestConfiguration3.class);
|
load(TestConfiguration5.class);
|
||||||
|
JmsMessagingTemplate messagingTemplate = this.context.getBean(JmsMessagingTemplate.class);
|
||||||
|
assertEquals("fooBar", messagingTemplate.getDefaultDestinationName());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testJmsTemplateBackOffEverything() {
|
||||||
|
this.context = createContext(TestConfiguration2.class, TestConfiguration3.class, TestConfiguration5.class);
|
||||||
JmsTemplate jmsTemplate = this.context.getBean(JmsTemplate.class);
|
JmsTemplate jmsTemplate = this.context.getBean(JmsTemplate.class);
|
||||||
assertEquals(999, jmsTemplate.getPriority());
|
assertEquals(999, jmsTemplate.getPriority());
|
||||||
assertEquals("foobar", this.context.getBean(ActiveMQConnectionFactory.class)
|
assertEquals("foobar", this.context.getBean(ActiveMQConnectionFactory.class)
|
||||||
.getBrokerURL());
|
.getBrokerURL());
|
||||||
|
JmsMessagingTemplate messagingTemplate = this.context.getBean(JmsMessagingTemplate.class);
|
||||||
|
assertEquals("fooBar", messagingTemplate.getDefaultDestinationName());
|
||||||
|
assertEquals(jmsTemplate, messagingTemplate.getJmsTemplate());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testEnableJmsCreateDefaultContainerFactory() {
|
||||||
|
load(EnableJmsConfiguration.class);
|
||||||
|
JmsListenerContainerFactory<?> jmsListenerContainerFactory =
|
||||||
|
this.context.getBean("jmsListenerContainerFactory", JmsListenerContainerFactory.class);
|
||||||
|
assertEquals(DefaultJmsListenerContainerFactory.class, jmsListenerContainerFactory.getClass());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testJmsListenerContainerFactoryBackOff() {
|
||||||
|
this.context = createContext(TestConfiguration6.class, EnableJmsConfiguration.class);
|
||||||
|
JmsListenerContainerFactory<?> jmsListenerContainerFactory =
|
||||||
|
this.context.getBean("jmsListenerContainerFactory", JmsListenerContainerFactory.class);
|
||||||
|
assertEquals(SimpleJmsListenerContainerFactory.class, jmsListenerContainerFactory.getClass());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
@ -97,7 +131,7 @@ public class JmsAutoConfigurationTests {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testJmsTemplateOverridden() {
|
public void testPubSubDomainOverride() {
|
||||||
load(TestConfiguration.class, "spring.jms.pubSubDomain:false");
|
load(TestConfiguration.class, "spring.jms.pubSubDomain:false");
|
||||||
JmsTemplate jmsTemplate = this.context.getBean(JmsTemplate.class);
|
JmsTemplate jmsTemplate = this.context.getBean(JmsTemplate.class);
|
||||||
ActiveMQConnectionFactory connectionFactory = this.context
|
ActiveMQConnectionFactory connectionFactory = this.context
|
||||||
|
|
@ -245,4 +279,33 @@ public class JmsAutoConfigurationTests {
|
||||||
return bean;
|
return bean;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
protected static class TestConfiguration5 {
|
||||||
|
@Bean
|
||||||
|
JmsMessagingTemplate jmsMessagingTemplate(JmsTemplate jmsTemplate) {
|
||||||
|
JmsMessagingTemplate messagingTemplate = new JmsMessagingTemplate(jmsTemplate);
|
||||||
|
messagingTemplate.setDefaultDestinationName("fooBar");
|
||||||
|
return messagingTemplate;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
protected static class TestConfiguration6 {
|
||||||
|
@Bean
|
||||||
|
JmsListenerContainerFactory<?> jmsListenerContainerFactory(ConnectionFactory connectionFactory) {
|
||||||
|
SimpleJmsListenerContainerFactory factory = new SimpleJmsListenerContainerFactory();
|
||||||
|
factory.setConnectionFactory(connectionFactory);
|
||||||
|
return factory;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
@EnableJms
|
||||||
|
protected static class EnableJmsConfiguration {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue