温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

SpringBoot 实现添加容器启动的初始化逻辑的方法

发布时间:2020-11-03 16:23:14 来源:亿速云 阅读:230 作者:Leah 栏目:开发技术

这期内容当中小编将会给大家带来有关SpringBoot 实现添加容器启动的初始化逻辑的方法,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

SpringBoot 启动类和应用监听器

首先,SpringBoot 启动类中可以添加应用的初始化逻辑,但是打包方式不同,添加的地方也有差异。

jar 包:使用内嵌 Tomcat 时,可以直接写在 main 函数中,且 SpringApplication.run 代码之前,容器未启动,此时无法获取 getBean 实例。war 包:外部部署时,main 函数中的方法不会被执行,可以在 configure 方法中添加初始化逻辑,此时容器未启动,无法获取 getBean 实例。

其次,就是自定义容器启动监听器类,为其添加 @Componnet 注解:

@Component
public class InitContextListener implements ApplicationListener<ContextRefreshedEvent> {
 private static Logger logger = Logger.getLogger(InitContextListener.class);

 @Override
 public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
  // 设置全局配置信息文件存储路径
  String path = ClassUtils.getDefaultClassLoader().getResource("").getPath();
  logger.info("onApplicationEvent 项目部署路径为:"+path);
  VersionManager.resourcePath = path;

  // TODO 应用初始化逻辑,容器此时已启动,getBean 获取实例 OK
 }
}

IDEA 直接运行

IDEA 中直接运行 SpringBoot 的启动类,它会执行初始化逻辑:

SpringBoot 实现添加容器启动的初始化逻辑的方法
configure方法不会执行,main 中的初始化逻辑会生效,onApplicationEvent 监听方法也会执行。

war 包发布

打成 war 包后,启动应用,SpringBoot 的启动类的 main 方法不会执行,configure 方法中的初始化逻辑会生效,onApplicationEvent 监听方法也会执行。

1、应用启动之前,先执行 configure 方法:

SpringBoot 实现添加容器启动的初始化逻辑的方法

2、启动之后的,onApplicationEvent 监听方法执行:

SpringBoot 实现添加容器启动的初始化逻辑的方法

jar 包发布

打成 jar 包,跟直接运行 IDEA 的结果一样。

1、应用启动之前,启动类的 main 函数 SpringApplication.run 之前的初始化信息:

SpringBoot 实现添加容器启动的初始化逻辑的方法

2、应用启动之后,启动类的 main 函数 SpringApplication.run 之后的初始化信息,onApplicationEvent 监听事件会执行:

SpringBoot 实现添加容器启动的初始化逻辑的方法

启示录

记住一种就够了,用 ApplicationListener 在容器启动之后,添加应用需要的初始化逻辑,本质上跟定义一个开机启动的 Servlet 一样。

只是用 SpringBoot 之后,一个 @Component 注解,就可以替代 web.xml 中对 Servelt 的配置:

<!-- 配置初始化启动线程 -->
	<servlet>
		<servlet-name>initServlet</servlet-name>
		<servlet-class>
			Xxx.InitContexServlet
		</servlet-class>
		<load-on-startup>3</load-on-startup>
	</servlet>

上述就是小编为大家分享的SpringBoot 实现添加容器启动的初始化逻辑的方法了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI