文档章节

spring容器加载完成执行某个方法

小手冰凉丶
 小手冰凉丶
发布于 2016/12/11 21:44
字数 494
阅读 2
收藏 0

http://www.mincoder.com/article/1812.shtml

 

今天遇到一个问题,需要在项目中加入一个定时器,需要在项目启动后就执行,所以就在网上找spring容器初始化之后就执行的方法有什么:

查了很多资料,总共找到了两个符合条件的方法,都是用了一下之后,结合网上的信息说说我个人的理解:

1.写一个类,实现BeanPostProcessor,这个接口有两个方法:

(1)postProcessBeforeInitialization方法,在spring中定义的bean初始化前调用这个方法;

(2)postProcessAfterInitialization方法,在spring中定义的bean初始化后调用这个方法;

首先,开始我试过这个方法,才发现,这个接口是在spring容器启动时,每初始化一个bean,便会调用一次,也就是说,你初始化多少个bean,变回调用多少次,当然也就不符合我之前的需求;

2.之后,我找到了另外一个方法,写一个类,实现InitializingBean接口:

(1)实现这个接口,只要实现afterPropertiesSet()这个方法,将你要预处理的代码写在里面,spring容器启动后,就会执行这个里面的方法。

 

很明显,最后一个符合我的需求,我将计时器代码写在实现InitializingBean接口的类中afterPropertiesSet()方法里面。

public class DayTradeTimer implements InitializingBean{
	/**
	 * 
	 */
	private static final long serialVersionUID = -5173826987102711830L;
	@SuppressWarnings("deprecation")
	public void afterPropertiesSet() throws Exception {
		// TODO Auto-generated method stub
		Date date = new Date();
		//每天凌晨两点执行
		if((date.getHours()==2 && date.getMinutes()>0) || (date.getHours()>2)){
			date.setDate(date.getDate()+1);
		}
		date.setHours(2);
		date.setMinutes(0);
		date.setSeconds(0);
		Timer timer = new Timer();
		timer.scheduleAtFixedRate(new TimerTask() {
			@Override
			public void run() {
				// TODO Auto-generated method stub
				System.out.println("***********计时器*****************");
			}
		}, date, 1000*60*60*24);
	}
}

 

最后,再贴一个servlet在web容器启动时执行的方法

<servlet> 
    <servlet-name>myServlet</servlet-name> 
    <servlet-class>com.servlet.MyServlet</servlet-class> 
    <load-on-startup>1</load-on-startup><!--加这个标签,tomcat启动时会自动加载指定的servlet,值是servlet的加载顺序, 数字越小代表加载的优先级越高--> 
</servlet>

本文转载自:

共有 人打赏支持
小手冰凉丶
粉丝 4
博文 60
码字总数 17244
作品 0
合肥
程序员
私信 提问
深入理解 Spring Boot(一)

在过去两三年的 Spring 生态圈,最让人兴奋的莫过于 Spring Boot 框架。或许从命名上就能看出这个框架的设计初衷:快速的启动 Spring 应用。因而 Spring Boot 应用本质上就是一个基于 Spring...

rechardchensir
09/10
0
0
给你一份Spring Boot知识清单

在过去两三年的Spring生态圈,最让人兴奋的莫过于Spring Boot框架。或许从命名上就能看出这个框架的设计初衷:快速的启动Spring应用。因而Spring Boot应用本质上就是一个基于Spring框架的应用...

java知识分子
09/12
0
0
给你一份超详细Spring Boot知识清单

因而 Spring Boot 应用本质上就是一个基于 Spring 框架的应用,它是 Spring 对“约定优先于配置”理念的最佳实践产物,它能够帮助开发者更快速高效地构建基于 Spring 生态圈的应用。 那 Spri...

51CTO技术栈
10/09
0
0
Spring中的SmartLifecycle作用

Spring中的SmartLifecycle作用 Spring SmartLifecycle 在容器所有bean加载和初始化完毕执行 在使用Spring开发时,我们都知道,所有bean都交给Spring容器来统一管理,其中包括没一个bean的加载...

tantexian
11/16
0
0
Spring Boot启动原理

正文 我们开发任何一个Spring Boot项目,都会用到如下的启动类 从上面代码可以看出,Annotation定义(@SpringBootApplication)和类定义(SpringApplication.run)最为耀眼,所以要揭开Sprin...

asdf08442a
02/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

新手也能看懂,消息队列其实很简单

该文已加入开源项目:JavaGuide(一份涵盖大部分Java程序员所需要掌握的核心知识的文档类项目,Star 数接近 16k)。地址:https://github.com/Snailclimb/JavaGuide. 本文内容思维导图: 消息...

阿里云官方博客
14分钟前
0
0
如何在Chrome浏览器中启动deviceready事件(尝试调试phonegap项目)?

我正在开发PhoneGap应用程序,我希望能够在Chrome中调试它,而不是在电话上调试。但是,我在onGetReady()函数中初始化我的代码,该函数在PhoneGap触发“deviceready”事件时触发。由于Chr...

kisshua
今天
9
0
nginx中部署vue打包后的静态文件

如何在nginx中部署静态资源就不描述了, 请看我的这篇博客 将vue脚手架项目打包后的静态文件放到nginx上, 发现有个问题, 即url上有#, 怎么去掉这个#呢. 1 项目中router的mode 路由的mode要为h...

克虏伯
今天
13
0
JS容易理解错误的地方

在这端代码执行的末尾,你会不会hi变量回事函数中的hi了?你会不会认为这不是按引用传递了? 对值传递和引用传递产生质疑了? 1 var hi = {};2 function sayHello(hi) { ...

器石_
今天
9
0
Java开发学习--MongoDB

之前只学过sql,第一次使用非关系型数据库。以前对于关系型数据库与非关系型数据库的概念很模糊,通过这次的学习对这两者有了一个清晰的概念。 主键 在MongoDB中,主键名叫"_id",如果在生成...

微笑向暖wx
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部