• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

SpringBoot项目启动执行任务的几种方式

武飞扬头像
傻鱼爱编程
帮助3

经过整理后得到以下几种常用方式,供大家参考。

1. 使用过滤器

init() :该方法在tomcat容器启动初始化过滤器时被调用,它在 Filter 的整个生命周期只会被调用一次。可以在这个方法中补充想要执行的内容。

  1.  
    @Component
  2.  
    public class MyFilter implements Filter {
  3.  
     
  4.  
    /**
  5.  
    * init() :该方法在tomcat容器启动初始化过滤器时被调用,它在 Filter 的整个生命周期只会被调用一次。
  6.  
    * doFilter() :容器中的每一次请求都会调用该方法, FilterChain(放行) 用来调用下一个过滤器 Filter。
  7.  
    * destroy(): 当容器销毁过滤器实例时调用该方法,在方法中销毁或关闭资源,在过滤器 Filter 的整个生命周期也只会被调用一次。
  8.  
    */
  9.  
    @Override
  10.  
    public void init(FilterConfig filterConfig) throws ServletException {
  11.  
    System.out.println("Filter 前置");
  12.  
    }
  13.  
     
  14.  
    @Override
  15.  
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
  16.  
    System.out.println("Filter 处理中");
  17.  
    filterChain.doFilter(servletRequest, servletResponse);
  18.  
    }
  19.  
     
  20.  
    @Override
  21.  
    public void destroy() {
  22.  
    System.out.println("Filter 后置");
  23.  
    }
  24.  
    }
学新通

2.实现InitializingBean接口,代码如下:

  1.  
    @Component
  2.  
    public class MyInitStart2 implements InitializingBean {
  3.  
     
  4.  
    @Override
  5.  
    public void afterPropertiesSet() throws Exception {
  6.  
    System.out.println("在MyInitStart2中添加初始下方法");
  7.  
    }
  8.  
    }

3.实现ApplicationListener接口,代码如下:

  1.  
    @Component
  2.  
    public class MyInitStart3 implements ApplicationListener<ApplicationStartedEvent> {
  3.  
    @Override
  4.  
    public void onApplicationEvent(ApplicationStartedEvent event) {
  5.  
    System.out.println("在MyInitStart3中添加初始下方法");
  6.  
    }
  7.  
    }

4.实现ApplicationRunner接口,代码如下:

  1.  
    @Component
  2.  
    public class MyInitStart4 implements ApplicationRunner {
  3.  
    @Override
  4.  
    public void run(ApplicationArguments args) throws Exception {
  5.  
    System.out.println("在MyInitStart4中添加初始下方法");
  6.  
    }
  7.  
    }

5.实现CommandLineRunner接口,代码如下:

  1.  
    @Component
  2.  
    public class MyInitStart5 implements CommandLineRunner {
  3.  
    @Override
  4.  
    public void run(String... args) throws Exception {
  5.  
    System.out.println("在MyInitStart5中添加初始下方法");
  6.  
    }
  7.  
    }

6.使用@PostConstruct注解,代码如下:

  1.  
    @Component
  2.  
    public class MyInitStart6 {
  3.  
    @PostConstruct
  4.  
    public void run() {
  5.  
    System.out.println("在MyInitStart6中添加初始下方法");
  6.  
    }
  7.  
    }

7.直接在启动类下面调用方法

  1.  
    public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {
  2.  
    ConfigurableApplicationContext run = SpringApplication.run(YabaoApplication.class, args);
  3.  
    System.out.println("在启动类添加初始下方法");
  4.  
    }

其实我们也可以使用springboot定时器@Scheduled进行实现,启动后就去执行一次。

我们看下以上其中方法打印的顺序:

学新通

 看到打印的信息后我们可以发现他们的执行顺序,filter是在最前面的。这几种方法经常会被用到,当我们的项目启动后需要调用对应的方法,用来项目的初始化等。

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhfhafjk
系列文章
更多 icon
同类精品
更多 icon
继续加载