我正准备一个Spring Boot启动器(用于测试),我想覆盖一个特定的应用程序属性。此特定情况涉及基于属性启用/禁用缓存(生产代码启动程序使用@ConditionalOnProperty
)。使用测试启动器时,我希望默认禁用缓存。
除了使用@TestPropertySource
之外,还有办法吗?因此,它不是一个可重复的注释,我不想使用它。这是最终用户添加测试用例所需属性的推荐方法。
编辑: 我提供了有关特定用例的更多详细信息
生产启动器自动配置:
@Configuration
@ConditionalOnWebApplication
@EnableConfigurationProperties(StarterCacheProperties.class)
@EnableCaching
public class StarterCacheAutoConfiguration {
..(omitted for clarity)..
@Configuration
@ConditionalOnProperty(prefix = "neostarter.saasmgr.cache", name = "enabled", havingValue = "false")
public static class SaasMgrNoCacheConfig extends CachingConfigurerSupport {
@Bean(name = SAAS_MGR_CACHE_MANAGER)
@Override
public CacheManager cacheManager() {
return new NoOpCacheManager();
}
}
@Configuration
@ConditionalOnProperty(prefix = "neostarter.saasmgr.cache", name = "enabled", matchIfMissing = true)
public static class SaasMgrCachingConfig extends CachingConfigurerSupport {
@Autowired
SaasMgrCacheProperties saasMgrCacheProperties;
@Bean(destroyMethod = "shutdown")
public net.sf.ehcache.CacheManager ehCacheManager() {
CacheConfiguration cacheConfiguration = new CacheConfiguration(SAAS_MGR_AUTH_CACHE, 1000)
.timeToLiveSeconds(saasMgrCacheProperties.getTimeToLiveSeconds());
net.sf.ehcache.config.Configuration config = new net.sf.ehcache.config.Configuration();
config.addCache(cacheConfiguration);
return net.sf.ehcache.CacheManager.newInstance(config);
}
@Bean(name = SAAS_MGR_CACHE_MANAGER)
@Override
public CacheManager cacheManager() {
return new EhCacheCacheManager(ehCacheManager());
}
}
这使用户可以选择在生产中缓存特定的调用(或不缓存)。但是,我发现默认情况下禁用测试中的缓存是合理的。我完全清楚这仍然可以被最终用户覆盖。在测试启动器(不同依赖)中,我尝试了以下内容:
@Configuration
@AutoConfigureBefore({CacheAutoConfiguration.class, SaasMgrSecurityAutoConfiguration.class})
public class DisableCacheAutoConfiguration {
@Autowired
Environment environment;
@PostConstruct
public void disableCache() {
EnvironmentTestUtils.addEnvironment((ConfigurableEnvironment)environment, "neostarter.saasmgr.cache.enabled=false");
}
}
但无论StarterCacheAutoConfiguration
与EhCacheCacheManager
之间的DisableCacheAutoConfiguration
总是在15 = "com.neoteric.starter.auth.saasmgr.test.DisableCacheAutoConfiguration"
16 = "com.neoteric.starter.auth.SaasMgrSecurityAutoConfiguration"
36 = "org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration"
之前得到解决。在AutoConfigurationSorter.java中的调试中,我看到了正确的配置顺序:
.htaccess
答案 0 :(得分:0)
您无法在启动器中更改用户的配置,这将太不透明和侵入性。无论如何,您无法保证:任何人都可以将属性值设置为更高级别(例如系统属性)并覆盖您尝试更改的内容。
如果要禁用缓存,最简单的方法是执行spring.cache.type=none
所做的事情,即提供CacheManager
的实现,但不执行任何操作。
尝试声明类型为org.springframework.cache.support.NoOpCacheManager