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。
代码:
发现数据库会话依然存在。
解决方案:采用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."); } }); } }
相关文章推荐
- Runtime.getRuntime().addShutdownHook(new Thread()
- Runtime.getRuntime().addShutdownHook(new Thread()
- Runtime.getRuntime().addShutdownHook()的使用
- Runtime.getRuntime().addShutdownHook()的使用
- Runtime.getRuntime().addShutdownHook(Thread)
- Runtime.getRuntime().addShutdownHook(new Thread())
- Runtime.getRuntime().addShutdownHook(thread)的作用
- Runtime.getRuntime().addShutdownHook(Thread)
- Runtime.getRuntime().addShutdownHook(Thread)
- Runtime.getRuntime().addShutdownHook()的使用
- 如何使用Runtime.addShutdownHook(Thread)
- runtime.getruntime().addshutdownhook
- Runtime.addShutdownHook()使用
- Runtime.getRuntime().addShutdownHook
- Java中Runtime.getRuntime().addShutdownHook()方法
- Runtime.getRuntime().addShutdownHook(shutdownHook);
- Runtime.getRuntime().addShutdownHook(shutdownHook);
- Runtime.getRuntime().addShutdownHook
- Runtime.getRuntime().addShutdownHook()方法的用法
- Runtime.getRuntime().addShutdownHook()