Spring启动时加载数据
程序中也许有会有许多常用的,不会经常更改的数据,我们可以在程序初始化的时候就把他们加载,就不用频繁的加载或者查询。
以下是几个常用的,有COPY收集的,也有自己弄。
1. 实现BeanPostProcessor接口
@Component
public class LoadDataCache implements BeanPostProcessor { @@Resource
private IDao dao; @Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
// Bean实例化之前执行
return bean;
} @Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
// Bean实例化之后执行
List list = dao.findAll();
..... // 做一些事情
return bean;
}
}
此方法我在用于查询数据库的时候,出现此个实例在依赖Bean之前加载的情况,我就没用这个,而是换成方法2. 实现ApplicationListener接口。
不过这个方法加载文件数据应该就不会有什么错误吧。
2. 实现ApplicationListener接口
@Component
public class LoadDataCache implements ApplicationListener<ApplicationEvent> { @Resource
private IDao dao; @Override
public void onApplicationEvent(ApplicationEvent arg0) {
// 在spring所有资源(xml和注解)加载注入完毕后执行
List list = dao.findAll();
..... // 做一些事情
}
}
推荐这个方法,如备注所描述,在spring所有资源(xml和注解)加载注入完毕后执行,那么依赖资源就都会先加载。
3. 利用bean便签中的init-method属性
@Component
public class LoadDataCache { @Resource
private IDao dao; public void init() {
// 在Bean实例化之前执行
List list = dao.findAll();
..... // 做一些事情
}
}
这种方法在使用时可能会遇到很多问题,我没使用,不便多说,贴出地址原文。原文地址
4.通过把方法返回值做成Bean注入
@Service("resourceBean")
public class ResourceBean implements ApplicationListener<ApplicationEvent> {
@Resource
private SystemLinkManager systemLinkManager; public ResourceBean() {
} @Bean(name="systemLinkList")
public List<SystemLink> getSystemLinkList() {
return systemLinkManager.findAll(); }
@Bean(name="systemLinkPartnerList")
public List<SystemLink> getSystemLinkPartnerList() {
return systemLinkManager.findPartner();
}
@Bean(name="systemLinkFriendLinkList")
public List<SystemLink> getSystemLinkFriendLinkList() {
return systemLinkManager.findFriendLink();
}
}
<bean id="DBResources" class="java.util.LinkedHashMap">
<constructor-arg>
<map>
<entry key="systemLinkList" value-ref="systemLinkList" />
<entry key="systemLinkPartnerList" value-ref="systemLinkPartnerList" />
<entry key="systemLinkFriendLinkList" value-ref="systemLinkFriendLinkList" />
</map>
</constructor-arg>
</bean>
把数据构造成了一个map,后来改成方法一实现了。拿到之后直接put到静态变量去了。
Spring启动时加载数据的更多相关文章
- Tomcat启动时加载数据到缓存---web.xml中listener加载顺序(优先初始化Spring IOC容器)
JavaWebSpringTomcatCache 最近用到在Tomcat服务器启动时自动加载数据到缓存,这就需要创建一个自定义的缓存监听器并实现ServletContextListener接口,并且 ...
- Tomcat启动时加载数据到缓存---web.xml中listener加载顺序(例如顺序:1、初始化spring容器,2、初始化线程池,3、加载业务代码,将数据库中数据加载到内存中)
最近公司要做功能迁移,原来的后台使用的Netty,现在要迁移到在uap上,也就是说所有后台的代码不能通过netty写的加载顺序加载了. 问题就来了,怎样让迁移到tomcat的代码按照原来的加载顺序进行 ...
- spring启动时加载字典表数据放入map
import java.util.HashMap; import java.util.List; import org.springframework.beans.factory.annotation ...
- Spring 启动时加载资源
Spring加载资源文件目前了解三种, @PostConstruct在Context加载完成之后加载.在创建各个Bean对象之前加载. 实现ApplicationRunner的run方法,Bean加载 ...
- web.xml中配置启动时加载的servlet,load-on-starup
web.xml中配置启动时加载的servlet,load-on-starup 使用servlet来初始化配置文件数据: 在servlet的配置当中,<load-on-startup>1&l ...
- Servlet在启动时加载的tomcat源码(原创)
tomcat 8.0.36 知识点: 通过配置loadOnStartup可以设置Servlet是否在Tomcat启动时加载,以及按值大小进行有序加载,其最小有效值为0,最大有效值为Integer.MA ...
- ElasticSearch 启动时加载 Analyzer 源码分析
ElasticSearch 启动时加载 Analyzer 源码分析 本文介绍 ElasticSearch启动时如何创建.加载Analyzer,主要的参考资料是Lucene中关于Analyzer官方文档 ...
- SpringMvc 系统启动时加载数据到内存中
SpringMvc 系统启动时加载数据到内存中 学习了:http://blog.csdn.net/newstruts/article/details/18668269 https://www.cnbl ...
- js 窗口滚动到一定高度时加载数据
<script type="text/javascript"> //当窗口滚动到一定高度时 某块页面开始加载数据 window.onload = function() ...
随机推荐
- iOS开发:应用生命周期
iOS应用通过委托对象AppDelegate类在应用周期的不同阶段会回调不同的方法,应用周期分为以下五种状态: Not Running(非运行状态).应用没有运行或被系统终止. Inactive ...
- 关于ie6对齐
先来没有任何对齐时的样子: 1.一种是在父级没有高度的情况下居中. 给每个独立的元素都加上vertical-align:middle; 针对文字可以不加,加与不加都可以居中对齐.但是无法做到绝对的居中 ...
- 解析UML9种图的作用
本文和大家重点讨论一下UML9种图的概念,UML中有五类图,共有9种图形,每种图形都有各自的特点,下面就让我们一起来看一下这些图形特点的详细介绍吧. UML9种图简介 1.用例图 说明的是谁要使用系统 ...
- hdu 4671 Backup Plan(签到题)
错成那样,还以为是卡时间卡精度的变态题,结果就那么ac了= = 悔死我了 题意就不概述了,只要处理前两列即可.其中第一列顺序直接扫一遍,第二列要先处理较少的那几种.我是接着第一列用 head[] 继续 ...
- UVA 1395 Slim Span (最小生成树,MST,kruscal)
题意:给一个图,找一棵生成树,其满足:最大权-最小权=最小.简单图,不一定连通,权值可能全相同. 思路:点数量不大.根据kruscal每次挑选的是最小权值的边,那么苗条度一定也是最小.但是生成树有多棵 ...
- dos文件批量转换成unix文件
对于经常在windows环境下和linux环境同时使用的文件(如在windows系统下编写,在linux环境下编译的文件), 常常存在这样的问题:由于两种系统的格式文件格式不同,导致程序出现不期望的问 ...
- 9月5日 华为2014校园招聘的机试题目_C语言版答案
手有些生了. 题目: 通过键盘输入一串小写字母(a~z)组成的字符串.请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串.压缩规则:1.仅压缩连续重复出现的字符.比如 ...
- 软件测试技术(六)——白盒测试之控制流覆盖准则+Visual Studio 2013单元测试
一.目标程序 单片机发送的A/D转换结果的整体格式为:[DLE][STX]Message[CHKSUM][DLE][ETX],其中[]括号中的字符为16进制的助记符,并非ASCII码.其中:[DLE] ...
- 使用DDMS测试安卓手机APP的性能(android)
安装/配置: 通过另外一个工具也可以测试手机客户端APP的性能,这就是android开发包中的DDMS工具(Dalvik Debug Monitor Service),先来说一下android开发包的 ...
- Libsvm的MATLAB调用和交叉验证
今天听了一个师兄的讲课,才发现我一直在科研上特别差劲,主要表现在以下几个方面,(现在提出也为了督促自己在以后的学习工作道路上能够避免这些问题) 1.做事情总是有头无尾,致使知识点不能一次搞透,每次在用 ...