Я добавляю Spring Cache в существующий весенний проект, используя аннотации. Я использую Couchbase в качестве провайдера кеша. Я хочу использовать переплетение времени загрузки с использованием AspectJ, чтобы разрешить кеширование вызовов частных методов и вызовов методов класса case.
Уже три дня я застрял над этой проблемой, и я прочитал десятки статей, документации и примеров, но эта штука просто не работает.
Это то, что я сделал -
@Configuration
@EnableSpringConfigured
@EnableAspectJAutoProxy
@EnableLoadTimeWeaving(aspectjWeaving = EnableLoadTimeWeaving.AspectJWeaving.ENABLED)
@EnableTransactionManagement
@EnableRetry
@PropertySource(
value = {"classpath:application.properties", "classpath:${spring.profiles.active}.properties"},
ignoreResourceNotFound = true)
public class BeanConfig implements LoadTimeWeavingConfigurer {
... various beans here ...
@Override
public LoadTimeWeaver getLoadTimeWeaver() {
return new TomcatLoadTimeWeaver();// because I'm using Tomcat 7
}
@Bean
public InstrumentationLoadTimeWeaver loadTimeWeaver() throws Throwable {
return new InstrumentationLoadTimeWeaver();
}
}
@Configuration
@EnableSpringConfigured
@EnableCaching(mode = AdviceMode.ASPECTJ)
@ComponentScan(basePackages = "com.foo.bar.dao.cache.couchbase")
public class CacheConfigurer extends CachingConfigurerSupport {
@Bean
@Override
public CacheManager cacheManager() {
... cachemanager configuration here ...
}
}
Затем у меня есть @Chacheable
в методе DAO в классе, а не в интерфейсе.
Наконец, в $CATALINA_HOME/conf/context.xml моего Tomcat 7 у меня есть -
<Context>
<Loader loaderClass="org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader"/>
</Context>
Я добавил следующие зависимости в pom.xml (это проект maven) -
- кушетка-пружина-кэш
- весенние аспекты
- аспектжвивер
- аспект
- пружинный инструмент
- весна-инструмент-кот
Если я не использую кэширование LTW, оно отлично работает для вызовов методов, поступающих через интерфейсы (как и должно быть). Но после того, как я включаю LTW-кэширование, оно вообще не работает - ни кеширования ни для вызова метода, ни ошибок.
Кто-нибудь пробовал использовать LTW для кеша Spring с кушеткой? Что я здесь упускаю или делаю неправильно?
Я использую Spring 4.3.5.Release.
Обновить –
Вот мой минимальный код, воспроизводящий ситуацию - https://github.com/harshilsharma63/spring-boilerplate-with-cache
@Cacheable
при реализации без LTW, только не приватные методы. - person Stephane Nicoll   schedule 29.12.2016-javaagent:/path/to/aspectjweaver.jar
в качестве аргумента JVM вместо необходимой магии загрузчика классов, если вы этого не сделаете? - person Nándor Előd Fekete   schedule 29.12.2016