启动时设置tomcat初始连接池

时间:2013-03-06 10:29:43

标签: java tomcat connection

我正在寻找有关如何在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时我想要这个功能。

2 个答案:

答案 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&amp;useSSL=false&amp;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相匹配,希望这会有所帮助。