无法向方法添加Spring Cache建议 - internalCacheAdvisor与可缓存的注释bean在同一批次中创建

时间:2014-10-13 12:04:09

标签: java spring spring-annotations spring-cache

我们已经重构了应用程序的某些部分,之后,使用spring cachable注释的方法停止缓存,尽管未触及包含缓存方法的类。

经过一些调试后,我们可以看到,在重构并添加一些新的Spring bean之后,现在可以在与internalCacheAdvisor本身相同的批处理中创建具有cachable方法的bean。因此,不能应用建议,并且永远不会调用Spring缓存方面。因此,方法结果不会被缓存,@ Class注释不起作用。

决定可以同时创建哪些bean的机制是什么,以及如何调试和影响这种机制?

我查看了Spring方法BeanFactoryAdvisorRetrievalHelper :: findAdvisorBeans,在运行旧代码和蠕虫代码时,它看起来像这样: cachable bean created with success

重构后,它看起来像这样: enter image description here

我们的注释类couchbaseTranslationProvider与internalCacheAdvisor在同一批次中创建,这是不可能的。在尝试应用建议代理时,我收到一条调试消息"跳过当前创建的顾问..."。 (我认为这应该是一条错误信息!)

启用缓存的POM文件如下所示:

@Configuration
@EnableWebMvc
@ComponentScan({"[package]", "[package].connectors"})
@Import({EventsConfig.class,
        CmsConfig.class})
@EnableCaching
public class ApiConfig {

    public static class Caches{
        public static final String SPORTS = "sports";
        [...]
        public static final String PIPEDTRANSLATIONS = "translations";
    }

    @Value("${[package].document}")
    private String someUrl;

    @Bean
    public CouchbaseClient getCouchbaseClient() throws IOException {
        [code]
    }

    @Bean
    public CacheManager cacheManager() {
        SimpleCacheManager cacheManager = new SimpleCacheManager();
        cacheManager.setCaches(Arrays.asList(new ConcurrentMapCache(Caches.SPORTS),
                [...],
                new ConcurrentMapCache(Caches.PIPEDTRANSLATIONS)));
        return cacheManager;
    }

    @Autowired
    private EventUpdateGate eventUpdateGate;

    @Bean
    @ConditionalOnProperty("AdapterGate.events.active")
    public AdapterGateReceiver eventAdapterGateReceiver(@Value("${AdapterGate.events.gateChannel}") String channel,
                                                @Value("${AdapterGate.events.apiVersion}") String version) {
        return new AdapterGateReceiver(channel, version, eventUpdateGate);
    }
}

0 个答案:

没有答案