springboot项目启动后的执行方法有哪些

1 方法
  • ApplicationListener<
    ContextRefreshedEvent>
    不推荐

  • ApplicationListener 推荐

  • CommandLineRunner 推荐

方法1:spring的ApplicationListener<
ContextRefreshedEvent>
接口

【新媒体解读】springboot项目启动后的7种执行方法

实现ApplicationListener接口,并实现 onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent)方法

@Service
public class SearchReceive implements ApplicationListener<
ContextRefreshedEvent>
{
@Override
public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
if (contextRefreshedEvent.getApplicationContext().getParent() == null) {//保证只执行一次
//需要执行的方法
}
}
} 方法2:springboot的ApplicationRunner接口

ApplicationListener和CommandLineRunner两个接口是springBoot提供用来在spring容器加载完成后执行指定方法。两个接口区别主要是入参不同。

实现ApplicationRunner接口

@Component
@Order(value = 1)
public class AfterRunner implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println("
执行方法"
);

}
} 方法3:springboot的CommandLineRunner接口

实现CommandLineRunner接口

@Component
@Order(value = 2)
public class CommandLineRunnerImpl implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
System.out.println("
执行方法"
);

}
}

注:如果同时implements ApplicationListener和CommandLineRunner两个接口,ApplicationRunner接口的方法先执行,CommandLineRunner后执行;

@Slf4j
@Component
public class RunnerTest implements ApplicationRunner, CommandLineRunner {

@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println("
服务启动RunnerTest ApplicationRunner执行启动加载任务..."
);

}

@Override
public void run(String... args) throws Exception {
System.out.println("
服务启动RunnerTest CommandLineRunner 执行启动加载任务..."
);

}
}
} 2 指定执行顺序

当项目中同时实现了ApplicationRunner和CommondLineRunner接口时,可使用Order注解或实现Ordered接口来指定执行顺序,值越小越先执行。

3 原理

SpringApplication 的run方法会执行afterRefresh方法。

afterRefresh方法会执行callRunners方法。

callRunners方法会调用所有实现ApplicationRunner和CommondLineRunner接口的方法。



在SpringBoot项目中,启动后可以进行多种操作,对于开发者而言,这些操作都具有重要的意义。接下来,我们将详细介绍springboot项目启动后的执行方法有哪些。
一、自定义Banner
在启动SpringBoot项目时,默认情况下会显示Spring的Logo,但是开发者可以通过自定义Banner来替换默认的Logo。这样可以让自己的应用更加个性化,增加品牌效应。
二、自定义WebEnvironment
SpringBoot的Web环境是通过WebEnvironment接口实现的。在项目启动时,可以通过实现该接口自定义Web Environment。例如,将Web Environment设置为\"servlet\"或\"reactive\",可以对应不同的Web容器实现。
三、指定特定的Profile
在启动SpringBoot项目时,可以指定运行的Profile。例如,指定依赖中的\"dev\"或\"prod\",可以对应不同的环境。开发者可以针对不同的Profile进行调试和测试。
四、自定义容器启动顺序
在SpringBoot项目启动中,可以自定义容器启动的顺序,这样可以更加精细的控制容器启动的时机。通过在配置文件中设置context.initializer.classes和context.listener.classes,可以改变Spring容器的启动顺序。
五、自定义Servlet
在SpringBoot项目启动时,可以定义自己的Servlet。这样可以更加贴近业务逻辑和需求,实现更灵活的业务扩展。例如,自定义一个Servlet用于处理Web API请求,可以实现API版本控制等多种功能。
六、自定义启动异常处理
在SpringBoot项目启动的过程中,可能会出现各种异常。为了保证应用的稳定性和健壮性,开发者可以自定义异常处理器来处理启动过程中的异常,例如设置ExceptionHandler来捕获异常。
七、执行自定义初始化代码
在SpringBoot项目启动后,可以执行自定义的初始化代码。例如,可以实现对数据库的初始化操作,包括创建和初始化数据表,设置索引等。这样可以保证应用的初始化更加完善,避免后续出现问题。
总结:
在SpringBoot项目中,不同的操作都具有不同的意义和作用。通过如上的七种方法,开发者可以更灵活的控制应用的启动过程,实现更好的应用控制和优化。同时,这些方法也为开发人员展示项目的个性和品牌提供了广阔的舞台。