【发布时间】:2011-09-23 22:25:13
【问题描述】:
我想我需要更好地理解连接池的概念。我正在使用 ConnectorJ 在 Java 中工作,并将我的 servlet 部署在 Apache Tomcat 服务器上。我一直在关注文档,所以我的 Tomcat context.xml 看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<Context antiJARLocking="true" path="">
<Resource auth="Container" driverClassName="com.mysql.jdbc.Driver"
maxActive="-1" maxIdle="30"
maxWait="10000" minEvictableIdleTimeMillis="1200000" name="jdbc/MySQLDB"
removeAbandoned="true" removeAbandonedTimeout="1200" timeBetweenEvictionRunsMillis="60000"
type="javax.sql.DataSource" url="jdbc:mysql://my_host"
username="my_username" password="my_password"
factory="org.apache.commons.dbcp.BasicDataSourceFactory" />
</Context>
我使用推荐的方式从数据源获得连接:
InitialContext ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/MySQLDB");
Connection conn = null;
try {
conn = ds.getConnection();
// Do query etc.
// Close connection, statement and result set if applicable
}
catch (SQLException){
// Handle exception here
}
我的问题是:为什么我必须在 context.xml 中为我的数据源指定用户和密码。如果我错了,请纠正我,但我认为连接池的目的是重用拥有相同连接字符串的连接?
我希望能够处理多个不同的登录(假设 servlet 接收要通过 HTTP 使用的 DB 凭据),但是如果我必须为每个可能的连接定义不同的数据源,这不违背连接池的点?
【问题讨论】: