在开发中,有时候我们会想在项目启动时就执行某些操作,如将某些存在数据库里的数据刷到内存里以便在项目里快速使用这些数据、跑一些批处理。

  此处介绍两类方法:

第一类:

  项目启动时,利用spring容器初始化bean来实现。

  共3种方法: (1)通过@PostConstruct方法实现初始化bean进行操作

        (2)通过在bean相关的xml配置文件中配置init-method方法

        (3)通过bean实现InitializingBean接口

第二类:

  项目启动后,通过quartz,立即执行该操作。

  (4)通过org.springframework.scheduling.quartz.SimpleTriggerBean方式,可以配置间隔多长时间执行一次任务,如<property name="repeatInterval" value="3000" />就是指定3秒执行一次任务。

  下面逐一介绍这4种方法:

方法一:@PostConstruct方法

  在实现类和方法上加注解,类上加bean注解,方法上加@PostConstruct注解。

 1 //本人此类是在将黑名单从数据库中查询出来,并放到内存
 2 @Service("phoneBlacklistCache")
 3 public class PhoneBlacklistCache {  4   public List<String> phoneBlacklist = new ArrayList<String>();  6   //次注解是操作的关键  9   @PostConstruct 10   public void init(){      11     //想进行的操作 12     //比如:查询数据库,写到内存 13  } 14 }

方法二:init-method方法

  在xml文件里配置bean,bean的配置中配置init-method方法(该方法配置成你想要执行的操作方法)。

<bean id="PoneBlacklistCache" class="com.jd.qrx.trade.cache.impl.PhoneBlacklistCache" scope="singleton" init-method="init"></bean>

  定义类文件。

1  public class PhoneBlacklistCache {
2     public List<String> phoneBlacklist = new ArrayList<String>(); 3    public void init(){      4      //想进行的操作 5      //比如:查询数据库,写到内存 6  } 7 }

方法三:InitializingBean方法

  定义相应类实现InitializingBean接口。

1  public class PhoneBlacklistCache implements InitializingBean{
2 public List<String> phoneBlacklist = new ArrayList<String>(); 3 @Override 4 public void afterPropertiesSet() throws Exception {      5     //想进行的操作 6     //比如:查询数据库,写到内存 7  } 8 }

  其中,afterPropertiesSet()方法里写想要操作的代码。

方法四:quartz方法

  通过将SimpleTriggerBean配置成项目启动后立即执行,且重复执行次数配置成0,不重复执行。即可达到项目启动立即执行一此操作的目的。

具体配置如下:

  1、我的项目是springMVC框架,在web.xml中作如下配置:

1 <context-param>
2     <param-name>contextConfigLocation</param-name> 3 <param-value> 4  classpath:conf/spring-config.xml, 5  classpath:conf/quartz-config.xml 6 </param-value> 7 </context-param

  2、然后在quartz-config.xml中做如下配置

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3        xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
 4        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 5        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
 6        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
 7        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"
 8        default-lazy-init="false">
 9     <bean id="quartzJob" class="xx.xx.xx.QuartzJob"/>
10     <bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
11         <property name="targetObject">
12             <ref bean="quartzJob"/>
13         </property>
14         <property name="targetMethod">
15             <value>xxxxxx(你在QuartzJob中的方法)</value>
16         </property>
17     </bean>
18
19     <!-- 项目启动后任务就执行一次 -->
20     <bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
21         <property name="jobDetail" ref="jobDetail"/>
22         <property name="startDelay" value="500"/>
23         <property name="repeatInterval" value="0"/>
24         <property name="repeatCount" value="0"/>
25     </bean>
26
27     <span style="white-space:pre"></span>
28     <bean id="startQuertz" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
29         <property name="triggers">
30             <list>
31                 <ref bean="simpleTrigger"/>
32             </list>
33         </property>
34     </bean>
35 </beans>

项目启动时就执行某些操作、@Scheduled定时项目启动时执行一次相关推荐

  1. 如何在项目启动时就执行某些操作

    参考资料:如何在项目启动时就执行某些操作 在实际的项目开发中经常会遇到一些需要在项目启动的时候进行初始化操作的需求,比如初始化线程池,配置某些对象的序列化和反序列化方式,加载黑名单白名单,加载权限应用 ...

  2. C语言signal()函数(通过设置一个函数(回调函数)来处理捕获到异常信号时需要执行的操作)

    文章目录 描述 声明 参数 返回值 实例 附加解释 背景知识:C语言中signal函数简介及使用 描述 C 库函数 void (*signal(int sig, void (*func)(int))) ...

  3. java定时器每天执行一次_定时器-每天23:00执行一次

    2019/7/8 修改:为了获取接口每天的信息,比如获取今天 2019/7/8 00:00:00 的信息,从这个时间点是比较好的,如果直接在24点获取,在24点的时候,其实已经是第二天了,所以作修改为 ...

  4. 5. linux操作系统bios启动过程需要执行哪几个操作?,Linux系统启动的大致过程

    Linux系统启动的大致过程 Linux操作系统是基于UNIX操作系统发展而来的一种克隆系统,它诞生于1991 年的 [Linux桌面] 10 月5 日.下面小编准备了关于Linux系统启动的大致过程 ...

  5. 2020年最正规阳光的网赚项目:结合自动发卡平台操作虚拟资源项目

    ​ 曾看过这么一句话:人生好像俄罗斯方块,你合群了,也就消失了.大部分人意图便是上班和升职加薪,当90%挑选这条路时,就该想想,这条路是不是适宜你走下去.向东也是前进,向西也是前进.东西南北,便是四个 ...

  6. 虚拟资源拳王公社:最适合上班没时间的副业赚钱项目是什么,简单易操作的副业项目

    拳王一直都在说虚拟项目是互联网的主流项目,其低成本高价值,受到了众多互联网从业者的追捧. 很多人愿意做虚拟项目的原因,无非是因为他的价值高,成本低,复制性比较强,很容易掌握整个流程,而且售后维护也比较 ...

  7. cron 每两周执行_如何每两周/月/天执行一次cron作业

    cron 每两周执行 We may want to run some jobs for every two weeks/months/days- under some situation such a ...

  8. 批处理启动vm虚拟机服务 vm12启动无界面启动vm虚拟机系统 windows上如何操作服务 sc net启动关闭服务...

    windows(win10)批处理脚本 打开vm虚拟机的服务,并且开启无界面虚拟机 @echo off net start "vds" net start "VMAuth ...

  9. scala使用log4j_将Twitter4j与Scala结合使用以执行用户操作

    scala使用log4j 介绍 我以前的文章展示了如何在Scala中使用Twitter4j访问Twitter流 . 这篇文章展示了如何使用Twitter4j控制Twitter用户的操作. 此功能的主要 ...

  10. SpringMVC启动后自动执行

    参考:http://kylin755.iteye.com/blog/1703542 通常做法是定义一个Servlet,并在web.xml中配置Servlet的启动顺序<load-on-start ...

最新文章

  1. b2b2c源码 java_java B2B2C源码电子商务平台 ---搭建Eureka注册中心
  2. 我的公交一卡通用不了了-_-
  3. bn层初始化参数_神经网络参数初始化方式
  4. NSURLConnection超时大坑
  5. C++学习笔记30:模板与型式参数化
  6. lisp方格网法计算土方量_CAD土方软件方格网法与三角网法相结合,准确计算土方量...
  7. 线程控制 12 | 线程属性
  8. tableView 获取网络图片,并且设置为圆角(优化,fps)
  9. 【Kibana】FATAL Error: [config validation of [elasticsearch].url]: definition for this key is missing
  10. axure小程序模板_公众号和小程序模板消息
  11. 分离圆环图显示百分比_excel这个百分比图,你不一定会制作
  12. 家用电器插头插座外壳防冲击等级试验——IK摆锤冲击试验装置
  13. C++ 依赖倒置原则
  14. mariadb-libs 被 mysql-community-libs-compat-8.0.26-1.el7.x86_64 取代
  15. bzoj 4453: cys就是要拿英魂!(后缀数组+二分)
  16. MAC 升级php 到7.1
  17. 积分(Integral)
  18. 云计算前景如何?大专学历学习云计算怎么样?
  19. html中的li标签不换行,css li 不换行(布局,内容)
  20. 个人博客-1(登录功能模块实现)

热门文章

  1. U盘PE启动盘制作好后,如何进入PE系统?
  2. STM32F103 硬件SPI+WM8978单声道语音回环
  3. 什么是场景化需求分析法?如何有效使用这个客户需求分析最有效的方法?
  4. AndroidStudio配置夜神模拟器
  5. jQuery- 跟着李南江学编程
  6. excel不同文件表格批量加表头vba_用Excel VBA实现多文件夹内文件加入表头 遍历文件...
  7. Digispark ATtiny85配合Prismatik软件DIY屏幕流光溢彩效果(见坑填坑)
  8. 小波变换二之Haar变换
  9. 小额批量支付系统可以完成跨行资金清算吗_今天,你转账了吗?带你看懂央行小额批量支付系统...
  10. 腾讯云轻量应用服务器(免费内测)开箱测评