Skip to content

Commit 657411d

Browse files
committed
Merge pull request #17531 from nosan
* pr/17531: Polish "Configure ActiveMQConnectionFactory properly without spring-jms" Configure ActiveMQConnectionFactory properly without spring-jms Closes gh-17531
2 parents 260acd0 + 1661da8 commit 657411d

File tree

2 files changed

+42
-34
lines changed

2 files changed

+42
-34
lines changed

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jms/activemq/ActiveMQConnectionFactoryConfiguration.java

Lines changed: 27 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616

1717
package org.springframework.boot.autoconfigure.jms.activemq;
1818

19-
import java.util.List;
2019
import java.util.stream.Collectors;
2120

2221
import javax.jms.ConnectionFactory;
@@ -49,46 +48,41 @@
4948
class ActiveMQConnectionFactoryConfiguration {
5049

5150
@Configuration
52-
@ConditionalOnClass(CachingConnectionFactory.class)
5351
@ConditionalOnProperty(prefix = "spring.activemq.pool", name = "enabled", havingValue = "false",
5452
matchIfMissing = true)
5553
static class SimpleConnectionFactoryConfiguration {
5654

57-
private final JmsProperties jmsProperties;
58-
59-
private final ActiveMQProperties properties;
60-
61-
private final List<ActiveMQConnectionFactoryCustomizer> connectionFactoryCustomizers;
62-
63-
SimpleConnectionFactoryConfiguration(JmsProperties jmsProperties, ActiveMQProperties properties,
64-
ObjectProvider<ActiveMQConnectionFactoryCustomizer> connectionFactoryCustomizers) {
65-
this.jmsProperties = jmsProperties;
66-
this.properties = properties;
67-
this.connectionFactoryCustomizers = connectionFactoryCustomizers.orderedStream()
68-
.collect(Collectors.toList());
55+
@Bean
56+
@ConditionalOnProperty(prefix = "spring.jms.cache", name = "enabled", havingValue = "false")
57+
public ActiveMQConnectionFactory jmsConnectionFactory(ActiveMQProperties properties,
58+
ObjectProvider<ActiveMQConnectionFactoryCustomizer> factoryCustomizers) {
59+
return new ActiveMQConnectionFactoryFactory(properties,
60+
factoryCustomizers.orderedStream().collect(Collectors.toList()))
61+
.createConnectionFactory(ActiveMQConnectionFactory.class);
6962
}
7063

71-
@Bean
64+
@ConditionalOnClass(CachingConnectionFactory.class)
7265
@ConditionalOnProperty(prefix = "spring.jms.cache", name = "enabled", havingValue = "true",
7366
matchIfMissing = true)
74-
public CachingConnectionFactory cachingJmsConnectionFactory() {
75-
JmsProperties.Cache cacheProperties = this.jmsProperties.getCache();
76-
CachingConnectionFactory connectionFactory = new CachingConnectionFactory(createConnectionFactory());
77-
connectionFactory.setCacheConsumers(cacheProperties.isConsumers());
78-
connectionFactory.setCacheProducers(cacheProperties.isProducers());
79-
connectionFactory.setSessionCacheSize(cacheProperties.getSessionCacheSize());
80-
return connectionFactory;
81-
}
82-
83-
@Bean
84-
@ConditionalOnProperty(prefix = "spring.jms.cache", name = "enabled", havingValue = "false")
85-
public ActiveMQConnectionFactory jmsConnectionFactory() {
86-
return createConnectionFactory();
87-
}
67+
static class CachingConnectionFactoryConfiguration {
68+
69+
@Bean
70+
@ConditionalOnProperty(prefix = "spring.jms.cache", name = "enabled", havingValue = "true",
71+
matchIfMissing = true)
72+
public CachingConnectionFactory cachingJmsConnectionFactory(JmsProperties jmsProperties,
73+
ActiveMQProperties properties,
74+
ObjectProvider<ActiveMQConnectionFactoryCustomizer> factoryCustomizers) {
75+
JmsProperties.Cache cacheProperties = jmsProperties.getCache();
76+
CachingConnectionFactory connectionFactory = new CachingConnectionFactory(
77+
new ActiveMQConnectionFactoryFactory(properties,
78+
factoryCustomizers.orderedStream().collect(Collectors.toList()))
79+
.createConnectionFactory(ActiveMQConnectionFactory.class));
80+
connectionFactory.setCacheConsumers(cacheProperties.isConsumers());
81+
connectionFactory.setCacheProducers(cacheProperties.isProducers());
82+
connectionFactory.setSessionCacheSize(cacheProperties.getSessionCacheSize());
83+
return connectionFactory;
84+
}
8885

89-
private ActiveMQConnectionFactory createConnectionFactory() {
90-
return new ActiveMQConnectionFactoryFactory(this.properties, this.connectionFactoryCustomizers)
91-
.createConnectionFactory(ActiveMQConnectionFactory.class);
9286
}
9387

9488
}
@@ -98,8 +92,7 @@ private ActiveMQConnectionFactory createConnectionFactory() {
9892
static class PooledConnectionFactoryConfiguration {
9993

10094
@Bean(destroyMethod = "stop")
101-
@ConditionalOnProperty(prefix = "spring.activemq.pool", name = "enabled", havingValue = "true",
102-
matchIfMissing = false)
95+
@ConditionalOnProperty(prefix = "spring.activemq.pool", name = "enabled", havingValue = "true")
10396
public JmsPoolConnectionFactory pooledJmsConnectionFactory(ActiveMQProperties properties,
10497
ObjectProvider<ActiveMQConnectionFactoryCustomizer> factoryCustomizers) {
10598
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactoryFactory(properties,

spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jms/activemq/ActiveMQAutoConfigurationTests.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424

2525
import org.springframework.boot.autoconfigure.AutoConfigurations;
2626
import org.springframework.boot.autoconfigure.jms.JmsAutoConfiguration;
27+
import org.springframework.boot.test.context.FilteredClassLoader;
2728
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
2829
import org.springframework.context.annotation.Bean;
2930
import org.springframework.context.annotation.Configuration;
@@ -202,6 +203,20 @@ public void poolConnectionFactoryConfiguration() {
202203
});
203204
}
204205

206+
@Test
207+
public void cachingConnectionFactoryNotOnTheClasspathThenSimpleConnectionFactoryAutoConfigured() {
208+
this.contextRunner.withClassLoader(new FilteredClassLoader(CachingConnectionFactory.class))
209+
.withPropertyValues("spring.activemq.pool.enabled=false", "spring.jms.cache.enabled=false")
210+
.run((context) -> assertThat(context).hasSingleBean(ActiveMQConnectionFactory.class));
211+
}
212+
213+
@Test
214+
public void cachingConnectionFactoryNotOnTheClasspathAndCacheEnabledThenSimpleConnectionFactoryNotConfigured() {
215+
this.contextRunner.withClassLoader(new FilteredClassLoader(CachingConnectionFactory.class))
216+
.withPropertyValues("spring.activemq.pool.enabled=false", "spring.jms.cache.enabled=true")
217+
.run((context) -> assertThat(context).doesNotHaveBean(ActiveMQConnectionFactory.class));
218+
}
219+
205220
@Configuration
206221
static class EmptyConfiguration {
207222

0 commit comments

Comments
 (0)