如果我将Web应用程序部署到Tomcat,并且具有以下代码:
Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup("jdbc/myDB");
如何指定此DataSource
为PoolingDataSource
?如何配置池(GenericObjectPool
)以将PoolingDataSource
注入?
或者,这是Tomcat的JNDI实现的默认行为吗?提前谢谢!
答案 0 :(得分:0)
只需配置连接池设置(maxActive,maxWait,maxIdle,...)。 Tomcat附带了apache commons-dbcp库。它被重新打包为$ CATALINA_HOME / lib / tomcat-dbcp.jar。
详细了解tomcat doc:http://tomcat.apache.org/tomcat-6.0-doc/jndi-datasource-examples-howto.html#Database_Connection_Pool_%28DBCP%29_Configurations
<Context>
<Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
username="javauser" password="javadude" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/javatest"/>
</Context>
答案 1 :(得分:0)
JDBC连接池
org.apache.tomcat.jdbc.pool
是commons-dbcp的替代或替代 连接池。
添加到server.xml
部分中的GlobalNamingResources
文件,类似下一部分:
<Resource name="jdbc/TestDB"
auth="Container"
type="javax.sql.DataSource"
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
testWhileIdle="true"
testOnBorrow="true"
testOnReturn="false"
validationQuery="SELECT 1"
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="root"
password="password"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/mysql"/>
将JDBC驱动程序JAR添加到Tomcat lib目录中。
添加context.xml
:
<ResourceLink global="jdbc/TestDB" name="jdbc/TestDB"
type="javax.sql.DataSource"/>
在The Tomcat JDBC Connection Pool中查看更多内容。