• Springboot项目启动后执行特定方法


    Springboot项目启动后执行特定方法

    Springboot给我们提供了两种“开机启动”方式:ApplicationRunner和CommandLineRunner。

    这两种方法提供的目的是为了满足,在项目启动的时候立刻执行某些方法。我们可以通过实现ApplicationRunner和CommandLineRunner,来实现,他们都是在SpringApplication 执行之后开始执行的。

    CommandLineRunner接口可以用来接收字符串数组的命令行参数,ApplicationRunner 是使用ApplicationArguments 用来接收参数的。

    一、使用 CommandLineRunner

    package cn.pconline.common.command;
    
    import cn.pconline.common.constant.CommonConstant;
    import cn.pconline.common.redis.client.RedisClient;
    import cn.pconline.entity.Coupon;
    import lombok.extern.slf4j.Slf4j;
    import org.gelivable.dao.GeliDao;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.CommandLineRunner;
    import org.springframework.stereotype.Component;
    import java.util.List;
    
    
    /**
     * @Description 项目启动执行
     * @Author jie.zhao
     * @Date 2019/9/5 11:08
     */
    @Slf4j
    @Component
    public class MyCommandLineRunner implements CommandLineRunner {
        @Autowired
        private GeliDao geliDao;
    
        @Autowired
        private RedisClient redisClient;
    
        @Override
        public void run(String... var1) throws Exception {
            log.info("This will be execute when the project was started!");
            //优惠卷初始化
            List<Coupon> couponList = geliDao.list(Coupon.class, "SELECT * FROM bjdev190812_coupon");
            couponList.forEach(coupon -> {
                redisClient.string().set(CommonConstant.COUPON_LIST + coupon.getId(), coupon.getCouponNum());
            });
            //处理业务
        }
    }
    

    二、使用 ApplicationRunner

    package cn.pconline.common.command;
    
    import org.springframework.boot.ApplicationArguments;
    import org.springframework.boot.ApplicationRunner;
    import org.springframework.stereotype.Component;
    /**
     * @Description 项目启动执行
     * @Author jie.zhao
     * @Date 2019/9/5 16:37
     */
    @Slf4j
    @Component
    public class MyApplicationRunner implements ApplicationRunner {
    
        @Override
        public void run(ApplicationArguments var1) throws Exception{
             log.info("MyApplicationRunner class will be execute when the project was started!");
            //处理业务
        }
    }
    

    三、项目启动测试

    2019-09-05 16:39:27.133  INFO 47936 --- [       resin-40] cn.pconline.GeliSpringbootApplication    : Started GeliSpringbootApplication in 15.141 seconds (JVM running for 26.088)
    2019-09-05 16:39:25.145  INFO 47936 --- [       resin-40] c.p.common.command.MyApplicationRunner   : MyApplicationRunner class will be execute when the project was started!
    2019-09-05 16:39:27.145  INFO 47936 --- [       resin-40] c.p.common.command.MyCommandLineRunner   : This will be execute when the project was started!
    

    这两种方式的实现都很简单,直接实现了相应的接口就可以了。

    记得在类上加@Component注解。

    四、指定启动方法执行的顺序

    如果想要指定启动方法执行的顺序,可以通过实现org.springframework.core.Ordered接口或者使用org.springframework.core.annotation.Order注解来实现。

    以ApplicationRunner 为例来分别实现。

    1、Ordered接口:
    Component
    public class MyApplicationRunner implements ApplicationRunner,Ordered{
    
        @Override
        public int getOrder(){
            return 1;//通过设置这里的数字来知道指定顺序
        }
    
        @Override
        public void run(ApplicationArguments var1) throws Exception{
            System.out.println("MyApplicationRunner1!");
        }
    }
    
    2、Order注解实现方式:
    @Component
    @Order(value = 1)
    public class MyApplicationRunner implements ApplicationRunner{
    
        @Override
        public void run(ApplicationArguments var1) throws Exception{
            System.out.println("MyApplicationRunner1!");
        }
    
    }
    

    参考文档:

    https://www.jianshu.com/p/fa2783cee2a7

  • 相关阅读:
    模拟实现bind、call、apply函数
    模拟实现ECMAScript5新增的数组方法
    HBuilder mui页面间传值的几种方式
    手机端软键盘弹出挤压页面的问题
    js获取当前时间
    原生js根据class获取元素的方法
    jquery之获取select选中的值
    原生js获取元素属性值方法
    利用javascrit获取url传递的参数
    jQuery图片预加载(延迟加载)之插件Lazy Load
  • 原文地址:https://www.cnblogs.com/cnsyear/p/12732168.html
Copyright © 2020-2023  润新知