springboot启动时执行方法该怎么实现?

TheDisguiser 2020-07-10 16:41:04 java常见问答 9026

Springboot是spring全家桶中最出名的一位,小伙伴们知道springboot在执行时我们要怎么才能让它执行方法吗?下面就来看看吧。

在Springboot中,它总共给我们提供了两种能够在启动时执行方法的接口:

1、ApplicationRunner

ApplicationRunner 是使用ApplicationArguments 用来接收参数的。

2、CommandLineRunner

CommandLineRunner接口能够用来接收字符串数组的命令行参数

ApplicationRunner和CommandLineRunner都是在SpringApplication执行之后开始执行的。

实现这两者的方式非常简单,直接实现相应的接口就ok了。

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

@Component
@Order(1)
public class ConsumeMqTask implements ApplicationRunner
{
    /**
     * 日志
     */
    private static final Logger LOGGER = LoggerFactory.getLogger(ConsumeMqTask.class);
    private ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(
        1);
    @Override
    public void run(ApplicationArguments args)
    throws Exception
    {
        LOGGER.info("start to run ConsumeMqTask.");
        // 参数:1、任务体 2、首次执行的延时时间
        //      3、任务执行间隔 4、间隔时间单位
        scheduledExecutorService.scheduleAtFixedRate(new Runnable()
        {
            @Override
            public void run()
            {
                consumeDataFromMq();
            }
        }, 0, 3, TimeUnit.SECONDS);
        LOGGER.info("end to run ConsumeMqTask.");
    }
    /**
     * <从rabbitmq中消费机场数据>
     *
     * @throws
     */
    private void consumeDataFromMq()
    {
        LOGGER.info("[ConsumeMqTask] start to consumeDataFromMq.");
        LOGGER.info("[ConsumeMqTask] end to consumeDataFromMq.");
    }
}
@Component
public class Runner implements CommandLineRunner
{
    @Override
    public void run(String...args) throws Exception
    {
        //此处为了记录一下线程的使用,没任何意义
        new Thread(() - >
            {
                try
                {
                    execute();
                }
                catch (Exception e)
                {
                    e.printStackTrace();
                }
            })
            .start();
    }
    private void execute() throws Exception
    {
        System.out.println("hhahahahha");
    }

PS:类上记得要加@Component注解

以上就是本篇文章的所有内容了,你知道该怎么实现了吧。还想了解更多java常见问题及解决方法就快关注本网站吧。

推荐阅读:

springboot整合定时器该怎么实现?有哪些方式?

springboot部署tomcat该如何部署?

springboot框架的优点是什么? springboot比spring的优势如何?