管理SpringBoot项目的三个强大的功能是否用过?

开发 前端
通过指定spring.application.admin.enabled属性,可以为应用程序启用管理员相关的功能。这在平台MBeanServer上公开了SpringApplicationAdminMXBean。你可以使用这个特性远程管理Spring Boot应用程序。

环境:SpringBoot2.7.18

1. 管理功能Admin Features

通过指定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

图片图片

2. 应用退出

每个SpringApplication都向JVM注册一个关闭挂钩,以确保ApplicationContext在退出时正常关闭。所有标准的Spring生命周期回调(如DisposableBean接口或@PreDestroy注释)都可以使用。

2.1 自定义退出码

@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注解他们对应的回调方法都执行。

2.2 自定义DisposableBean

@Component
public class AppComponent implements DisposableBean {


  @Override
  public void destroy() throws Exception {
    System.out.println("Bean生命周期结束...") ;
  }
}

2.3 定义exit接口

@Resource
private ConfigurableApplicationContext context ;


@GetMapping("")
public Object exit() {
  SpringApplication.exit(context) ;
  return "exit" ;
}

2.4 测试

调用上的接口后,你将在控制台看到如下输出

图片图片

在关闭应用程序之前SpringBoot会发布ExitCodeEvent事件

@Component
public class PackAppExitListener implements ApplicationListener<ExitCodeEvent> {


  @Override
  public void onApplicationEvent(ExitCodeEvent event) {
    System.out.printf("监听到应用退出事件,退出码:%d%n", event.getExitCode()) ;
  }
}

结果输出:

图片图片

3. 应用启动跟踪

在应用程序启动期间,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,在自己的业务代码中进行监控。

@Resource
private ApplicationStartup startup ;

这样你就可以进行start和end方法调用进行记录监控了。

责任编辑:武晓燕 来源: Spring全家桶实战案例源码
相关推荐

2023-09-13 09:20:00

日志配置Spring

2015-03-12 10:57:51

开源项目

2010-03-24 10:32:05

Python多线程

2011-12-25 20:45:19

云计算云安全

2015-10-28 09:42:51

甄别众筹项目方法

2011-12-23 09:37:59

云计算

2021-05-17 09:52:53

工具dumiVue 组件

2012-02-06 08:54:12

项目管理

2023-01-02 17:25:43

LinuxQtFM文件管理器

2022-02-04 23:34:22

Windows 10技巧微软

2009-12-23 10:37:24

网络故障诊断

2011-07-05 09:16:43

项目经理

2018-03-13 12:24:51

2010-03-10 10:41:23

Linux管理效率

2012-02-28 09:41:00

Linux管理效率技巧

2023-10-26 07:29:06

mongodb十六进制ID

2013-09-26 12:31:54

Windows 8.1Windows 8.1

2023-04-26 11:14:11

IT领导者远程工作

2013-05-03 10:11:26

信息安全BYOT

2021-10-18 08:13:17

OpenPGP.jsJavaScript前端
点赞
收藏

51CTO技术栈公众号