Runtime.getRuntime().addShutdownHook(Thread hook)的使用

来源:互联网 发布:安锐特监控软件下载 编辑:程序博客网 时间:2024/06/05 18:31


需求:最近做了个后台运行的jar包应用,没有采用web容器,采用java -jar xxxxx的方式运行。数据库连接池采用c3p0,关闭应用后

发现数据库会话依然存在。

解决方案:采用Runtime.getRuntime().addShutdownHook(Thread hook)在应用关闭前关闭数据库连接,该方法适用于采用

System.exit(int)退出应用的方式。 因为jar包采用的是main方法启动(main方法是应用的入口和出口),因此直接将

Runtime.getRuntime().addShutdownHook(Thread hook)放在了main方法中。(Runtime 就是java.lang.Runtime).

因为我采用Guice管理数据源,所以下面通过Injector获取应用的DataSource。


代码:

import javax.sql.DataSource;import com.google.inject.Injector;import com.mchange.v2.c3p0.ComboPooledDataSource;public class ShutdownHookTest {private static Injector injector;static {// TODO initiate injectorSystem.out.println("injector has been initiated.");}public static void main(String[] args) {Runtime.getRuntime().addShutdownHook(new Thread(){@Overridepublic void run() {DataSource ds = injector.getInstance(DataSource.class);((ComboPooledDataSource) ds).close();System.out.println("Successfully closed the dataSource.");}});}}



0 0
原创粉丝点击