Spring Boot应用启动时自动执行代码的五种方式

Spring Boot应用启动时自动执行代码的五种方式Spring Boot 为开发者提供了多种方式在应用启动时执行自定义代码 这些方式包括注解 接口实现和事件监听器 在本篇博客中 我们将探讨一些常见的方法 以及如何利用它们在应用启动时执行初始化逻辑 1 PostConstruc 注解 PostConstruc 注解可以标注在方法上

大家好,我是讯享网,很高兴认识大家。

Spring Boot为开发者提供了多种方式在应用启动时执行自定义代码,这些方式包括注解、接口实现和事件监听器。在本篇博客中,我们将探讨一些常见的方法,以及如何利用它们在应用启动时执行初始化逻辑。


讯享网

1.  @PostConstruct注解

`@PostConstruct`注解可以标注在方法上,该方法将在类被初始化后调用。在Spring Boot应用中,你可以使用这个注解来执行一些初始化的逻辑。

@PostConstruct public void doSomething(){     // 在应用启动后执行的代码     System.out.println("do something"); }

讯享网

2.  ApplicationListener接口

实现`ApplicationListener`接口并监听`ApplicationStartedEvent`事件,这样你的逻辑将在应用启动后被触发。

讯享网import org.springframework.boot.context.event.ApplicationStartedEvent; import org.springframework.context.ApplicationListener; public class MyApplicationListener implements ApplicationListener<ApplicationStartedEvent> {     @Override     public void onApplicationEvent(ApplicationStartedEvent event) {         // 在应用启动后执行的代码         System.out.println("ApplicationListener executed");     } }

 3.  @EventListener注解

使用`@EventListener`注解,可以将方法标记为事件监听器,并在特定事件发生时执行。

import org.springframework.boot.context.event.ApplicationStartedEvent; import org.springframework.context.event.EventListener; public class MyEventListener {     @EventListener(ApplicationStartedEvent.class)     public void onApplicationEvent() {         // 在应用启动后执行的代码         System.out.println("@EventListener executed");     } }

4.  ApplicationRunner接口

实现`ApplicationRunner`接口,该接口的`run`方法会在Spring Boot应用启动后执行。

讯享网import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; public class MyApplicationRunner implements ApplicationRunner {     @Override     public void run(ApplicationArguments args) throws Exception {         // 在应用启动后执行的代码         System.out.println("ApplicationRunner executed");     } }

5.  CommandLineRunner接口

与`ApplicationRunner`类似,`CommandLineRunner`接口的`run`方法也在应用启动后执行。

public class MyCommandLineRunner implements CommandLineRunner {     @Override     public void run(String... args) throws Exception {         // 在应用启动后执行的代码         System.out.println("CommandLineRunner executed");     } }

Demo代码

 完整如下

讯享网import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.context.event.ApplicationStartedEvent; import org.springframework.context.ApplicationListener; import org.springframework.context.event.EventListener; import javax.annotation.PostConstruct; @SpringBootApplication public class Application implements ApplicationListener<ApplicationStartedEvent>, CommandLineRunner, ApplicationRunner { / * 本次执行先后顺序为(没有设置order) * PostConstruct、ApplicationListener、@EventListener注解、ApplicationRunner、CommandLineRunner * @param args */ public static void main(String[] args) { SpringApplication.run(Application.class, args); } @PostConstruct public void doSomething(){ // 在应用启动后执行的代码 System.out.println("do something "); System.out.println("PostConstruct注解启动"); System.out.println("==============="); } @EventListener(ApplicationStartedEvent.class) public void onApplicationEvent() { // 在应用启动后执行的代码 System.out.println("do something "); System.out.println("@EventListener 注解启动 executed"); System.out.println("==============="); } @Override public void onApplicationEvent(ApplicationStartedEvent event) { // 在应用启动后执行的代码 System.out.println("do something "); System.out.println("ApplicationListener executed"); System.out.println("==============="); } @Override public void run(String... args) throws Exception { // 在应用启动后执行的代码 System.out.println("do something "); System.out.println("CommandLineRunner启动"); System.out.println("==============="); } @Override public void run(ApplicationArguments args) throws Exception { // 在应用启动后执行的代码 System.out.println("do something "); System.out.println("ApplicationRunner启动"); System.out.println("==============="); } } 

Demo分析

  1. @PostConstruct注解方法 (doSomething方法) 在类初始化后被调用,因此会首先输出。
  2. ApplicationListener接口方法 (onApplicationEvent方法) 在应用启动后执行,会输出其相关的信息。
  3. @EventListener注解方法 (onApplicationEvent方法) 同样在应用启动后执行,会输出其相关的信息。
  4. ApplicationRunner接口方法 (run方法) 在ApplicationListener之后执行,它用于在Spring Boot应用启动后执行一些额外的逻辑。
  5. CommandLineRunner接口方法 (run方法) 也在ApplicationListener之后执行,用于在Spring Boot应用启动后执行一些额外的逻辑。

总结

通过以上几种方式,你可以根据项目的需求选择合适的初始化方法。无论是使用注解、接口实现,还是事件监听器,Spring Boot提供了灵活的机制来管理应用启动时的自定义逻辑,使得开发者能够更方便地控制应用的初始化过程。在实际项目中,通常根据具体场景选择其中一种或多种方式,以满足不同的需求。

小讯
上一篇 2025-02-09 17:38
下一篇 2025-02-09 12:53

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/18171.html