我正在尝试使用HikariCP为tomcat创建一个全局连接池,但是无论如何,Hikari都会为每个Web应用程序甚至在重新部署应用程序时创建一个新的Pool。此外,这会导致许多未关闭的连接池。
这是我在Tomcat上的配置:
tomcat / conf / server.xml
<GlobalNamingResources>
<Resource name="jdbc/Pool" global="jdbc/Pool" auth="Container"
factory="com.zaxxer.hikari.HikariJNDIFactory"
type="javax.sql.DataSource"
singleton="true"
minimumIdle="5"
maximumPoolSize="30"
connectionTimeout="300000"
dataSourceClassName="oracle.jdbc.pool.OracleDataSource"
dataSource.implicitCachingEnabled="true"
dataSource.user="user"
dataSource.password="pw"
dataSource.url="url" />
</GlobalNamingResources>
tomcat / conf / context.xml
<ResourceLink name="jdbc/Pool"
global="jdbc/Pool"
auth="Container"
type="javax.sql.DataSource" />
在我的Java代码中,我得到的数据源是这样的:
HikariConfig config = new HikariConfig();
Context initContext = new InitialContext();
DataSource dataSource = (DataSource)
initContext.lookup("java:comp/env/jdbc/Pool");
config.setDataSource(dataSource);
config.setRegisterMbeans(true);
HikariDataSource ds = new HikariDataSource(config);
我实际上没有收到任何错误或信息,但是在jconsole里面,我可以看到Hikari正在为每个Web应用程序创建连接池。
任何人都知道,这里可能出什么问题了?
谢谢!
答案 0 :(得分:0)
您需要在工厂定义中定义singleton=true
如果您想在所有WAR中共享一个池,从阅读Tomcat文档开始,您需要的是singleton =“ true”属性。
factory="com.zaxxer.hikari.HikariJNDIFactory"
singleton="true"