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常见问题及解决方法就快关注本网站吧。
推荐阅读: