【发布时间】:2016-02-16 08:46:33
【问题描述】:
我要求在一个表中具有递归关系的元素:
孩子ID |父 ID
1 |空
2 | 1
3 | 1
4 | 2
等等...查询整个数据结构大约需要 10 秒目前我无法重新设计此表,因为它花费了太多时间(更多信息:Spring Repository performance issues with recursive ORM Class)
现在,我正在考虑在 bean 中在 spring 启动期间预加载所有数据,以便客户端与 bean“通信”,并更新 bean 和数据库中的数据。我认为这次启动需要多长时间并不重要,重要的是用户必须等待多长时间。
到目前为止,我还没有设法预加载它。我试图创建一个这样的 bean:
public class AppConfig extends WebMvcConfigurerAdapter {
...
@Autowired
SkillDAO skillDAO
...
@Bean(name="allSkills")
public List<Skill> allSkills(){
return skillDAO.findBySkill(null);
}
...
它不起作用,因为我收到一个错误:
原因:org.springframework.beans.factory.BeanCurrentlyInCreationException:创建名为“dataSource”的 bean 时出错:当前正在创建请求的 bean:是否存在无法解析的循环引用?
顺便说一下,我在 AppConfig 中创建了所有的 bean。当我删除这个“allSkills”bean 时,它又可以工作了。
更新
@Component
public class MyListener {
@Autowired
private SkillDAO skillDAO;
@EventListener
public void onApplicationReady(ApplicationReadyEvent ready) {
System.out.println("++++++++++++++ HALLO +++++++++++++");
skillDAO.findBySkill(null);
}
}
...
@Bean(name="skillBean")
public MyListener myListener() {
return new MyListener();
}
【问题讨论】:
-
我不明白这个新 bean 应该如何解决问题。我会创建一个预先初始化的、会话范围的 bean 来缓存结果
-
它或多或少地改变了我的问题。服务器启动将花费更长的时间,但是当应用程序启动时,我可以更快地访问所有技能。我什至热切地加载我的孩子。
标签: java spring datasource javabeans