场景: 项目需要在项目启动后从数据库初始化一些数据进入redis , 但是没有很适合 的监听器去实现 , 监听 老是在dao初始化之前触发。

解决方法:自定义类实现 ApplicationRunner 接口 重写 run() 方法

------------------------------------------------------------------------------------------------------------------------------------------

 /**
* @author :CX
* @Date :Create in 2018/8/31 11:39
* @Effect : 监听项目启动成功后, 每次启动给启动序列码+1(tb_sb_idcounter表) ,
* 并吧最新的序列码写入redis
*/
@Component
@Order(10) //执行的优先级
public class StartIdListener implements ApplicationRunner {
Logger logger = Logger.getLogger(this.getClass().getName());
//注入针对数据库的dao
@Autowired
@Qualifier("dao")
protected IDao dao;
//注入针对redis的dao
@Autowired
RedisUtil redisUtil ; // 系统启动序列码在redis中保存的key
private String SYSTEM_NUMBER = "bigcustomer:systemNumber_fh23" ;
// 本次啓動 , 通用id 执行到几了, 继续执行
private String FUNIQUEID_NUMBER = "bigcustomer:funiqueid_number" ;
/**
*@参数
*@返回值
*@创建人 cx
*@创建时间
*@描述 zaispringboot启动后执行
*/
@Override
public void run(ApplicationArguments args) throws Exception {
//数据库启动序列码 +1
logger.info("项目启动成功, 开始获取启动码!");
try{
dao.update("util-baseIdUpOne");
}catch (Exception e){
throw new RuntimeException("启动失败,启动序列码执行+1 操作时异常!请检查 tb_sb_idcounter表");
}
// 获取最新数据
TbSbIdcounterModel first = dao.entity(TbSbIdcounterModel.class).first();
if(null == first || null == first.getFH23()){
throw new RuntimeException("启动失败,启动序列码为空,请检查 tb_sb_idcounter表");
}
Long fh23 = first.getFH23();
// 保存启动序列码到redis
redisUtil.set(SYSTEM_NUMBER,fh23);
// 初始化本次 轮训的编码
redisUtil.set(FUNIQUEID_NUMBER,1); logger.info("获取启动码成功, 本次系统启动码为:" + fh23);
}
}

springboot2.X 在项目启动后执行一段自定义代码的更多相关文章

  1. Springboot 项目启动后执行某些自定义代码

    Springboot 项目启动后执行某些自定义代码 Springboot给我们提供了两种"开机启动"某些方法的方式:ApplicationRunner和CommandLineRun ...

  2. springboot启动后执行一段代码的方式

    文章转载自: https://www.cnblogs.com/zuidongfeng/p/9926471.html https://blog.csdn.net/zknxx/article/detail ...

  3. springboot 学习之路 9 (项目启动后就执行特定方法)

    目录:[持续更新.....] spring 部分常用注解 spring boot 学习之路1(简单入门) spring boot 学习之路2(注解介绍) spring boot 学习之路3( 集成my ...

  4. springboot项目启动成功后执行一段代码的两种方式

    springboot项目启动成功后执行一段代码的两种方式 实现ApplicationRunner接口 package com.lnjecit.lifecycle; import org.springf ...

  5. Spring Boot项目指定启动后执行的操作

    Spring Boot项目指定启动后执行的操作: (1)实现CommandLineRunner 接口 (2)重写run方法 (3)声明执行顺序@Order(1),数值越小,优先级越高 (4)如果需要注 ...

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

    在web项目中有很多时候需要在项目启动时就执行一些方法,而且只需要执行一次,比如:加载解析自定义的配置文件.初始化数据库信息等等,在项目启动时就直接执行一些方法,可以减少很多繁琐的操作. 在工作中遇到 ...

  7. 【Spring容器】项目启动后初始化数据的两种实践方案

    早期业务紧急,没有过多的在意项目的运行效率,现在回过头看走查代码,发现后端项目(Spring MVC+MyBatis)在启动过程中多次解析mybatis的xml配置文件及初始化数据,对开发阶段开发人员 ...

  8. spring boot 配置启动后执行sql, 中文乱码

    spring.datasource.schema指定启动后执行的sql文件位置. 我发现中文乱码,原因是没有指定执行sql script encoding: spring: datasource: u ...

  9. spring项目启动后,获取bean的方法总结

    如果在web项目中,用到定时器的朋友可能会遇到使用spring注解的方式获取bean的时候报空指针的异常.这是就可以使用手工的方法获取spring容器中的bean了. 下面是具体的方法: 1.先说一个 ...

随机推荐

  1. Ubuntu 搭建ELK

    一.简介 官网地址:https://www.elastic.co/cn/ 官网权威指南:https://www.elastic.co/guide/cn/elasticsearch/guide/curr ...

  2. Emacs 启动优化二三事

    Emacs 启动优化二三事 */--> div.org-src-container { font-size: 85%; font-family: monospace; } p {font-siz ...

  3. 20165333 学习基础和C语言学习基础

    说实话,我并没有什么技能比90%以上的人更好,非要拿一个出来的话,篮球勉强好一点吧.最初接触篮球是小学的时候跟着哥哥看他打球,哥哥的球技在同龄人中算是好的,每次看他各种突破过人,我都觉得特别潇洒帅气, ...

  4. centos7 PDI(Kettle)安装

    kettle介绍 PDI(Kettle)是一种开源的 ETL 解决方案,书中介绍了如何使用PDI来实现数据的剖析.清洗.校验.抽取.转换.加载等各类常见的ETL类工作. 除了ODS/DW类比较大型的应 ...

  5. LANMPS 一键PHP环境安装包(转)

    转:http://www.lanmps.com/ LANMPS 一键安装包,php绿色环境套件包: https://github.com/foxiswho/lanmps 安装 Mar 17, 2017 ...

  6. 移动端布局 - REM方式

    默认以宽度为640px的设计稿为基准页面,然后通过JS获取当前显示设备的尺寸,对应的调整 html 标签的font-size大小,从而实现通过以rem为单位的移动端布局适配. 具体代码 (functi ...

  7. React.js学习之环境搭建

    1 工欲善其事必先利其器:前端开发工具 1.1 WebStorm和Sublime Text Sublime Text:作为代码编辑器,Sublime Text的优点如下: 主流前端开发编辑器 体积较小 ...

  8. 黑马程序员_java基础笔记(02)...java语言基础组成

    ——————————  ASP.Net+Android+IOS开发..Net培训.期待与您交流!—————————— java语法(1:关键字,2:标识符,3:注释,4:常量和变量,5:运算符,6:语 ...

  9. thinkphp3.2链接数据库常用的配置选项

    thinkphp3.2常用配置选项,app/Common/Conf/config.php 或者 app/Home/Conf/config.php 1 2 3 4 5 6 7 8 'SHOW_PAGE_ ...

  10. MXNet 中的几个数据集

    from mxnet import gluon def transform(data, label): return data.astype('float32') / 255., label.asty ...