Spring初始化完成后直接执行一个方法,初始化数据(解决方法被重复执行两次的情况)...

     在做WEB项目时,经常在项目第一次启动时利用WEB容器的监听、Servlet加载初始化等切入点为数据库准备数据,这些初始化数据 是系统开始运行前必须的数据,例如权限组、系统选项、默认管理员等等。但是项目若不是WEB工程,或者说还没用到WEB层(例如单元测试),这时应如何方 便地初始化数据呢?

    借助Spring容器是个很好的解决方案。Spring框架提供了事件机制,而事件机制必须实现ApplicationListener监听器,因此我们 只要编写一个实现类实现该接口的onApplicationEvent方法,在方法体中检测数据库的初始化数据是否存在并选择初始化之。

 

第一步:定义一个类InitData实现ApplicationListener

 

import java.util.HashMap;
import java.util.Map;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Controller;

import com.ebay.cloud.cms.typsafe.metadata.model.MetaClass;
import com.ebay.tools.cms.exception.UtilityException;
import com.ebay.tools.cms.util.CommonInterfaceUtility;
import com.ebay.tools.cms.util.ExceptionUtils;
import com.ebay.tools.cms.util.LoggerUtil;

/**
 * @author Josh Wang(Sheng)
 * @email swang6@email.com
 * 
 * This class used to initialize data / load data ON the application started 
 */
@Controller
public class InitData implements ApplicationListener<ApplicationEvent> {
    
    private Log logger = LogFactory.getLog(InitData.class);
    
    private static boolean isStart = false;

    private static Map<String, MetaClass> cmsMetas = new HashMap<String, MetaClass>();

    public void onApplicationEvent(ApplicationEvent event) {
        if (!isStart) {
            isStart = true;
            LoggerUtil.info(logger, "Start to load CMS Meta data");
            
            try {
                cmsMetas = CommonInterfaceUtility.getMetaClass();
            } catch (UtilityException e) {
                LoggerUtil.error(logger, "Load Meta Class failed" + ExceptionUtils.getStackTraceMsg(e));
            }
            
            LoggerUtil.info(logger,"End to load CMS Meta data");
            
            LoggerUtil.info(logger,"Start to load Other data");
            
            LoggerUtil.info(logger,"End to load Other data");
        }
        
    }

