Весной у меня есть перехватчик, который автоматически связывает два разных сервиса.
Оба сервиса имеют методы, которые помечены @Cacheable
из проекта ehcache-spring-annotations, но отличаются cacheNames
.
public class MenuInterceptor extends HandlerInterceptorAdapter {
@Autowired
private EventService eventService;
@Autowired
private OrganisationInfoService orgService;
@Override
public final void postHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler,
ModelAndView modelAndView) throws SystemException {
eventService.getFolderEventsForUser(123);
orgService.getOrgCustomProfile("abc");
}
@Service
public class EventServiceImpl implements EventService {
@Override
@Cacheable(cacheName = "ecomOrders")
public Collection<FolderEventBean> getFolderEventsForUser(long loginId) throws SystemException {
@Service("organisationInfoService")
public class OrganisationInfoServiceImpl implements OrganisationInfoService {
@Override
@Cacheable(cacheName="orgProfile")
public OrgCustomProfileBean getOrgCustomProfile(String orgHierarchyString) throws ServiceException {
Когда я запускаю свое приложение, один метод успешно использует EHCache для результата, а другой - нет. OrganisationInfoSericeImpl.getOrgCustomProfile()
кэшируется правильно, а EventServiceImpl.getFolderEvnetsForUser
- нет. Может кто-нибудь сказать, пожалуйста, почему?
Я пытался использовать один и тот же кеш для обоих сервисов, но работает только один из них.
Я включил DEBUG для ehcache-spring-annotations, и он регистрирует оба метода при запуске:
[DEBUG] 08:09:01 () Добавление рекомендованного CACHE метода 'getFolderEventsForUser' с атрибутом: CacheableAttributeImpl [cache = [имя = ecomOrders status = STATUS_ALIVE eternal = false overflowToDisk = false maxElementsInMemory = 0 = 300 timeToIdleSeconds = 0 diskPersistent = ложные diskExpiryThreadIntervalSeconds = 120 cacheEventListeners: net.sf.ehcache.statistics.LiveCacheStatisticsWrapper HitCount = 0 memoryStoreHitCount = 0 diskStoreHitCount = 0 missCountNotFound = 0 missCountExpired = 0], cacheKeyGenerator = HashCodeCacheKeyGenerator [includeMethod = верно, includeParameterTypes = истина , useReflection = false, checkforCycles = false], entryFactory = null, exceptionCache = null, parameterMask = ParameterMask [mask = []]] [] в com.googlecode.ehcache.annotations.impl.CacheAttributeSourceImpl.getMethodAttribute (CacheImplj.jj )
[DEBUG] 08:09:01 () Добавление рекомендованного CACHE метода 'getOrgCustomProfile' с атрибутом: CacheableAttributeImpl [cache = [name = orgProfile status = STATUS_ALIVE eternal = false overflowToDisk = false maxElementsInMemory = 200 maxElectionsToLextSoloStoreStoreStoreDoSourceStoreStore = 86400 timeToIdleSeconds = 0 diskPersistent = ложные diskExpiryThreadIntervalSeconds = 120 cacheEventListeners: net.sf.ehcache.statistics.LiveCacheStatisticsWrapper HitCount = 0 memoryStoreHitCount = 0 diskStoreHitCount = 0 missCountNotFound = 0 missCountExpired = 0], cacheKeyGenerator = HashCodeCacheKeyGenerator [includeMethod = верно, includeParameterTypes = истина , useReflection = false, checkforCycles = false], entryFactory = null, exceptionCache = null, parameterMask = ParameterMask [mask = []]] [] в com.googlecode.ehcache.annotations.impl.CacheAttributeSourceImpl.getMethodAttribute (CacheImplj.jj )
Когда перехватчик вызывает автоматические услуги, только один из них кэширует:
[DEBUG] 08:09:19 (UNIQUE_ID) Сгенерированный ключ '-1668638847278617' для вызова: ReflectiveMethodInvocation: общедоступный реферат getOrgCustomProfile (java.lang.String) выбрасывает no.finntech.service.ServiceException; цель относится к классу [no.finntech.service.organisation.impl.OrganisationInfoServiceImpl] [URI: / finn / minfinn / myitems / list, удаленный IP: 127.0.0.1, реферир:, пользователь-агент: Mozilla / 5.0 (Windows NT 6.1 ; WOW64; rv: 6.0.2) Gecko / 20100101 Firefox / 6.0.2] на com.googlecode.ehcache.annotations.interceptor.EhCacheInterceptor.generateCacheKey (EhCacheInterceptor.java:272)
EDIT:
Вероятно, я должен упомянуть, что эти два сервиса определены в разных модулях maven.