java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > SpringBoot启动后运行代码

SpringBoot启动后运行代码的几种方法

作者:1010n111

在开发SpringBoot应用时,有时需要在应用启动后执行一些特定的代码,例如监控目录变化、初始化数据等,然而,直接在启动时运行代码可能会遇到@Autowired服务未初始化的问题,因此需要找到合适的时机来执行这些代码,所以本文给大家介绍了SpringBoot启动后运行代码的几种方法

Spring Boot启动后运行代码的方法

实现步骤

1. 使用ApplicationReadyEvent

ApplicationReadyEvent会在应用刷新并处理完所有相关回调后触发,表明应用已准备好处理请求。可以通过@EventListener注解监听该事件。

import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;

@Component
public class StartupRunner {

    @EventListener(ApplicationReadyEvent.class)
    public void doSomethingAfterStartup() {
        System.out.println("hello world, I have just started up");
    }
}

2. 实现ApplicationListener<ApplicationReadyEvent>接口

创建一个类实现ApplicationListener<ApplicationReadyEvent>接口,并重写onApplicationEvent方法。

import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;

@Component
public class ApplicationStartup implements ApplicationListener<ApplicationReadyEvent> {

    @Override
    public void onApplicationEvent(final ApplicationReadyEvent event) {
        // 这里编写你的代码
    }
}

3. 使用CommandLineRunner或ApplicationRunner

CommandLineRunnerApplicationRunner是Spring Boot提供的接口,实现这些接口并重写run方法,Spring Boot会在应用启动过程的末尾执行这些方法。

import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

@Component
public class CommandLineAppStartupRunner implements CommandLineRunner {

    @Override
    public void run(String... args) throws Exception {
        System.out.println("Application started with command-line arguments: " + String.join(", ", args));
    }
}

4. 使用@PostConstruct注解

在一个@Component类中使用@PostConstruct注解的方法会在Bean初始化完成后执行。

import javax.annotation.PostConstruct;
import org.springframework.stereotype.Component;

@Component
public class Monitor {

    @PostConstruct
    public void init() {
        // 在这里启动监控
    }
}

5. 使用SmartInitializingSingleton

在Spring 4.1及以上版本中,可以使用SmartInitializingSingleton,它会在所有单例Bean初始化完成后回调。

import org.springframework.beans.factory.SmartInitializingSingleton;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class AppConfig {

    @Bean
    public SmartInitializingSingleton importProcessor() {
        return () -> {
            // 执行任务
        };
    }
}

核心代码

以下是几种方法的核心代码示例:

使用ApplicationReadyEvent

import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;

@Component
public class StartupExample {

    @EventListener(ApplicationReadyEvent.class)
    public void executeAfterStartup() {
        System.out.println("执行启动后任务");
    }
}

使用CommandLineRunner

import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

@Component
public class CommandLineExample implements CommandLineRunner {

    @Override
    public void run(String... args) throws Exception {
        System.out.println("使用CommandLineRunner执行任务");
    }
}

使用@PostConstruct

import javax.annotation.PostConstruct;
import org.springframework.stereotype.Component;

@Component
public class PostConstructExample {

    @PostConstruct
    public void init() {
        System.out.println("使用@PostConstruct执行任务");
    }
}

最佳实践

常见问题

以上就是SpringBoot启动后运行代码的几种方法的详细内容,更多关于SpringBoot启动后运行代码的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文