SpringBoot:通过web控制当前的SpringBoot程序重新启动

当前版本:SpringBoot2.3.12.RELEASEJDK1.8

1. 声明

当前内容主要为本人学习和使用SpringBoot,实现通过web方式控制SpringBoot的程序重启操作,主要参考SpringBoot官方文档

  1. 通过观察发现重启是与RemoteSpringApplication有关
  2. 查看源码发现与Restarter有关
  3. 所以可以手动实现

2.源码寻找

RemoteSpringApplication源码

private void run(String[] args) {
	Restarter.initialize(args, RestartInitializer.NONE);
	SpringApplication application = new SpringApplication(RemoteClientConfiguration.class);
	application.setWebApplicationType(WebApplicationType.NONE);
	application.setBanner(getBanner());
	application.setInitializers(getInitializers());
	application.setListeners(getListeners());
	application.run(args);
	waitIndefinitely();
}

看到主要实现的为Restarter,然后找到Restarter源码
在这里插入图片描述

/**
 * Restart the running application.
 * @param failureHandler a failure handler to deal with application that doesn't start
 */
public void restart(FailureHandler failureHandler) {
	if (!this.enabled) {
		this.logger.debug("Application restart is disabled");
		return;
	}
	this.logger.debug("Restarting application");
	getLeakSafeThread().call(() -> {
		Restarter.this.stop();
		Restarter.this.start(failureHandler);
		return null;
	});
}

所以找到了重启的方式

3.重启实现Demo

首先导入devtools依赖

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-devtools</artifactId>
	<optional>false</optional>
</dependency>

注意先导入springboot-parent依赖

为了方便比较是否重启,定义一个随机数用于查看

AppConfig代码

@Configuration
public class AppConfig implements WebMvcConfigurer{

	public AppConfig() {
		int randomNum = (int)(Math.random()*1000)+1;
		System.out.println("AppConfig 实例化成功........."+(randomNum));
	}	
}

写一个重启controller

@RestController
public class RestartController {
	@Autowired
	ApplicationContext applicationContext;
	
	@RequestMapping("/restart")
	public String restart() {
		Restarter restarter = Restarter.getInstance();
		restarter.restart(new FailureHandler() {

			public Outcome handle(Throwable failure) {
				System.out.println("当前系统出现问题,无法重启项目...........");
				return Outcome.ABORT;
			}
			
		});
		return "重启服务成功!";
	}
}

启动类

@SpringBootApplication
public class Application {
	public static void main(String[] args) {
		SpringApplication application = new SpringApplicationBuilder(Application.class).build(args);
		application.run();
	}
}

4. 测试

在这里插入图片描述
调用接口后
在这里插入图片描述
在这里插入图片描述
重新启动了当前的SpringBoot程序了,测试成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值