springboot2.X 在项目启动后执行一段自定义代码
场景: 项目需要在项目启动后从数据库初始化一些数据进入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 在项目启动后执行一段自定义代码的更多相关文章
- Springboot 项目启动后执行某些自定义代码
Springboot 项目启动后执行某些自定义代码 Springboot给我们提供了两种"开机启动"某些方法的方式:ApplicationRunner和CommandLineRun ...
- springboot启动后执行一段代码的方式
文章转载自: https://www.cnblogs.com/zuidongfeng/p/9926471.html https://blog.csdn.net/zknxx/article/detail ...
- springboot 学习之路 9 (项目启动后就执行特定方法)
目录:[持续更新.....] spring 部分常用注解 spring boot 学习之路1(简单入门) spring boot 学习之路2(注解介绍) spring boot 学习之路3( 集成my ...
- springboot项目启动成功后执行一段代码的两种方式
springboot项目启动成功后执行一段代码的两种方式 实现ApplicationRunner接口 package com.lnjecit.lifecycle; import org.springf ...
- Spring Boot项目指定启动后执行的操作
Spring Boot项目指定启动后执行的操作: (1)实现CommandLineRunner 接口 (2)重写run方法 (3)声明执行顺序@Order(1),数值越小,优先级越高 (4)如果需要注 ...
- 在web项目启动时执行某个方法
在web项目中有很多时候需要在项目启动时就执行一些方法,而且只需要执行一次,比如:加载解析自定义的配置文件.初始化数据库信息等等,在项目启动时就直接执行一些方法,可以减少很多繁琐的操作. 在工作中遇到 ...
- 【Spring容器】项目启动后初始化数据的两种实践方案
早期业务紧急,没有过多的在意项目的运行效率,现在回过头看走查代码,发现后端项目(Spring MVC+MyBatis)在启动过程中多次解析mybatis的xml配置文件及初始化数据,对开发阶段开发人员 ...
- spring boot 配置启动后执行sql, 中文乱码
spring.datasource.schema指定启动后执行的sql文件位置. 我发现中文乱码,原因是没有指定执行sql script encoding: spring: datasource: u ...
- spring项目启动后,获取bean的方法总结
如果在web项目中,用到定时器的朋友可能会遇到使用spring注解的方式获取bean的时候报空指针的异常.这是就可以使用手工的方法获取spring容器中的bean了. 下面是具体的方法: 1.先说一个 ...
随机推荐
- CF 248B 前缀和
操作1 l r 是原序列l-r的和操作2 l r 是从小到大排序后的l-r的和 input66 4 2 7 2 732 3 61 3 41 1 6output24928 # include <i ...
- Hadoop案例(十)WordCount
WordCount案例 需求1:统计一堆文件中单词出现的个数(WordCount案例) 0)需求:在一堆给定的文本文件中统计输出每一个单词出现的总次数 1)数据准备:Hello.txt hello w ...
- 张忠谋:摩尔定律将死,物联网是“Next Big Thing”
2014台湾半导体产业协会(TSIA)年会于27日登场,台积电董事长暨TSIA名誉理事长张忠谋以"Next Big Thing"为题发表演说.张忠谋表示,他认为摩尔定律 ...
- C# 动态类型与动态编译简介
关于C#的动态类型与动态编译的简介,主要是一个Demo. 动态类型 关键字: dynamic 这里有详细的介绍:[C#基础知识系列]专题十七:深入理解动态类型 动态类型的应用场景 可以减少强制转换(强 ...
- Java 中的异常处理机制
生活中的异常: 不能够完整而顺利的完成一些工作 根据不同的异常进行相应的处理,而不会就此终端我们的生活 引出: 异常处理: 方式: 1.选择结构(逻辑判断)避免 demo:if逻辑处理异常 im ...
- Linux安装系统选择 日报 18/06/23
Linux安装系统选择 Centos7 程序体积7个G,如果是学习伊始, 注意不要选择那个体积小的,因为我装过之后进去发现这个wifie还要自己进行一些烈的命令才能连接成功.很麻烦的. 安装比较顺利但 ...
- Highmaps网页图表教程之数据标签与标签文本
Highmaps网页图表教程之数据标签与标签文本 Highmaps数据标签 数据标签用于在地图图表上展现节点对应的数据.数据标签展现数据是静态的,只要节点一加载,数据标签就会出现在节点附近.在High ...
- 深入理解Python生成器(Generator)
我们可以通过列表生成式简单直接地创建一个列表,但是受到内存限制,列表容量肯定是有限的.而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,而且如果我们仅仅需要访问前面几个元素,那后面绝大多 ...
- type与instance区别
class Foo(object): pass class Bar(Foo): pass obj = Bar() # isinstance用于判断,对象是否是指定类或其派生类的实例 print(isi ...
- 【洛谷】2474:[SCOI2008]天平【差分约束系统】
P2474 [SCOI2008]天平 题目背景 2008四川NOI省选 题目描述 你有n个砝码,均为1克,2克或者3克.你并不清楚每个砝码的重量,但你知道其中一些砝码重量的大小关系.你把其中两个砝码A ...