 第二步:解决onApplicationEvent(方法被执行两次以上的问题:

原因:

      在web 项目中(spring mvc),系统会存在两个容器,一个是root application context ,另一个就是我们自己的 projectName-servlet  context(作为root application context的子容器)。 这种情况下,就会造成onApplicationEvent方法被执行两次。

 

解决方法:

      如代码所示,只需要使用一个类变量isStart即可。

 

需要注意的是,一定要加Annotation @Controller,这样才表示是一个Spring的Bean(否则在相关Spring的xml中配置),才能被Spring容器处理。

 

第三步,写一个Spring JunitTest,注意相关的Annotation

需要注意的就是在类上面加入如下两个Annotation即可:

@ContextConfiguration(locations = "file:../validator-web/src/main/webapp/WEB-INF/cms-validator-servlet.xml")

@RunWith(SpringJUnit4ClassRunner.class)

 

@ContextConfiguration用于加载spring的核心配置文件,因为这个操作是一个公共的操作,所以我们常常可以写在一个BaseTest中。

@ContextConfiguration(locations = "file:../validator-web/src/main/webapp/WEB-INF/cms-validator-servlet.xml")
public class BaseTest {

	/**
	 * Set up the environment
	 * @throws Exception
	 */
	@BeforeClass
	public static void setUp() throws Exception {
               
	}
	
	public static void print(String message) {
		System.out.println(message);
	}

	public static void printHighlight(String message) {
		System.err.println(message);
	}

}

 

然后只需要在你的测试类上用这个Annotation:@RunWith(SpringJUnit4ClassRunner.class)

@RunWith(SpringJUnit4ClassRunner.class)
public class TestCacheUtil extends BaseTest {

    @Test
    public void getCMSMetaAttributeType() throws UtilityException {

    }
}

 

 

 

matlab kwave模拟超声换能器学习笔记 kwave模拟超声换能器的学习笔记,从零开始造车轮 阅读详情

相关推荐

基于C#的ASP.NET开发的党史学习网站课设

开展党史学习教育,就是要以史为镜、以史明志,把苦难辉煌的过去、日新月异的现在、光明宏大的未来贯通起来,在鉴往知来中砥砺前行,在乱云飞渡中把准航向,在凝心聚力中团结奋斗,共同创造新的历史伟业。登陆按钮与数据库进行连接,逻辑实现是如图3.1.3所示,自己定义一个SQL查询语句,将账号、密码放入SQL查询语句中,用sqlDataReader.HasRows语句进行逐一比较,找出结果,将用户名存入session并调用cookies,如果结果存在就关闭数据库,进行数据跳转,并弹出登陆成功的提示框,并关闭数据库。

m0_62408555的博客 974

Spring中初始化时执行相关操作

骑着飞机去冲浪

weixin_45874214的博客 3967

JS+H5打字练习器

实现功能 1.导入.TXT文件到打字练习内容(部分浏览器可能出于安全问题限制了这一步操作) 2.输入文本到打字练习内(弹出输入框,将要练习的内容输入至输入框) 3. 开始练习,并根据正误在打字练习内容文本上修改颜色(某个字正确显示绿色,某个字错误,显示红色,某个字没有打显示灰色) 4.开始练习、结束练习,全部输入完成后自动结束练习,也可提前手动结束练习,结束练习后弹窗用显示时和正确率。(区别在于一个全部输入完成且全部正确,一个提前结束无其他条件) 效果图 分析 HTML 结构解析 根元素:<!DO

w11111xxxl的博客 1413

Spring容器初始化完成后执行的方法

注意:监听Spring容器的启动事件ContextRefreshedEvent,会使方法执行多次。

w_shi_yi的博客 1800

2025年北京市职工职业技能大赛第六届信息通信行业网络安全技能大赛复赛CTF部分WP-哥斯拉流量分析

题目没有任何提示,附件gzl.pcap解题哥斯拉流量300多KB包很多,没啥经验只能挨个看回来之后又狠狠得撸了一把哥斯拉流量分析我这里用的是哥斯拉4.0.1测试链接这里发了两个包,我们进行分析。

深耕网络安全领域,聚焦护网行动(HW)、渗透测试、等级保护(等保)、CTF 竞赛四大核心方向,提供技术干货、实战经验与行业洞察。 1810

GNSS数据处理新手避坑:手把手教你用GAMP_GOOD下载IGS/MGEX数据(附.cfg文件详解)

本文详细介绍了如何使用GAMP_GOOD进行GNSS数据处理,从基础配置到高级参数调优,帮助新手避开常见错误。内容包括软件安装、配置文件详解、数据源选择、测站文件配置以及性能优化技巧,特别适合GNSS数据处理初学者快速上手。

weixin_30338481的博客 390

spring初始化执行操作

添加初始化执行类import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationListener; import org.springframework.context.event.ContextRefreshedEvent; public c...

qiuchuan1的博客 394

CarMaker快速入门

本合集是小明师兄推出的CarMaker汽车仿真,CarMaker无论是传统动力学、动力系统开发、底盘系统开发还是目前智能驾驶辅助系统及智能驾驶系统开发有着非常重要的作用,可以有效节省开发周期和开发成本,基于仿真快速实现算法开发和系统验证。...

小明师兄的博客 1万+

Spring容器初始化完成后执行初始化数据方法

这里总结三种方法: 一:InitializingBean 接口    这说明在spring初始化bean的时候,如果bean实现了InitializingBean接口,会自动调用afterPropertiesSet方法。 原文地址:https://www.cnblogs.com/study-everyday/p/6257127.html 问题 实现InitializingBean接...

wenmingfeng1215的博客 1万+

智慧杯 考试必备

2019.4. 强密码 描述 我们称一个密码是强密码,当且仅当它满足以下所有条件: 由 8 − 16 个字符组成 至少包含一个大写字母 (A-Z) 至少包含一个小写字母 (a-z) 至少包含一个数字 (0-9) 至少包含一个特殊符号 (! @ #$ % & * _ +) 娇娇发现她现在的密码好像不是强密码,请你帮她计算一下最少添加几个 字符可以变成强密码? 输入 输入仅一行,一个字符串,表示娇娇当前的密码 输出 输出一个数表示答案 如果不需要添加任何字符就已.

Fairy1208的博客 2861

LVGL core disp显示设计(lv_disp.c)

lv_disp.c当前显示页面的配置scr_act在原始的LVGL是以screen的概念存在,但我们还是习惯叫它为一个页面提供获取top_layer、sys_layer、prev_scr图层接口配置主题管理默认的主题管理是递归查找的,实际项目中因此页面的复杂性,虽然也兼容了此主题管理的方案,但还是推荐使用单页面自行管理主题的方案壁纸设置多页面切换的动画支持计算无用户操作时间清理显示缓存。

Bigan(安)的博客 2331

【SpringBoot】 启动后执行方法的五种方式

项目初始化完毕后,才会调用方法,提供服务。注意监听的事件,通常是 ApplicationStartedEvent 或者 ApplicationReadyEvent,其他的事件可能无法注入 bean。在项目初始化过程中,就会调用此方法。如果业务逻辑执行很耗时,可能会导致项目启动失败。1、实现 CommandLineRunner 接口。2、实现 ApplicationRunner 接口。5、实现 InitializingBean 接口。项目初始化完毕后,才会调用方法,提供服务。的大小顺序执行,小的先执行。...

sco5282的博客 1万+

【以太网硬件十二】以太网端口自协商过程解密之二

简述以太网端口自协商的过程

highman110的博客 2488

Spring初始化完成后直接执行一个方法,初始化数据(解决方法被重复执行两次的情况)

Spring初始化完成后直接执行一个方法,初始化数据(解决方法被重复执行两次的情况)

wangchaoqi1985的博客 225

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Spring 被初始化两次(Spring-Task定时任务执行两次)分析和解决方法

初始问题:采用Spring-Task配置定时任务,任务执行两次,该问题在Eclipse调试环境上不出现 分析问题: 第一步:开始怀疑业务逻辑,通过排查和定位排除业务原因(通过日志可以查看多次执行) @Component("collection.car") public class CollectionCarsJob { private static Logger logger = ...

专注成就非凡 2311

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

当spring 容器初始化完成后执行某个方法

转自:http://blog.csdn.net/fatherican/article/details/9130165         在某些应用中,我们希望,当spring 容器将所有的bean都初始化完成后,做一个操作(例如:将数据库中的字典,加载到内存中),这时我们可以实现一个接口,如下: [java] view plaincopyprint?

灵魂之栖 5263

java中两次调用方法_Spring Bean重复执行两次(实例被构造两次)问题分析

简单做了一个定时器,发现它的构造方法被执行了两次,且是不同的对象。配置如下所示:springMVC-servlet.xmlhttp://www.springframework.org/schema/beans/spring-beans-4.1.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org...

weixin_28941265的博客 2113

当spring 容器初始化完成后执行某个方法 防止onApplicationEvent方法被执行两次

在做web项目开发中,尤其是企业级应用开发的时候,往往会在工程启动的时候做许多的前置检查。   比如检查是否使用了我们组禁止使用的Mysql的group_concat函数,如果使用了项目就不能启动,并指出哪个文件的xml文件使用了这个函数。 而在Spring的web项目中,我们可以介入Spring的启动过程。我们希望在Spring容器将所有的Bean都初始化完成之后,做一些操作,这个时

关于代码的那些事 1705

spring boot 中监听器下 onApplicationEvent 方法被执行两次问题分析及解决

一、背景 项目中使用的技术栈是 spring cloud + spring boot 构建的分布式项目。 其中一个微服务下创建了一个监听者,用于项目启动时从 Apollo 中获取 kafka 的配置信息(地址、topic、等一些基本配置),然后利用加载的配置初始化 kafka。代码如下: 现在出现一个问题,项目启动的时候 onApplicationEvent() 方法每次都会执行两遍,kafka 也会初始化两遍,导致业务中发送 kafka 时会发送两遍同样的 kafka。 二、分析 可

栗然的博客 8254

spring framework web @Scheduled 执行两次的问题

与本文相关的关键词:Spring @Scheduled 执行两次的问题 使用组件:Spring framework web mvc 现象如下:使用@Scheduled标注的方法会执行两次 通过google输入关键词:spring @scheduled called twice,会显示许多人遇到相似问题。 该问题的根本原因就是包含有@Scheduled方法的类被初始化两次。 在

joeleemaster的专栏 1816

Spring Bean重复执行两次(实例被构造两次)问题分析

  在《Spring Bean重复执行两次(实例被构造两次)问题分析》一文中,我们知道web.xml两处配置文件正常需分开。如下所示: &lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="htt

wjxbj的博客 1653

如何Spring初始化完成后执行某个方法与ApplicationListener的使用

ContextRefreshedEvent事件使用注意事项(Spring) 0 概述 ContextRefreshedEvent 事件会在Spring容器初始化完成会触发该事件。我们在实际工作也可以能会监听该事件去做一些事情,但是有时候使用不当也会带来一些问题。 1 防止重复触发 主要因为对于web应用会出现父子容器,这样就会触发两次,那么如何避免呢?下面给出一种简单的解决方案。 1...

一直在学习博客 994

解决Spring定时计划任务重复执行两次(实例被构造两次)问题的方法

今天在做一个项目的时候用到了Spring的定时计划任务。这是Spring的特色功能,可以根据设置在特定的时间或间隔时间做特定的事。 下面给出一个例子: package net.csdn.blog.chaijunkukn; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Locale;

Slash Youth - Jack Chai 7万+

解决Spring定时计划任务重复执行两次或多次(实例被构造两次)问题的方法

原文:http://blog.csdn.net/chaijunkun/article/details/6925889 今天在做一个项目的时候用到了Spring的定时计划任务。这是Spring的特色功能,可以根据设置在特定的时间或间隔时间做特定的事。 下面给出一个例子: [java] view plaincopy packa

jiang117的专栏 1万+

spring 初始化之后执行的方法

Spring初始化完成后直接执行一个方法,初始化数据(解决方法并执行两次) 在做WEB项目时,经常在项目第一次启动时利用WEB容器的监听、Servlet加载初始化等切入点为数据库准备数据,这些初始化数据 是系统开始运行前必须的数据,例如权限组、系统选项、默认管理员等等。但是项目若不是WEB工程,或者说还没用到WEB层(例如单元测试),这时应如何方 便地初始化数据呢? ...

aikuangchou2298的博客 131
上一篇: Hibernate OneToMany中的mappedBy
下一篇: 设计模式之门面模式
iteye_4921
博客等级 码龄8年 25粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值