• springboot2.X 在项目启动后执行一段自定义代码


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

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

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

     1 /**
     2  * @author :CX
     3  * @Date :Create in 2018/8/31 11:39
     4  * @Effect : 监听项目启动成功后, 每次启动给启动序列码+1(tb_sb_idcounter表) ,
     5  *              并吧最新的序列码写入redis
     6  */
     7 @Component
     8 @Order(10) //执行的优先级
     9 public class StartIdListener implements ApplicationRunner {
    10     Logger logger =  Logger.getLogger(this.getClass().getName());
    11     //注入针对数据库的dao
    12     @Autowired
    13     @Qualifier("dao")
    14     protected IDao dao;
    15     //注入针对redis的dao
    16     @Autowired
    17     RedisUtil redisUtil ;
    18 
    19     // 系统启动序列码在redis中保存的key
    20     private String SYSTEM_NUMBER = "bigcustomer:systemNumber_fh23" ;
    21     // 本次啓動 , 通用id 执行到几了, 继续执行
    22     private String FUNIQUEID_NUMBER = "bigcustomer:funiqueid_number" ;
    23     /**
    24      *@参数
    25      *@返回值
    26      *@创建人  cx
    27      *@创建时间
    28      *@描述 zaispringboot启动后执行
    29      */
    30     @Override
    31     public void run(ApplicationArguments args) throws Exception {
    32         //数据库启动序列码 +1
    33         logger.info("项目启动成功, 开始获取启动码!");
    34         try{
    35             dao.update("util-baseIdUpOne");
    36         }catch (Exception e){
    37             throw  new RuntimeException("启动失败,启动序列码执行+1 操作时异常!请检查 tb_sb_idcounter表");
    38         }
    39         // 获取最新数据
    40         TbSbIdcounterModel first = dao.entity(TbSbIdcounterModel.class).first();
    41         if(null == first || null == first.getFH23()){
    42             throw  new RuntimeException("启动失败,启动序列码为空,请检查 tb_sb_idcounter表");
    43         }
    44         Long fh23 = first.getFH23();
    45         // 保存启动序列码到redis
    46         redisUtil.set(SYSTEM_NUMBER,fh23);
    47         // 初始化本次 轮训的编码
    48         redisUtil.set(FUNIQUEID_NUMBER,1);
    49 
    50 
    51         logger.info("获取启动码成功, 本次系统启动码为:" + fh23);
    52     }
    53 }
  • 相关阅读:
    Spring有用功能--Profile、WebService、缓存、消息、ORM
    opencv标定程序(改动)
    Install Docker Mac OS X
    Android eclipse 提示java代码 快捷键
    Mac使用Docker-machine訪问docker publish port
    决策树之C4.5算法学习
    为ImageView设置背景图片(代码中)
    BZOJ 3675 APIO2014 序列切割 斜率优化DP
    思科模拟器之路由器-RIP-DNS解析server
    POJ 3177 Redundant Paths
  • 原文地址:https://www.cnblogs.com/cx987514451/p/9590529.html
Copyright © 2020-2023  润新知