Merge branch '1.5.x'
This commit is contained in:
		
						commit
						6c21b0090b
					
				|  | @ -24,7 +24,6 @@ import org.apache.activemq.pool.PooledConnectionFactory; | ||||||
| import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; | import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; | ||||||
| import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; | import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; | ||||||
| import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; | import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; | ||||||
| import org.springframework.boot.context.properties.ConfigurationProperties; |  | ||||||
| import org.springframework.context.annotation.Bean; | import org.springframework.context.annotation.Bean; | ||||||
| import org.springframework.context.annotation.Configuration; | import org.springframework.context.annotation.Configuration; | ||||||
| 
 | 
 | ||||||
|  | @ -54,17 +53,28 @@ class ActiveMQConnectionFactoryConfiguration { | ||||||
| 
 | 
 | ||||||
| 		@Bean(destroyMethod = "stop") | 		@Bean(destroyMethod = "stop") | ||||||
| 		@ConditionalOnProperty(prefix = "spring.activemq.pool", name = "enabled", havingValue = "true", matchIfMissing = false) | 		@ConditionalOnProperty(prefix = "spring.activemq.pool", name = "enabled", havingValue = "true", matchIfMissing = false) | ||||||
| 		@ConfigurationProperties(prefix = "spring.activemq.pool.configuration") |  | ||||||
| 		public PooledConnectionFactory pooledJmsConnectionFactory( | 		public PooledConnectionFactory pooledJmsConnectionFactory( | ||||||
| 				ActiveMQProperties properties) { | 				ActiveMQProperties properties) { | ||||||
| 			PooledConnectionFactory pooledConnectionFactory = new PooledConnectionFactory( | 			PooledConnectionFactory pooledConnectionFactory = new PooledConnectionFactory( | ||||||
| 					new ActiveMQConnectionFactoryFactory(properties) | 					new ActiveMQConnectionFactoryFactory(properties) | ||||||
| 							.createConnectionFactory(ActiveMQConnectionFactory.class)); | 							.createConnectionFactory(ActiveMQConnectionFactory.class)); | ||||||
| 
 |  | ||||||
| 			ActiveMQProperties.Pool pool = properties.getPool(); | 			ActiveMQProperties.Pool pool = properties.getPool(); | ||||||
| 			pooledConnectionFactory.setMaxConnections(pool.getMaxConnections()); | 			pooledConnectionFactory.setBlockIfSessionPoolIsFull(pool.isBlockIfFull()); | ||||||
| 			pooledConnectionFactory.setIdleTimeout(pool.getIdleTimeout()); | 			pooledConnectionFactory.setBlockIfSessionPoolIsFullTimeout( | ||||||
|  | 					pool.getBlockIfFullTimeout()); | ||||||
|  | 			pooledConnectionFactory.setCreateConnectionOnStartup( | ||||||
|  | 					pool.isCreateConnectionOnStartup()); | ||||||
| 			pooledConnectionFactory.setExpiryTimeout(pool.getExpiryTimeout()); | 			pooledConnectionFactory.setExpiryTimeout(pool.getExpiryTimeout()); | ||||||
|  | 			pooledConnectionFactory.setIdleTimeout(pool.getIdleTimeout()); | ||||||
|  | 			pooledConnectionFactory.setMaxConnections(pool.getMaxConnections()); | ||||||
|  | 			pooledConnectionFactory.setMaximumActiveSessionPerConnection( | ||||||
|  | 					pool.getMaximumActiveSessionPerConnection()); | ||||||
|  | 			pooledConnectionFactory.setReconnectOnException( | ||||||
|  | 					pool.isReconnectOnException()); | ||||||
|  | 			pooledConnectionFactory.setTimeBetweenExpirationCheckMillis( | ||||||
|  | 					pool.getTimeBetweenExpirationCheck()); | ||||||
|  | 			pooledConnectionFactory.setUseAnonymousProducers( | ||||||
|  | 					pool.isUseAnonymousProducers()); | ||||||
| 			return pooledConnectionFactory; | 			return pooledConnectionFactory; | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -110,9 +110,26 @@ public class ActiveMQProperties { | ||||||
| 		private boolean enabled; | 		private boolean enabled; | ||||||
| 
 | 
 | ||||||
| 		/** | 		/** | ||||||
| 		 * Maximum number of pooled connections. | 		 * Block when a connection is requested and the pool is full. Set it to false to | ||||||
|  | 		 * throw a "JMSException" instead. | ||||||
| 		 */ | 		 */ | ||||||
| 		private int maxConnections = 1; | 		private boolean blockIfFull = true; | ||||||
|  | 
 | ||||||
|  | 		/** | ||||||
|  | 		 * Blocking period, in milliseconds, before throwing an exception if the pool | ||||||
|  | 		 * is still full. | ||||||
|  | 		 */ | ||||||
|  | 		private long blockIfFullTimeout = -1; | ||||||
|  | 
 | ||||||
|  | 		/** | ||||||
|  | 		 * Create a connection on startup. Can be used to warm-up the pool on startup. | ||||||
|  | 		 */ | ||||||
|  | 		private boolean createConnectionOnStartup = true; | ||||||
|  | 
 | ||||||
|  | 		/** | ||||||
|  | 		 * Connection expiration timeout in milliseconds. | ||||||
|  | 		 */ | ||||||
|  | 		private long expiryTimeout = 0; | ||||||
| 
 | 
 | ||||||
| 		/** | 		/** | ||||||
| 		 * Connection idle timeout in milliseconds. | 		 * Connection idle timeout in milliseconds. | ||||||
|  | @ -120,9 +137,31 @@ public class ActiveMQProperties { | ||||||
| 		private int idleTimeout = 30000; | 		private int idleTimeout = 30000; | ||||||
| 
 | 
 | ||||||
| 		/** | 		/** | ||||||
| 		 * Connection expiration timeout in milliseconds. | 		 * Maximum number of pooled connections. | ||||||
| 		 */ | 		 */ | ||||||
| 		private long expiryTimeout = 0; | 		private int maxConnections = 1; | ||||||
|  | 
 | ||||||
|  | 		/** | ||||||
|  | 		 * Maximum number of active sessions per connection. | ||||||
|  | 		 */ | ||||||
|  | 		private int maximumActiveSessionPerConnection = 500; | ||||||
|  | 
 | ||||||
|  | 		/** | ||||||
|  | 		 * Reset the connection when a "JMXException" occurs. | ||||||
|  | 		 */ | ||||||
|  | 		private boolean reconnectOnException = true; | ||||||
|  | 
 | ||||||
|  | 		/** | ||||||
|  | 		 * Time to sleep, in milliseconds, between runs of the idle connection eviction | ||||||
|  | 		 * thread. When negative, no idle connection eviction thread runs. | ||||||
|  | 		 */ | ||||||
|  | 		private long timeBetweenExpirationCheck = -1; | ||||||
|  | 
 | ||||||
|  | 		/** | ||||||
|  | 		 * Use only one anonymous "MessageProducer" instance. Set it to false to create | ||||||
|  | 		 * one "MessageProducer" every time one is required. | ||||||
|  | 		 */ | ||||||
|  | 		private boolean useAnonymousProducers = true; | ||||||
| 
 | 
 | ||||||
| 		public boolean isEnabled() { | 		public boolean isEnabled() { | ||||||
| 			return this.enabled; | 			return this.enabled; | ||||||
|  | @ -132,12 +171,36 @@ public class ActiveMQProperties { | ||||||
| 			this.enabled = enabled; | 			this.enabled = enabled; | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		public int getMaxConnections() { | 		public boolean isBlockIfFull() { | ||||||
| 			return this.maxConnections; | 			return this.blockIfFull; | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		public void setMaxConnections(int maxConnections) { | 		public void setBlockIfFull(boolean blockIfFull) { | ||||||
| 			this.maxConnections = maxConnections; | 			this.blockIfFull = blockIfFull; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		public long getBlockIfFullTimeout() { | ||||||
|  | 			return this.blockIfFullTimeout; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		public void setBlockIfFullTimeout(long blockIfFullTimeout) { | ||||||
|  | 			this.blockIfFullTimeout = blockIfFullTimeout; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		public boolean isCreateConnectionOnStartup() { | ||||||
|  | 			return this.createConnectionOnStartup; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		public void setCreateConnectionOnStartup(boolean createConnectionOnStartup) { | ||||||
|  | 			this.createConnectionOnStartup = createConnectionOnStartup; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		public long getExpiryTimeout() { | ||||||
|  | 			return this.expiryTimeout; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		public void setExpiryTimeout(long expiryTimeout) { | ||||||
|  | 			this.expiryTimeout = expiryTimeout; | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		public int getIdleTimeout() { | 		public int getIdleTimeout() { | ||||||
|  | @ -148,12 +211,44 @@ public class ActiveMQProperties { | ||||||
| 			this.idleTimeout = idleTimeout; | 			this.idleTimeout = idleTimeout; | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		public long getExpiryTimeout() { | 		public int getMaxConnections() { | ||||||
| 			return this.expiryTimeout; | 			return this.maxConnections; | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		public void setExpiryTimeout(long expiryTimeout) { | 		public void setMaxConnections(int maxConnections) { | ||||||
| 			this.expiryTimeout = expiryTimeout; | 			this.maxConnections = maxConnections; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		public int getMaximumActiveSessionPerConnection() { | ||||||
|  | 			return this.maximumActiveSessionPerConnection; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		public void setMaximumActiveSessionPerConnection(int maximumActiveSessionPerConnection) { | ||||||
|  | 			this.maximumActiveSessionPerConnection = maximumActiveSessionPerConnection; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		public boolean isReconnectOnException() { | ||||||
|  | 			return this.reconnectOnException; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		public void setReconnectOnException(boolean reconnectOnException) { | ||||||
|  | 			this.reconnectOnException = reconnectOnException; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		public long getTimeBetweenExpirationCheck() { | ||||||
|  | 			return this.timeBetweenExpirationCheck; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		public void setTimeBetweenExpirationCheck(long timeBetweenExpirationCheck) { | ||||||
|  | 			this.timeBetweenExpirationCheck = timeBetweenExpirationCheck; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		public boolean isUseAnonymousProducers() { | ||||||
|  | 			return this.useAnonymousProducers; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		public void setUseAnonymousProducers(boolean useAnonymousProducers) { | ||||||
|  | 			this.useAnonymousProducers = useAnonymousProducers; | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | @ -65,26 +65,66 @@ public class ActiveMQAutoConfigurationTests { | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	@Test | 	@Test | ||||||
| 	public void customPooledConnectionFactoryConfiguration() { | 	public void defaultsPooledConnectionFactoryAreApplied() { | ||||||
| 		this.context.withUserConfiguration(EmptyConfiguration.class) | 		this.context.withUserConfiguration(EmptyConfiguration.class) | ||||||
| 				.withPropertyValues("spring.activemq.pool.enabled:true", | 				.withPropertyValues("spring.activemq.pool.enabled=true").run((loaded) -> { | ||||||
| 						"spring.activemq.pool.maxConnections:256", | 			assertThat(loaded.getBeansOfType(PooledConnectionFactory.class)).hasSize(1); | ||||||
| 						"spring.activemq.pool.idleTimeout:512", | 			PooledConnectionFactory connectionFactory = loaded.getBean( | ||||||
| 						"spring.activemq.pool.expiryTimeout:4096", | 					PooledConnectionFactory.class); | ||||||
| 						"spring.activemq.pool.configuration.maximumActiveSessionPerConnection:1024", | 			PooledConnectionFactory defaultFactory = new PooledConnectionFactory(); | ||||||
| 						"spring.activemq.pool.configuration.timeBetweenExpirationCheckMillis:2048") | 			assertThat(connectionFactory.isBlockIfSessionPoolIsFull()).isEqualTo( | ||||||
| 				.run((loaded) -> { | 					defaultFactory.isBlockIfSessionPoolIsFull()); | ||||||
| 					ConnectionFactory factory = loaded.getBean(ConnectionFactory.class); | 			assertThat(connectionFactory.getBlockIfSessionPoolIsFullTimeout()).isEqualTo( | ||||||
| 					assertThat(factory).isInstanceOf(PooledConnectionFactory.class); | 					defaultFactory.getBlockIfSessionPoolIsFullTimeout()); | ||||||
| 					PooledConnectionFactory pooledFactory = (PooledConnectionFactory) factory; | 			assertThat(connectionFactory.isCreateConnectionOnStartup()).isEqualTo( | ||||||
| 					assertThat(pooledFactory.getMaxConnections()).isEqualTo(256); | 					defaultFactory.isCreateConnectionOnStartup()); | ||||||
| 					assertThat(pooledFactory.getIdleTimeout()).isEqualTo(512); | 			assertThat(connectionFactory.getExpiryTimeout()).isEqualTo( | ||||||
| 					assertThat(pooledFactory.getMaximumActiveSessionPerConnection()) | 					defaultFactory.getExpiryTimeout()); | ||||||
| 							.isEqualTo(1024); | 			assertThat(connectionFactory.getIdleTimeout()).isEqualTo( | ||||||
| 					assertThat(pooledFactory.getTimeBetweenExpirationCheckMillis()) | 					defaultFactory.getIdleTimeout()); | ||||||
| 							.isEqualTo(2048); | 			assertThat(connectionFactory.getMaxConnections()).isEqualTo( | ||||||
| 					assertThat(pooledFactory.getExpiryTimeout()).isEqualTo(4096); | 					defaultFactory.getMaxConnections()); | ||||||
| 				}); | 			assertThat(connectionFactory.getMaximumActiveSessionPerConnection()).isEqualTo( | ||||||
|  | 					defaultFactory.getMaximumActiveSessionPerConnection()); | ||||||
|  | 			assertThat(connectionFactory.isReconnectOnException()).isEqualTo( | ||||||
|  | 					defaultFactory.isReconnectOnException()); | ||||||
|  | 			assertThat(connectionFactory.getTimeBetweenExpirationCheckMillis()).isEqualTo( | ||||||
|  | 					defaultFactory.getTimeBetweenExpirationCheckMillis()); | ||||||
|  | 			assertThat(connectionFactory.isUseAnonymousProducers()).isEqualTo( | ||||||
|  | 					defaultFactory.isUseAnonymousProducers()); | ||||||
|  | 		}); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	@Test | ||||||
|  | 	public void customPooledConnectionFactoryAreApplied() { | ||||||
|  | 		this.context.withUserConfiguration(EmptyConfiguration.class) | ||||||
|  | 				.withPropertyValues("spring.activemq.pool.enabled=true", | ||||||
|  | 				"spring.activemq.pool.blockIfFull=false", | ||||||
|  | 				"spring.activemq.pool.blockIfFullTimeout=64", | ||||||
|  | 				"spring.activemq.pool.createConnectionOnStartup=false", | ||||||
|  | 				"spring.activemq.pool.expiryTimeout=4096", | ||||||
|  | 				"spring.activemq.pool.idleTimeout=512", | ||||||
|  | 				"spring.activemq.pool.maxConnections=256", | ||||||
|  | 				"spring.activemq.pool.maximumActiveSessionPerConnection=1024", | ||||||
|  | 				"spring.activemq.pool.reconnectOnException=false", | ||||||
|  | 				"spring.activemq.pool.timeBetweenExpirationCheck=2048", | ||||||
|  | 				"spring.activemq.pool.useAnonymousProducers=false").run((loaded) -> { | ||||||
|  | 			assertThat(loaded.getBeansOfType(PooledConnectionFactory.class)).hasSize(1); | ||||||
|  | 			PooledConnectionFactory connectionFactory = loaded.getBean( | ||||||
|  | 					PooledConnectionFactory.class); | ||||||
|  | 			assertThat(connectionFactory.isBlockIfSessionPoolIsFull()).isEqualTo(false); | ||||||
|  | 			assertThat(connectionFactory.getBlockIfSessionPoolIsFullTimeout()).isEqualTo(64); | ||||||
|  | 			assertThat(connectionFactory.isCreateConnectionOnStartup()).isEqualTo(false); | ||||||
|  | 			assertThat(connectionFactory.getExpiryTimeout()).isEqualTo(4096); | ||||||
|  | 			assertThat(connectionFactory.getIdleTimeout()).isEqualTo(512); | ||||||
|  | 			assertThat(connectionFactory.getMaxConnections()).isEqualTo(256); | ||||||
|  | 			assertThat(connectionFactory.getMaximumActiveSessionPerConnection()) | ||||||
|  | 					.isEqualTo(1024); | ||||||
|  | 			assertThat(connectionFactory.isReconnectOnException()).isEqualTo(false); | ||||||
|  | 			assertThat(connectionFactory.getTimeBetweenExpirationCheckMillis()) | ||||||
|  | 					.isEqualTo(2048); | ||||||
|  | 			assertThat(connectionFactory.isUseAnonymousProducers()).isEqualTo(false); | ||||||
|  | 		}); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	@Test | 	@Test | ||||||
|  |  | ||||||
|  | @ -908,11 +908,17 @@ content into your application; rather pick only the properties that you need. | ||||||
| 	spring.activemq.user= # Login user of the broker. | 	spring.activemq.user= # Login user of the broker. | ||||||
| 	spring.activemq.packages.trust-all=false # Trust all packages. | 	spring.activemq.packages.trust-all=false # Trust all packages. | ||||||
| 	spring.activemq.packages.trusted= # Comma-separated list of specific packages to trust (when not trusting all packages). | 	spring.activemq.packages.trusted= # Comma-separated list of specific packages to trust (when not trusting all packages). | ||||||
| 	spring.activemq.pool.configuration.*= # See PooledConnectionFactory. | 	spring.activemq.pool.block-if-full=true # Block when a connection is requested and the pool is full. Set it to false to throw a "JMSException" instead. | ||||||
| 	spring.activemq.pool.enabled=false # Whether a PooledConnectionFactory should be created instead of a regular ConnectionFactory. |     spring.activemq.pool.block-if-full-timeout=-1 # Blocking period, in milliseconds, before throwing an exception if the pool is still full. | ||||||
| 	spring.activemq.pool.expiry-timeout=0 # Connection expiration timeout in milliseconds. |     spring.activemq.pool.create-connection-on-startup=true # Create a connection on startup. Can be used to warm-up the pool on startup. | ||||||
| 	spring.activemq.pool.idle-timeout=30000 # Connection idle timeout in milliseconds. |     spring.activemq.pool.enabled=false # Whether a PooledConnectionFactory should be created instead of a regular ConnectionFactory. | ||||||
| 	spring.activemq.pool.max-connections=1 # Maximum number of pooled connections. |     spring.activemq.pool.expiry-timeout=0 # Connection expiration timeout in milliseconds. | ||||||
|  |     spring.activemq.pool.idle-timeout=30000 # Connection idle timeout in milliseconds. | ||||||
|  |     spring.activemq.pool.max-connections=1 # Maximum number of pooled connections. | ||||||
|  |     spring.activemq.pool.maximum-active-session-per-connection=500 # Maximum number of active sessions per connection. | ||||||
|  |     spring.activemq.pool.reconnect-on-exception=true # Reset the connection when a "JMXException" occurs. | ||||||
|  |     spring.activemq.pool.time-between-expiration-check=-1 # Time to sleep, in milliseconds, between runs of the idle connection eviction thread. When negative, no idle connection eviction thread runs. | ||||||
|  |     spring.activemq.pool.use-anonymous-producers=true # Use only one anonymous "MessageProducer" instance. Set it to false to create one "MessageProducer" every time one is required. | ||||||
| 
 | 
 | ||||||
| 	# ARTEMIS ({sc-spring-boot-autoconfigure}/jms/artemis/ArtemisProperties.{sc-ext}[ArtemisProperties]) | 	# ARTEMIS ({sc-spring-boot-autoconfigure}/jms/artemis/ArtemisProperties.{sc-ext}[ArtemisProperties]) | ||||||
| 	spring.artemis.embedded.cluster-password= # Cluster password. Randomly generated on startup by default. | 	spring.artemis.embedded.cluster-password= # Cluster password. Randomly generated on startup by default. | ||||||
|  |  | ||||||
|  | @ -73,6 +73,9 @@ do as they were designed before this was clarified. | ||||||
| | http://hdiv.org/[HDIV] | | http://hdiv.org/[HDIV] | ||||||
| | https://github.com/hdiv/spring-boot-starter-hdiv | | https://github.com/hdiv/spring-boot-starter-hdiv | ||||||
| 
 | 
 | ||||||
|  | | Hiatus for Spring Boot | ||||||
|  | | https://github.com/jihor/hiatus-spring-boot | ||||||
|  | 
 | ||||||
| | http://infinispan.org/[Infinispan] | | http://infinispan.org/[Infinispan] | ||||||
| | https://github.com/infinispan/infinispan-spring-boot | | https://github.com/infinispan/infinispan-spring-boot | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue