我正在使用maven-jetty-plugin
在开发模式下运行Web应用程序。另外,我在jetty-env.xml
:
<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">
<Configure id="wac" class="org.mortbay.jetty.webapp.WebAppContext">
<New id="dataSource" class="org.mortbay.jetty.plus.naming.Resource">
<Arg>
<Ref id="wac" />
</Arg>
<Arg>jdbc/MyVeryOwnDB</Arg>
<Arg>
<New class="com.mchange.v2.c3p0.ComboPooledDataSource">
<Set name="driverClass">oracle.jdbc.driver.OracleDriver</Set>
<Set name="jdbcUrl">jdbc:oracle:thin:@X:Y:Z</Set>
<Set name="user">U</Set>
<Set name="password">P</Set>
</New>
</Arg>
</New>
</Configure>
虽然这很好用,但我注意到连接池没有关闭webapp重新部署 - c3p0线程仍处于活动状态,这意味着我同时获得了PermGen和JDBC连接泄漏。
我没有找到在jetty-env.xml中销毁已定义资源的引用,而且我也不愿意使用仅限开发的钩子,因为生产设置不同。
如何确保在开发时重新部署应用程序时没有因连接池未关闭而导致泄漏?
答案 0 :(得分:0)
答案是使用jetty-env.xml
删除maven-jetty-plugin
和configure an additional jettyConfig
parameter的引用。
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN"
<Configure id="Server" class="org.mortbay.jetty.Server">
<New id="dataSource" class="org.mortbay.jetty.plus.naming.Resource">
<Arg></Arg> <!-- Global scope -->
<!-- Other values elided for brevity -->
</New>
</Configure>