Если вы хотите продолжать использовать по умолчанию cronJobService
для запуска своих заданий, то, вероятно, единственным решением будет «правильно» получить доступ к необходимому веб-контексту.
Пример скрипта groovy дляполучить доступ к контексту веб-приложения по его имени.
import org.springframework.cache.ehcache.EhCacheCacheManager
import org.springframework.web.context.ContextLoader
final String WEB_CONTEXT_NAME = "/rest"
def contextLoader = ContextLoader.currentContextPerThread.find { it.key.contextName == WEB_CONTEXT_NAME }
assert contextLoader != null
def webApplicationContext = contextLoader.value
webApplicationContext.getBean(EhCacheCacheManager)
Имейте в виду, что ContextLoader.currentContextPerThread
является частным полем.Чтобы получить доступ к полю в Java, вы можете использовать
def f = ContextLoader.getDeclaredField("currentContextPerThread");
f.setAccessible(true);
Map<ClassLoader, WebApplicationContext> contexts = f.get(HybrisContextLoaderListener);
Образец JobPerformable будет выглядеть как
public class WebContextAwareJob extends AbstractJobPerformable<CronJobModel> {
@Override
public PerformResult perform(final CronJobModel cronJobModel) {
final CacheManager cacheManager = getEhCacheManager().getCacheManager();
final Cache cache = cacheManager.getCache("");
}
private EhCacheCacheManager getEhCacheManager() {
return getRegistry().getBean(EhCacheCacheManager.class)
}
private WebApplicationContext getRegistry() {
<see sample code above>
}
}