SpringBoot项目启动时执行指定的方法
项目场景:
本文介绍Spring Boot项目启动时执行指定的方法两种常用方式和他们之间的区别。
实现方案:
方式一:使用注解@PostConstruct
@Component
public class PostConstructTest {
@PostConstruct
public void postConstruct() {
System.out.println("启动时自动执行 @PostConstruct 注解方法");
}
}优点: 简单方便,加上一个注解就行了。
缺点:如果@PostConstruct方法内的逻辑处理时间较长,就会增加SpringBoot应用初始化Bean的时间,进而增加应用启动的时间。因为只有在Bean初始化完成后,SpringBoot应用才会打开端口提供服务,所以在此之前,应用不可访问。
建议:轻量的逻辑可放在Bean的@PostConstruct方法中,耗时长的逻辑如果放在@PostConstruct方法中,可使用@Async异步方法。
使用异步代码示例:
@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());
}
}
@Component
public class PostConstructTest {
@Autowired
private TestService testService;
@PostConstruct
public void postConstruct() {
System.out.println("启动时自动执行 @PostConstruct 注解方法");
testService.test();
}
}Spring Boot中多个PostConstruct注解执行顺序控制
方式二:实现CommandLineRunner接口
@Component
public class CommandLineRunnerImpl implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
System.out.println("启动时自动执行 CommandLineRunner 的 run 方法");
}
}优点: 项目已经初始化完毕,才会执行方法,所以不用等这个方法执行完,就可以正常提供服务了。
缺点:暂未发现。
到此这篇关于SpringBoot项目启动时执行指定的方法的文章就介绍到这了,更多相关SpringBoot项目启动时执行指定内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
图解Java ReentrantLock的条件变量Condition机制
想必大家都使用过wait()和notify()这两个方法把,他们主要用于多线程间的协同处理。而RenentrantLock也支持这样条件变量的能力,而且相对于synchronized 更加强大,能够支持多个条件变量,本文就来详细说说2022-10-10
SpringBoot 使用 Sa-Token 完成注解鉴权功能(权限校验)
Sa-Token 是一个轻量级 java 权限认证框架,主要解决登录认证、权限认证、单点登录、OAuth2、微服务网关鉴权 等一系列权限相关问题,这篇文章主要介绍了SpringBoot使用Sa-Token完成注解鉴权功能,需要的朋友可以参考下2023-05-05


最新评论