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;
    }
}
我打电话给runnable如下
ExecutorService es = Executors.newCachedThreadPool();
es.execute(new UserMenuUpdateTask(activeUsers));
Spring 使用ThreadLocal来存储,applicationContext但 ExecutorService 创建一个不同的线程,其中没有管理任何 bean 和/或 beanContext 找不到任何 bean。
请按照此说明进行操作。
| 归档时间: | 
 | 
| 查看次数: | 6100 次 | 
| 最近记录: |