Ran*_*aul 7 java spring multithreading spring-mvc executorservice
我需要在下面的Runnable Thread中访问Spring bean(featureService和uxService),但是我得到了null值,applicationContext因此我无法在Runnable中获得Spring bean.我想知道是否可以访问runnable中的spring bean?如果没有,请建议我另一种方法.
我正在使用Spring 4.0.6和Java 8
@Component
public class UserMenuUpdateTask implements Runnable, Serializable, ApplicationContextAware {
private static final long serialVersionUID = 3336518785505658027L;
List<User> userNamesList;
FeatureService featureService;
UXService uxService;
private ApplicationContext applicationContext;
public UserMegaMenuUpdateTask() {}
public UserMegaMenuUpdateTask(List<User> userNamesList) {
this.userNamesList = userNamesList;
}
@Override
public void run() {
try {
for (User user : userNamesList) {
featureService = (FeatureService) applicationContext.getBean("featureService");
uxService = (UxService) applicationContext.getBean("uxService");
//.........
}
} catch (BaseApplicationException ex) {
throw new BaseApplicationException(ex);
}
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
}
Run Code Online (Sandbox Code Playgroud)
我打电话给runnable如下
ExecutorService es = Executors.newCachedThreadPool();
es.execute(new UserMenuUpdateTask(activeUsers));
Run Code Online (Sandbox Code Playgroud)
Spring 使用ThreadLocal来存储,applicationContext但 ExecutorService 创建一个不同的线程,其中没有管理任何 bean 和/或 beanContext 找不到任何 bean。
请按照此说明进行操作。
| 归档时间: |
|
| 查看次数: |
6100 次 |
| 最近记录: |