Spring Boot项目启动时执行指定的方法

项目场景:

本文介绍Spring Boot项目启动时执行指定的方法两种常用方式和他们之间的区别。


实现方案:

方式一:使用注解@PostConstruct

java 复制代码
@Component
public class PostConstructTest {
    @PostConstruct
    public void postConstruct() {
		System.out.println("启动时自动执行  @PostConstruct 注解方法");
    }
}

优点: 简单方便,加上一个注解就行了。

缺点:如果@PostConstruct方法内的逻辑处理时间较长,就会增加SpringBoot应用初始化Bean的时间,进而增加应用启动的时间。因为只有在Bean初始化完成后,SpringBoot应用才会打开端口提供服务,所以在此之前,应用不可访问。

建议:轻量的逻辑可放在Bean的@PostConstruct方法中,耗时长的逻辑如果放在@PostConstruct方法中,可使用@Async异步方法。

使用异步代码示例:

java 复制代码
@Service
public class TestService {
 
    @Async("testAsync")  //指定线程池
    public void test() {
        System.out.println("------------------------异步方法开始 " + Thread.currentThread().getName());
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("----------------异步方法执行完了" + Thread.currentThread().getName());
    }
}
java 复制代码
@Component
public class PostConstructTest {

	@Autowired
    private TestService testService;
	
    @PostConstruct
    public void postConstruct() {
		System.out.println("启动时自动执行  @PostConstruct 注解方法");
		testService.test();
    }
}

Spring Boot中多个PostConstruct注解执行顺序控制_多个postconstruct执行顺序-CSDN博客


方式二:实现CommandLineRunner接口

java 复制代码
@Component
public class CommandLineRunnerImpl implements CommandLineRunner {

    @Override
    public void run(String... args) throws Exception {
		System.out.println("启动时自动执行 CommandLineRunner 的 run 方法");
    }
}

优点: 项目已经初始化完毕,才会执行方法,所以不用等这个方法执行完,就可以正常提供服务了。

缺点:暂未发现。

相关推荐
源码技术栈25 分钟前
什么是云门诊系统、云诊所系统?
java·vue.js·spring boot·源码·门诊·云门诊
Coder-coco35 分钟前
游戏助手|游戏攻略|基于SprinBoot+vue的游戏攻略系统小程序(源码+数据库+文档)
java·vue.js·spring boot·游戏·小程序·论文·游戏助手
Qiuner37 分钟前
Spring Boot 机制二:配置属性绑定 Binder 源码解析(ConfigurationProperties 全链路)
java·spring boot·后端·spring·binder
K***43064 小时前
IDEA+Docker一键部署项目SpringBoot项目
spring boot·docker·intellij-idea
t***p93510 小时前
idea创建SpringBoot自动创建Lombok无效果(解决)
spring boot·后端·intellij-idea
d***817210 小时前
解决SpringBoot项目启动错误:找不到或无法加载主类
java·spring boot·后端
自不量力的A同学13 小时前
Spring Boot 4.0.0 正式发布
java·spring boot·后端
q***985214 小时前
什么是Spring Boot 应用开发?
java·spring boot·后端
豆奶特浓615 小时前
Java面试模拟:当搞笑程序员谢飞机遇到电商秒杀与AIGC客服场景
java·spring boot·微服务·面试·aigc·高并发·电商
踏浪无痕17 小时前
PageHelper 防坑指南:从兜底方案到根治方案
spring boot·后端