Fix Hazelcast auto-configuration ordering
Make sure that the general Hazelcast auto-configuration is processed
before the cache auto-configuration. This was supposed to be fixed and
tested in 721b5a2 but unfortunately the `@AutoConfigureAfter` annotation
was placed on a regular `@Configuration` class (which has no effect).
The tests were passing because the ordering is actually hardcoded in the
test. The relevant tests now use `ImportAutoConfiguration` that simulates
the same order as the one use by the actual application.
Closes gh-4389
This commit is contained in:
parent
157c0b6cae
commit
2c4f88e221
|
|
@ -32,6 +32,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
|||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||
import org.springframework.boot.autoconfigure.data.jpa.EntityManagerFactoryDependsOnPostProcessor;
|
||||
import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.hazelcast.HazelcastAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration;
|
||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||
import org.springframework.cache.CacheManager;
|
||||
|
|
@ -64,7 +65,7 @@ import org.springframework.util.Assert;
|
|||
@ConditionalOnMissingBean({ CacheManager.class, CacheResolver.class })
|
||||
@EnableConfigurationProperties(CacheProperties.class)
|
||||
@AutoConfigureBefore(HibernateJpaAutoConfiguration.class)
|
||||
@AutoConfigureAfter(RedisAutoConfiguration.class)
|
||||
@AutoConfigureAfter({ HazelcastAutoConfiguration.class, RedisAutoConfiguration.class })
|
||||
@Import(CacheConfigurationImportSelector.class)
|
||||
public class CacheAutoConfiguration {
|
||||
|
||||
|
|
|
|||
|
|
@ -24,7 +24,6 @@ import com.hazelcast.core.HazelcastInstance;
|
|||
import com.hazelcast.spring.cache.HazelcastCacheManager;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnSingleCandidate;
|
||||
|
|
@ -53,7 +52,6 @@ import org.springframework.core.io.Resource;
|
|||
@ConditionalOnClass({ HazelcastInstance.class, HazelcastCacheManager.class })
|
||||
@ConditionalOnMissingBean(CacheManager.class)
|
||||
@Conditional(CacheCondition.class)
|
||||
@AutoConfigureAfter(HazelcastAutoConfiguration.class)
|
||||
class HazelcastCacheConfiguration {
|
||||
|
||||
@Configuration
|
||||
|
|
|
|||
|
|
@ -17,7 +17,6 @@
|
|||
package org.springframework.boot.autoconfigure.cache;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
|
||||
|
|
@ -44,6 +43,7 @@ import org.springframework.beans.factory.BeanCreationException;
|
|||
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
|
||||
import org.springframework.boot.autoconfigure.cache.support.MockCachingProvider;
|
||||
import org.springframework.boot.autoconfigure.hazelcast.HazelcastAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.test.ImportAutoConfiguration;
|
||||
import org.springframework.boot.test.EnvironmentTestUtils;
|
||||
import org.springframework.cache.Cache;
|
||||
import org.springframework.cache.CacheManager;
|
||||
|
|
@ -380,12 +380,14 @@ public class CacheAutoConfigurationTests {
|
|||
|
||||
@Test
|
||||
public void hazelcastCacheWithMainHazelcastAutoConfiguration() throws IOException {
|
||||
Collection<Class<?>> configs = new ArrayList<Class<?>>();
|
||||
configs.add(DefaultCacheConfiguration.class);
|
||||
configs.add(HazelcastAutoConfiguration.class);
|
||||
String mainConfig = "org/springframework/boot/autoconfigure/hazelcast/hazelcast-specific.xml";
|
||||
doLoad(configs, "spring.cache.type=hazelcast",
|
||||
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext();
|
||||
EnvironmentTestUtils.addEnvironment(applicationContext, "spring.cache.type=hazelcast",
|
||||
"spring.hazelcast.config=" + mainConfig);
|
||||
applicationContext.register(DefaultCacheConfiguration.class);
|
||||
applicationContext.register(HazelcastAndCacheConfiguration.class);
|
||||
applicationContext.refresh();
|
||||
this.context = applicationContext;
|
||||
HazelcastCacheManager cacheManager = validateCacheManager(
|
||||
HazelcastCacheManager.class);
|
||||
HazelcastInstance hazelcastInstance = this.context
|
||||
|
|
@ -399,14 +401,17 @@ public class CacheAutoConfigurationTests {
|
|||
@Test
|
||||
public void hazelcastCacheWithMainHazelcastAutoConfigurationAndSeparateCacheConfig()
|
||||
throws IOException {
|
||||
Collection<Class<?>> configs = new ArrayList<Class<?>>();
|
||||
configs.add(DefaultCacheConfiguration.class);
|
||||
configs.add(HazelcastAutoConfiguration.class);
|
||||
String mainConfig = "org/springframework/boot/autoconfigure/hazelcast/hazelcast-specific.xml";
|
||||
String cacheConfig = "org/springframework/boot/autoconfigure/cache/hazelcast-specific.xml";
|
||||
doLoad(configs, "spring.cache.type=hazelcast",
|
||||
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext();
|
||||
EnvironmentTestUtils.addEnvironment(applicationContext, "spring.cache.type=hazelcast",
|
||||
"spring.cache.hazelcast.config=" + cacheConfig,
|
||||
"spring.hazelcast.config=" + mainConfig);
|
||||
applicationContext.register(DefaultCacheConfiguration.class);
|
||||
applicationContext.register(HazelcastAndCacheConfiguration.class);
|
||||
applicationContext.refresh();
|
||||
this.context = applicationContext;
|
||||
|
||||
HazelcastInstance hazelcastInstance = this.context
|
||||
.getBean(HazelcastInstance.class);
|
||||
HazelcastCacheManager cacheManager = validateCacheManager(
|
||||
|
|
@ -557,17 +562,9 @@ public class CacheAutoConfigurationTests {
|
|||
}
|
||||
|
||||
private void load(Class<?> config, String... environment) {
|
||||
Collection<Class<?>> configs = new ArrayList<Class<?>>();
|
||||
configs.add(config);
|
||||
doLoad(configs, environment);
|
||||
}
|
||||
|
||||
private void doLoad(Collection<Class<?>> configs, String... environment) {
|
||||
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext();
|
||||
EnvironmentTestUtils.addEnvironment(applicationContext, environment);
|
||||
for (Class<?> config : configs) {
|
||||
applicationContext.register(config);
|
||||
}
|
||||
applicationContext.register(config);
|
||||
applicationContext.register(CacheAutoConfiguration.class);
|
||||
applicationContext.refresh();
|
||||
this.context = applicationContext;
|
||||
|
|
@ -683,6 +680,12 @@ public class CacheAutoConfigurationTests {
|
|||
|
||||
}
|
||||
|
||||
@Configuration
|
||||
@ImportAutoConfiguration({CacheAutoConfiguration.class, HazelcastAutoConfiguration.class})
|
||||
static class HazelcastAndCacheConfiguration {
|
||||
|
||||
}
|
||||
|
||||
@Configuration
|
||||
@EnableCaching
|
||||
static class InfinispanCustomConfiguration {
|
||||
|
|
|
|||
Loading…
Reference in New Issue