当前位置: 首页 > 面试题库 >

JDBC / Connectorj:了解连接池

赫连瀚
2023-03-14
问题内容

我想我需要更好地了解连接池的概念。我正在使用Java与ConnectorJ一起工作,并将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应用程序的不同用户具有不同的权限,则可以通过使用该应用程序本身的登录系统来进行设置,但是用于该应用程序的用户名和密码与用于登录的用户名和密码不同到数据库。



 类似资料:
  • 我们有一个spring-boot应用程序,它使用嵌入式tomcat进行部署,并使用MySQL后端的默认tomcat-jdbc连接池,而没有为MySQL或tomcat端定制。 该应用程序有一些调度程序,它们主要在一天中的特定时间运行,即在昨天的最后一次cron运行和今天的第一次cron运行之间,有超过9个小时的间隙。然而,无论何时cron在早期运行,它都从未遇到过空闲连接问题。 现在我们看到一条错误

  • 主要内容:JSF + MySQL JDBC实例我们可以将JSF应用程序集成到jdbc。 JDBC可将数据存储到数据库表中。在本教程中,我们创建一个应用程序并创建jdbc连接来存储用户输入的数据。 JSF + MySQL JDBC实例 打开 NetBeans IDE,创建一个名称为:JdbcConnectivity 的 Web 工程,其目录结构如下所示 - 提示: 需要加入 Jar包。 此应用程序包含用户输入表单,委托bean和响应页面,如以下

  • 通常你希望 org.hibernate.SessionFactory 来为你创建和缓存(pool)JDBC 连接。如果你采用这种方式,只需要如下例所示那样,打开一个 org.hibernate.Session: Session session = sessions.openSession(); // open a new Session 一旦你需要进行数据访问时,就会从连接池(connection

  • 我正在尝试使用Spark JdbcUtils中的可保存方法 https://github.com/apache/spark/blob/master/sql/core/src/main/scala/org/apache/spark/sql/execution/datasources/jdbc/JdbcUtils.scala 该方法的定义如下。它接受JDBCO作为参数之一。 以下是 JDBC 选项的类

  • 问题内容: 我正在Eclipse Juno中开发JavaEEWeb应用程序。我已将Tomcat配置为与PostgreSQL数据库一起使用JDBC连接池(org.apache.tomcat.jdbc.pool)。这是我的项目的META-INF / context.xml中的配置: 我的应用程序是使用Eclipse部署到Tomcat的,并且在Tomcat的context.xml中,可重载属性设置为“

  • 我有一个broker.xml文件,它有以下代码 接受者说,嘿,你可以在端口61617上与我连接,我正在听它(这对我来说是有意义的),但是连接器在这个broker.xml中的角色是什么。Connector的目标端口与acceptor相同(TCP://0.0.0.0:61616),我想了解一下Connector中提到的端口是什么意思,能不能解释一下。