环境:SpringBoot2.7.18
通过指定spring.application.admin.enabled属性,可以为应用程序启用管理员相关的功能。这在平台MBeanServer上公开了SpringApplicationAdminMXBean。你可以使用这个特性远程管理Spring Boot应用程序。
spring: application: admin: enabled: true
开启管理功能后,你可以通过JConsole查看MBean对当前的SpringBoot程序进行简单的管理及查看。默认JMX的名称为:org.springframework.boot:type=Admin,name=SpringApplication
图片
在操作菜单中,我们可以通过shutdown关闭应用程序,可以通过getProperty获取应用中的配置属性信息。
图片
获取属性信息:
图片
自定义JMX名称:
spring: application: admin: enabled: true jmx-name: com.pack:type=AKF,name=PackAPP
注意:这里jmx-name格式:xxx:type=yyy,name=zzz
图片
每个SpringApplication都向JVM注册一个关闭挂钩,以确保ApplicationContext在退出时正常关闭。所有标准的Spring生命周期回调(如DisposableBean接口或@PreDestroy注释)都可以使用。
@Component@Order(-2)public class PackExitCodeGenerator implements ExitCodeGenerator { @Override public int getExitCode() { System.out.println("PackExitCodeGenerator exit code 6...") ; return 6 ; }}
你可以定义多个实现了ExitCodeGenerator的类,通过@Order定义顺序,而SpringBoot只会返回第一个非零的退出码。
SpringBoot的退出操作是调用当前容器ConfigurableApplicationContext#close方法。所以当前容器中所有实现了DisposableBean或使用了@PreDestory注解他们对应的回调方法都执行。
@Componentpublic class AppComponent implements DisposableBean { @Override public void destroy() throws Exception { System.out.println("Bean生命周期结束...") ; }}
@Resourceprivate ConfigurableApplicationContext context ;@GetMapping("")public Object exit() { SpringApplication.exit(context) ; return "exit" ;}
调用上的接口后,你将在控制台看到如下输出
图片
在关闭应用程序之前SpringBoot会发布ExitCodeEvent事件
@Componentpublic class PackAppExitListener implements ApplicationListener<ExitCodeEvent> { @Override public void onApplicationEvent(ExitCodeEvent event) { System.out.printf("监听到应用退出事件,退出码:%d%n", event.getExitCode()) ; }}
结果输出:
图片
在应用程序启动期间,SpringApplication和ApplicationContext执行许多与应用程序生命周期、bean生命周期甚至处理应用程序事件相关的任务。有了ApplicationStartup, Spring框架允许你用StartupStep对象跟踪应用程序的启动顺序。收集这些数据可以用于分析,或者只是为了更好地了解应用程序启动过程。
你可以在设置SpringApplication实例时选择ApplicationStartup实现。例如,要使用BufferingApplicationStartup,如下示例:
SpringApplication application = new SpringApplication(SpringbootComprehensiveApplication.class) ;application.setApplicationStartup(new BufferingApplicationStartup(2048)) ;application.run(args) ;
接下来需要通过可以通过Actuator暴露的端口,以JSON的形式查看信息。引入依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId></dependency>
通过/startup接口查看Spring容器启动过程的完整信息。
图片
在你的项目中你还可以注入ApplicationStartup,在自己的业务代码中进行监控。
@Resourceprivate ApplicationStartup startup ;
这样你就可以进行start和end方法调用进行记录监控了。
本文链接:http://www.28at.com/showinfo-26-98190-0.html管理SpringBoot项目的三个强大的功能是否用过?
声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com