在Spring中从Thread Class中获取数据的最佳方法

时间:2015-01-29 14:19:03

标签: java database multithreading spring spring-mvc

目前我很担心如何从我的线程类中的数据库中获取数据。

我不能创建我的线程类的bean,因为每个请求都会创建一个新的实例。

MyThread.class

class MyThread implements Runnable{
public void run(){
    //How to get Employee data and also data from other tables.??????
}
}    

EmployeeDAO.class

@Component("employeeDAO")
public class EmployeeDAO {

@Cacheable(value = "employeeCache")
public List<Employee> getEmployees() {
     //got data from database
    return employees;
}
}

获取上下文并从上下文中获取dao bean并在每个我的线程类中使用是否很好?

你能建议或分享代码如何解决我的上述问题吗?

1 个答案:

答案 0 :(得分:1)

我找到了this site的一个解决方案。

以下解决方案是好还是不好?如果不好那么解决方案的缺点是什么

这是我尝试并取得成功的原因

@Service
public class StaticContextHolder implements ApplicationContextAware {

public static ApplicationContext CONTEXT;

public StaticContextHolder() {
}

public static Object getBean(String s) {
    return CONTEXT.getBean(s);
}

public static <T> T getBean(String s, Class<T> tClass){
    return CONTEXT.getBean(s, tClass);
}

public static <T> T getBean(Class<T> tClass){
    return CONTEXT.getBean(tClass);
}

public static Object getBean(String s, Object... objects){
    return CONTEXT.getBean(s, objects);
}

public static boolean containsBean(String s) {
    return CONTEXT.containsBean(s);
}

@Override
public void setApplicationContext(ApplicationContext arg0) throws BeansException {
    System.out.println("ApplicationContext initialized");
    CONTEXT = arg0;
}   
}    


class MyThread implements Runnable{
public void run(){
     EmployeeDAO employeeDAO = StaticContextHolder.getBean(EmployeeDAO.class);
}
}