当前位置: 首页 > wzjs >正文

清河做网站哪家便宜网站建设实训教程

清河做网站哪家便宜,网站建设实训教程,wordpress树结构,景区网站建设的目标定位写这篇文章是因为看到 “线程池在使用结束后应该正确关闭.” 那么如果我们的 Spring 应用都无法正确关闭, 那么线程池肯定也无从保障 1. 优雅关闭 kill with pid, without -9 大多数情况下无须在意这个问题, 正确使用 kill 命令关闭就行 (注意不能使用 kill -9) kill $(cat …

写这篇文章是因为看到 “线程池在使用结束后应该正确关闭.” 那么如果我们的 Spring 应用都无法正确关闭, 那么线程池肯定也无从保障

1. 优雅关闭

  • kill with pid, without -9

大多数情况下无须在意这个问题, 正确使用 kill 命令关闭就行 (注意不能使用 kill -9)

kill $(cat ./application.pid)

默认发送的信号是 SIGTERM,其信号编号为 15. 在无法正常终止进程时使用 -9 (SIGKILL): 强制立即终止进程。这个信号无法被捕获或忽略,进程会被操作系统强制杀死

  • 在启动的时候, 将 pid 和 端口号 记录到文件中 (这些文件在程序关闭后会自动删除)
public static void main(String[] args) {try {long start = System.currentTimeMillis();SpringApplicationBuilder builder = new SpringApplicationBuilder(App.class);builder.beanNameGenerator(FullyQualifiedAnnotationBeanNameGenerator.INSTANCE);// startup with pid file and port filebuilder.listeners(new ApplicationPidFileWriter()); // pid file// 上面的类可以传入文件路径, 方便使用 kill 命令// builder.listeners(new ApplicationPidFileWriter("./bin/shutdown.pid")); // kill $(cat ./bin/shutdown.pid)builder.listeners(new WebServerPortFileWriter()); // port filebuilder.run(args);long costs = (System.currentTimeMillis() - start) / 1000;log.info("### APP STARTED ### It take {} seconds.", costs);} catch (Exception e) { log.error(" STARTUP FAILED ", e); }
}

2. 增加 URL 接口来关闭程序

  1. 使用 ConfigurableApplicationContext#close
  2. 使用 int exit = SpringApplication.exit(context);
  3. 关闭应用时执行某段逻辑
    1. 注解 @PreDestroy
    2. 事件 ContextClosedEvent
@Slf4j
@RestController
public class ShutDownController {@Autowiredprivate ConfigurableApplicationContext applicationContext;@Autowiredprivate ApplicationContext context; // 两个 context 都行@GetMapping("/shutdown")public String shutdown() {log.error("1. shutdown begin..."); // 前面的编号是执行顺序// 清理资源并关闭((ConfigurableApplicationContext) context).close();// applicationContext.close();log.error("3. spring application closed.");// 在嵌入式应用或在某些情况下,关闭上下文后,JVM 可能不会自动退出。为了确保应用完全终止,使用 System.exit(0)System.exit(0); // not necessary// log.error("system closed."); // 这里日志对象 log 已经失效, 无法打印, 换用 printlnSystem.err.println("system closed.");return "shutdown";}@GetMapping("/exit")public String exit() {log.error("1. shutdown begin...");// 负责清理资源int exit = SpringApplication.exit(context);log.error("3. Spring app closed.");System.exit(exit); // not necessary// log.error("system closed."); // It will fail overSystem.err.println("system closed.");return "shutdown";}@PreDestroy // @PreDestroy 注解: 在 Spring 应用销毁前, 执行某段逻辑public void onDestroy() throws Exception {log.error("3. Spring Container is destroyed!");}@Slf4j@Component // ContextClosedEvent 事件: 在 Spring 上下文关闭时机, 执行某段逻辑public static class ApplicationShutdown implements ApplicationListener<ContextClosedEvent> {@Overridepublic void onApplicationEvent(ContextClosedEvent event) {log.error("2. graceful shutdown (ContextClosedEvent)");}}
}

3. 优雅启动

  1. 显示配置参数
    /*** 显示配置参数*/public static void printEnvironment(Environment environment) {try {log.info("******************JVM参数**********************");String[] properties = {"java.home", "java.version", "java.vm.name", "java.vm.vendor", "os.name", "user.dir"};for (String property : properties) {log.info("* {} = {}", property, System.getProperty(property));}MemoryMXBean bean = ManagementFactory.getMemoryMXBean();MemoryUsage heapUsage = bean.getHeapMemoryUsage();log.info("* 初始内存 = " + heapUsage.getInit() / 1024 / 1024 + "M");log.info("* 已使用内存 = " + heapUsage.getUsed() / 1024 / 1024 + "M");log.info("* 已提交内存 = " + heapUsage.getCommitted() / 1024 / 1024 + "M");log.info("* 最大内存 = " + heapUsage.getMax() / 1024 / 1024 + "M");} catch (Exception e) {log.error("异常: {}", e.getMessage());}}
  1. 启动时调用: printEnvironment(builder.context().getEnvironment());

4. 线程池的关闭

  1. 由 Spring 管理的线程池, 关闭 Spring 应用上下文时会自动关闭, 包括 @Async 或 通过 Spring 配置的线程池

  2. 自定义线程池 (未通过 Spring 管理), 在关闭应用时, 需要显式地调用 shutdown() 来确保任务能够正常完成, 避免丢失. 可以利用上面提到的, 关闭应用时执行某段逻辑的方式执行

    1. 注解 @PreDestroy
    2. 事件 ContextClosedEvent

(END)

http://www.dtcms.com/wzjs/590879.html

相关文章:

  • 竭诚网络网站建设wordpress 中文 插件
  • 绍兴柯桥区城乡建设局网站网线水晶头制作过程
  • 西安建公司网站如何拿qq空间做网站
  • 做网站十大公司哪家好百度地图导航下载安装
  • 保护动物网站建设策划书北京天津网站建设公司
  • 怎么做网站怎么引入广告挣钱wordpress无法修改主题
  • 做网站必须要有的素材鞋子网站建设策划书
  • 拍卖行 网站建设昆明自动seo
  • 凡科快图网站湖北网络营销网站
  • 做游戏网站要备案吗app软件下载站seo教程
  • 中国高清adidas网站网站管理工作是具体应该怎么做
  • 中山公司做网站大型网站建设济南兴田德润o团队怎么样
  • 唐山市住房与城乡建设厅网站wordpress动图打开很慢
  • 企业网站pc优化网站建设 技术可行性
  • 郑州做的比较好网站公司吗开发网站如何选需要注意什么
  • 外国的贸易网站天元建设集团有限公司是国企还是央企
  • 网站界面设计欣赏wordpress 抓取
  • 宁波网站建设方案报价网站建设目标怎么看
  • 怎么用word做网站大数据营销的特点有哪些
  • 爱站工具维护wordpress编辑器主题
  • 个人怎样建立网站网络舆情监测是什么工作
  • wordpress易企秀如何申请网站优化工作
  • 海港区网站快排seo温州建设银行官方网站
  • 智慧团建网站注册登录入口网站建设的视频教程
  • 阜阳网站建设推广wordpress 去版权
  • 如皋建设医院网站商城网站都有哪 些功能
  • 河南城乡建设部网站首页百度竞价效果怎么样
  • 做网站公司怎么赚钱购物网站的做
  • 定期做图书推荐的网站小礼品网络定制
  • 记事本做网站如何添加图片微信最好用的营销软件