spring boot应用内部实现应用自身重启的两种方式
在spring boot应用内部实现应用自身重启
不适合大型项目,也不太适合7*24项目,能刷新的就不要重启
方式一:通过重新创建上下文进行重启
实现:
spring boot启动类
@SpringBootApplication
public class Application {private static ConfigurableApplicationContext context;public static void main(String[] args) {context = SpringApplication.run(Application.class, args);}/*** 调用该方法即可完成应用重启*/public static void restart() {ApplicationArguments args = context.getBean(ApplicationArguments.class);Thread thread = new Thread(() -> {context.close();context = SpringApplication.run(Application.class, args.getSourceArgs());});thread.setDaemon(false); // 必须将重启线程设置为user线程,防止close方法触发jvm关闭所有线程,导致重启失败(当唯一运行的线程都是守护进程线程时,Java虚拟机将退出)thread.start();}
}
方式二:利用执行器的重启端点RestartEndpoint.restart()进行重启
实现:
pom.xml
<!--重启-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId><version>2.2.2.RELEASE</version>
</dependency>
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter</artifactId><version>2.2.2.RELEASE</version>
</dependency>
application.yml
# 重启
management:endpoint:restart:enabled: true # 启用内置重启端点
java实现
@Resource
RestartEndpoint restartEndpoint;
/*** 调用该方法即可完成应用重启*/
public void restartApplication() {restartEndpoint.restart();
}