您的位置:首页 > 编程语言 > Java开发

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

2016-12-12 16:46 597 查看
需求:最近做了个后台运行的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 injector
System.out.println("injector has been initiated.");
}

public static void main(String[] args) {
Runtime.getRuntime().addShutdownHook(new Thread(){
@Override
public void run() {
DataSource ds = injector.getInstance(DataSource.class);
((ComboPooledDataSource) ds).close();
System.out.println("Successfully closed the dataSource.");
}
});
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息