如何優(yōu)雅的停止SpringBoot服務(wù)?
點(diǎn)擊上方藍(lán)色字體,選擇“標(biāo)星公眾號”
優(yōu)質(zhì)文章,第一時(shí)間送達(dá)
66套java從入門到精通實(shí)戰(zhàn)課程分享
org.springframework.boot
spring-boot-starter-actuator
server.port=3333
management.endpoint.shutdown.enabled=true
management.endpoints.web.exposure.include=shutdown?package?com.hqs.springboot.shutdowndemo.bean;
import?javax.annotation.PreDestroy;
publicclassTerminateBean{
?
@PreDestroy
publicvoid?preDestroy()?{
System.out.println("TerminalBean?is?destroyed");
}
}package?com.hqs.springboot.shutdowndemo.config;
import?com.hqs.springboot.shutdowndemo.bean.TerminateBean;
import?org.springframework.context.annotation.Bean;
import?org.springframework.context.annotation.Configuration;
@Configuration
publicclassShutDownConfig{
@Bean
publicTerminateBean?getTerminateBean()?{
returnnewTerminateBean();
}
}curl?-X?POST?http://localhost:3333/actuator/shutdown/*?method?2:?use?ctx.close?to?shutdown?all?application?context?*/
ConfigurableApplicationContext?ctx?=?SpringApplication.run(ShutdowndemoApplication.class,?args);
try{
TimeUnit.SECONDS.sleep(10);
}?catch(InterruptedException?e)?{
e.printStackTrace();
}
ctx.close();/*?method?3?:?generate?a?pid?in?a?specified?path,?while?use?command?to?shutdown?pid?:
'cat?/Users/huangqingshi/app.pid?|?xargs?kill'?*/
SpringApplication?application?=?newSpringApplication(ShutdowndemoApplication.class);
application.addListeners(newApplicationPidFileWriter("/Users/huangqingshi/app.pid"));
application.run();/*?method?4:?exit?this?application?using?static?method?*/
ConfigurableApplicationContext?ctx?=?SpringApplication.run(ShutdowndemoApplication.class,?args);
exitApplication(ctx);publicstaticvoid?exitApplication(ConfigurableApplicationContext?context)?{
int?exitCode?=?SpringApplication.exit(context,?(ExitCodeGenerator)?()?->?0);
System.exit(exitCode);
}package?com.hqs.springboot.shutdowndemo.controller;
import?org.springframework.beans.BeansException;
import?org.springframework.context.ApplicationContext;
import?org.springframework.context.ApplicationContextAware;
import?org.springframework.context.ConfigurableApplicationContext;
import?org.springframework.web.bind.annotation.GetMapping;
import?org.springframework.web.bind.annotation.PostMapping;
import?org.springframework.web.bind.annotation.RestController;
@RestController
publicclassShutDownControllerimplementsApplicationContextAware{
privateApplicationContext?context;
@PostMapping("/shutDownContext")
publicString?shutDownContext()?{
ConfigurableApplicationContext?ctx?=?(ConfigurableApplicationContext)?context;
ctx.close();
return"context?is?shutdown";
}
@GetMapping("/")
publicString?getIndex()?{
return"OK";
}
@Override
publicvoid?setApplicationContext(ApplicationContext?applicationContext)?throwsBeansException{
context?=?applicationContext;
}
}總結(jié)一下:
原文鏈接:
https://www.cnblogs.com/huangqingshi/p/11370291.html
粉絲福利:實(shí)戰(zhàn)springboot+CAS單點(diǎn)登錄系統(tǒng)視頻教程免費(fèi)領(lǐng)取
???
?長按上方微信二維碼?2 秒 即可獲取資料
感謝點(diǎn)贊支持下哈?
評論
圖片
表情

