我想我需要更好地理解连接池的概念。我正在使用 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 使用的数据库凭据),但是如果我必须为每个可能的连接定义不同的数据源,这是否违背了连接池?
当您直接打开与数据库的连接时,通过使用DriverManager.getConnection
,您在该调用中提供用于登录数据库的用户名和密码。
当您使用连接池时,您并不是直接自己打开连接;而是直接打开连接。相反,池会为您打开并管理连接。当然,在这种情况下,池需要知道用户名和密码才能登录数据库。
通常,在 Java Web 应用程序中,您不会为应用程序的每个用户使用不同的数据库登录凭据。对于任何使用 Web 应用程序的人来说,您只需拥有该应用程序使用的一个用户名和密码。如果 Web 应用程序的不同用户具有不同的权限,您可以通过应用程序本身的登录系统进行设置,但您用于应用程序的用户名和密码与用于登录的用户名和密码不同到数据库。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)