用实现ApplicationListener来实现项目启动时运行某些程序的注意事项

起初在网上搜索在项目启动时运行某些程序时,看到其中有用实现ApplicationListener来做的一种方法,当时没有直接复制他们的代码,而是手动写的。如下:

package com.han.listener;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ApplicationContextEvent;
import org.springframework.stereotype.Component;

@Component
public class MyListener implements ApplicationListener<ApplicationContextEvent> {

	public void onApplicationEvent(ApplicationContextEvent event) {
		if (event.getApplicationContext().getParent() == null) {
			String contextName = event.getApplicationContext().getDisplayName();
			String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
			System.out.println(String.format("=================================web application event================================"
					+ " %s-->>%s-->>%s", contextName, time, " application event....\r\n"));
		}
	}

}

但是启动后发现确实有打印启动信息,似乎达到了预想中的结果。但是当我stop server停止tomcat时却发现控制台又出来同样的消息,尴尬......后在网上搜索自定义的listener为何在服务器停止时也会执行未果,便试着把ApplicationContextEvent换成ContextRefreshedEvent 发现在服务器停止后不再打印消息。通过字面意思发现,ApplicationContextEvent监听的是项目容器事件(启动、停止等),而ContextRefreshedEvent 字面理解即是容器刷新(启动或说初始化),根据其javadoc也可以知道意思:Event raised when an ApplicationContext gets initialized or refreshed.。在此记录提醒有同样疑惑的朋友,以后注重javadoc的阅读。

以下是做项目启动执行的正确使用代码:

package com.han.listener;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.stereotype.Component;

@Component
public class MyListener implements ApplicationListener<ContextRefreshedEvent> {

	public void onApplicationEvent(ContextRefreshedEvent event) {
		if (event.getApplicationContext().getParent() == null) {
			String contextName = event.getApplicationContext().getDisplayName();
			String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
			System.out.println(String.format("=================================web application event================================"
					+ " %s-->>%s-->>%s", contextName, time, " application event....\r\n"));
		}
	}

}
时间: 2024-12-14 17:25:21

用实现ApplicationListener来实现项目启动时运行某些程序的注意事项的相关文章

javaweb项目启动时自动启动rmi服务器实例

1.我们先写一个web项目启动时需要运行的类RmiRegisterServlet.java package com.mx.Servlet; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import com.mx.framework.daoimpl.RMIServerDAOImpl; @SuppressWarning

web项目启动时,执行某个方法

1.监听(Listener) web文件添加 <listener> <listener-class>cn.ro.common.InitListener</listener-class> </listener> 添加InitListener类,如下 package cn.ro.common; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener

在web项目启动时,执行某个方法

在web项目中有很多时候需要在项目启动时就执行一些方法,而且只需要执行一次,比如:加载解析自定义的配置文件.初始化数据库信息等等,在项目启动时就直接执行一些方法,可以减少很多繁琐的操作. 在工作中遇到了项目初始数据需要跟其他项目同步的问题,也就是说在项目部署后,启动的时候就要同步另外一个项目的数据,这里写了个简单的实例,用的是监听器机制,创建一个类实现ServletContextListener 接口,实现里面的contextInitialized和contextDestroyed方法. pac

在web项目启动时,使用监听器来执行某个方法

在web项目中有很多时候需要在项目启动时就执行一些方法,而且只需要执行一次,比如:加载解析自定义的配置文件.初始化数据库信息等等,在项目启动时就直接执行一些方法,可以减少很多繁琐的操作. 这里写了个简单的实例,用的是监听器机制,创建一个类实现ServletContextListener 接口,实现里面的contextInitialized和contextDestroyed方法. 1 package com.test.listener; 2 3 import javax.servlet.Servl

SpringMVC——项目启动时从数据库查询数据

SpringMVC项目中遇到这样的问题: 1.很多数据字典需要从数据库中查询: 2.懒得修改SQL语句: 3.想在项目中声明静态变量存储数据字典,但是希望这个字典可以在项目启动时进行加载. 当遇到这样的问题时,可以通过实现org.springframework.beans.factory.InitializingBean接口进行实现这一功能. 只需要实现afterPropertiesSet()方法就将在项目扫描完注解时调用这一方法,在这个方法内调用数据库查询的方法,查出所有数据字典,并保存在静态

grails项目启动时的Disconnected from the target VM, address: &#39;127.0.0.1:xxxxx&#39;错误

今天在启动(debug方式)grails项目时,突然出现了一个错误 Connected to the target VM, address: '127.0.0.1:63073', transport: 'socket' Disconnected from the target VM, address: '127.0.0.1:63073', transport: 'socket' 大意就是连接不上目标虚拟机了 在我的理解下,grails项目编译类似于一种缓存的机制,避免项目代码重复编译影响效率,

配置监听器使项目启动时创建消费者

1.web.xml中注册监听器<listener><listener-class>com.activemq.common.InitComponent</listener-class></listener>2.InitComponent实现ServletContextListener,ApplicationContextAware接口,重写contextInitialized(ServletContextEvent servletContextEvent)方法

开发必备知识点--django项目启动时,url加载之前,执行某个.py文件

django项目启动时,自定义执行某个py文件 在任意的app下的apps.py中的Config类下自定义ready()方法,并且调用autodiscover_modules. app01/apps.py 1 from django.apps import AppConfig 2 from django.utils.module_loading import autodiscover_modules 3 4 5 class App01Config(AppConfig): 6 name = 'ap

1.Spring项目启动时,加载相关初始化配置

Spring项目启动时,会加载一些常用的配置: 1.加载spring上下文 SpringApplicationContextUtils.initApplicationContext(event.getServletContext()); 2.加载属性文件 EsbCommsUtils.initComms(event.getServletContext()); 1 public class EsbCommsUtils { 2 3 private static Log logger = LogFact