Spring Boot项目启动时执行指定的方法
项目场景:
本文介绍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注解执行顺序控制_多个postconstruct执行顺序-CSDN博客
(图片来源网络,侵删)
方式二:实现CommandLineRunner接口
@Component public class CommandLineRunnerImpl implements CommandLineRunner { @Override public void run(String... args) throws Exception { System.out.println("启动时自动执行 CommandLineRunner 的 run 方法"); } }
优点: 项目已经初始化完毕,才会执行方法,所以不用等这个方法执行完,就可以正常提供服务了。
缺点:暂未发现。
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。
还没有评论,来说两句吧...