我正在寻找有关如何在tomcat启动时启用连接池的信息。我的设置权限使得tomcat初始化并在第一次请求时向池中添加X个连接,但我希望tomcat在启动tomcat时执行此操作。
我在Server.xml中的设置如下:
<Context docBase=".../apache-tomcat-5.5.27/webapps/app" path="/app" reloadable="true"
source="org.eclipse.jst.j2ee.server:app">
<Resource auth="Container" driverClassName="com.mysql.jdbc.Driver" maxActive="100"
maxIdle="30" initialSize="10"
maxWait="10000" name="jdbc/app" password="pass" type="javax.sql.DataSource"
url="jdbc:mysql://ip:3306/dbschema" username="username"/>
正如我前面提到的,将initialSize设置为10会在创建第一个连接时创建10个连接,但是在启动tomcat时我想要这个功能。
答案 0 :(得分:0)
解决了这个问题,如果有人需要,我会回答我自己的问题。
通过创建一个servlet来解决这个问题,重写init()方法并通过修改tomcat中的web.xml在启动时加载该servlet。只要在servlet.xml中设置了initialSize
,这就可以工作。
所以,实际发生的事情是tomcat在启动时加载这个servlet,而这个servlet所做的就是创建一个数据库连接。创建此连接后,tomcat将启动initialSize
中指定的连接数答案 1 :(得分:0)
我知道这很老了,但希望可以帮助某人...
在$CATALINA_HOME/conf/server.xml
中像这样在<Resource>
元素中声明一个<GlobalNamingResources>
元素
<GlobalNamingResources>
<!-- factory attribute specifies the tomcat jdbc pool connection, instead of apache commons-dbcp -->
<Resource name="jdbc/youDecideThisName" auth="Container"
type="javax.sql.DataSource"
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
testWhileIdle="true"
testOnBorrow="true"
testOnReturn="false"
validationQuery="/* ping */"
validationInterval="30000"
timeBetweenEvictionRunsMillis="30000"
maxActive="100" minIdle="10"
maxWait="10000" initialSize="10"
removeAbandonedTimeout="60"
removeAbandoned="true"
logAbandoned="true"
minEvictableIdleTimeMillis="30000" jmxEnabled="true"
jdbcInterceptors="org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;
org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer"
username="yourUsername" password="yourPassword"
driverClassName="com.mysql.cj.jdbc.Driver"
url="jdbc:mysql://localhost:3306/yourDB?allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=UTC" />
</GlobalNamingResources>
这假设您正在使用MySQL。有关更多信息,请查看
为了让Tomcat在部署Web应用程序时创建连接,请在您的appname/src/main/webapp/WEB-INF/web.xml
中放置以下代码,这假定您正在使用Maven。
<resource-ref>
<res-ref-name>jdbc/youDecideThisName</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
注意:<Resource>
中server.xml
元素的名称属性必须与<res-ref-name>
中的web.xml
相匹配,希望这会有所帮助。