将来自客户端的请求封装为一个对象,从而让你可以使用不同的请求对客户端进行参数化。他可以实现 行为请求者 和 行为实现者 的解耦。
dependency scope作用域
Dependency scope通常被用于限制一个依赖的传递性,同时影响 the classpath used for various build tasks
dependencies与dependencyManagement的区别
dependencies与dependencyManagement的区别
JVM安全退出
使用关闭钩子的注意事项
- 关闭钩子本质上是一个线程(也称为Hook线程),对于一个JVM中注册的多个关闭钩子它们将会并发执行,所以JVM并不保证它们的执行顺序;由于是并发执行的,那么很可能因为代码不当导致出现竞态条件或死锁等问题,为了避免该问题,强烈建议在一个钩子中执行一系列操作。
- Hook线程会延迟JVM的关闭时间,这就要求在编写钩子过程中必须要尽可能的减少Hook线程的执行时间,避免hook线程中出现耗时的计算、等待用户I/O等等操作。
- 关闭钩子执行过程中可能被强制打断,比如在操作系统关机时,操作系统会等待进程停止,等待超时,进程仍未停止,操作系统会强制的杀死该进程,在这类情况下,关闭钩子在执行过程中被强制中止。
- 在关闭钩子中,不能执行注册、移除钩子的操作,JVM将关闭钩子序列初始化完毕后,不允许再次添加或者移除已经存在的钩子,否则JVM抛出 IllegalStateException。
- 不能在钩子调用System.exit(),否则卡住JVM的关闭过程,但是可以调用Runtime.halt()。
- Hook线程中同样会抛出异常,对于未捕捉的异常,线程的默认异常处理器处理该异常,不会影响其他hook线程以及JVM正常退出。
下一步
理清 @PreDestroy 、 hook 钩子
测试
编写 简单的spring boot demo如下:
1 | @Component |
当程序在运行中时,使用 kill命令:
- Thread.sleep() 程序会抛出一次中断异常
- finally 语句不会执行
- PreDestroy注解 一定会执行
参考
InterruptedException(译)
InterruptedException 是对于初级java开发者是一个非常棘手的Exception。本文尝试以通俗易懂的方式介绍这个Exception。
启动jar
java 启动脚本
logback配置
spring boot日志 : logback配置
mybatis-oracle-merge
merge into 能够以一次请求实现 类似于insertOrUpdate的操作。减少请求次数。
du
磁盘使用统计信息
建造者模式(转)
无论是在现实世界中还是在软件系统中,都存在一些复杂的对象,它们拥有多个组成部分,如汽车,它包括车轮、方向盘、发送机等各种部件。而对于大多数用户而言,无须知道这些部件的装配细节,也几乎不会使用单独某个部件,而是使用一辆完整的汽车,可以通过建造者模式对其进行设计与描述,建造者模式可以将部件和其组装过程分开,一步一步创建一个复杂的对象。用户只需要指定复杂对象的类型就可以得到该对象,而无须知道其内部的具体构造细节。