Java servlet (tomcat) 跟踪到多个数据库的多个 jdbc 连接

Posted

技术标签:

【中文标题】Java servlet (tomcat) 跟踪到多个数据库的多个 jdbc 连接【英文标题】:Java servlet (tomcat) track multiple jdbc connections to multiple databases 【发布时间】:2013-06-12 19:12:51 【问题描述】:

我正在使用 Tomcat 7 构建一个 Web 应用程序,它可以让团队成员直接访问任意数量的数据库(可以是任何类型的数据库。mysql、Oracle 等)。

可能的数据库数量可能有几十个,它们的连接详细信息存储在应用程序自己的数据库中。

我正在寻找一种处理连接和连接池的方法。我无法决定如何处理连接的打开和关闭。我知道我不想为每个请求或每个会话打开一个连接。我曾想过创建一个全局哈希映射来存储当前打开的连接池,并创建一个用于过期未使用的连接池的进程。

有什么东西可以做到这一点吗?我不禁觉得我在重新发明***。 Tomcat 的连接池一次只能处理一个数据库对吧?

【问题讨论】:

每个数据库都需要一个DataSource。对于连接池,您可以使用 BoneCP 或 C3P0 等。 【参考方案1】:

您可以在 servlet 中实例化 Tomcat 的连接池。

应该是这样的:

public class YourServlet extends HttpServlet 

  private DataSource ds;

  public void init(ServletConfig config) throws ServletException 
    org.apache.tomcat.jdbc.pool.PoolProperties prop;
    prop = new org.apache.tomcat.jdbc.pool.PoolProperties();
    prop.setUrl("jdbc:mysql://localhost:3306/foo");
    prop.setDriverClassName("com.mysql.jdbc.Driver");
    prop.setUsername("user");
    prop.setPassword("password");

    org.apache.tomcat.jdbc.pool.DataSource dataSource;
    dataSource = new org.apache.tomcat.jdbc.pool.DataSource();
    dataSource.setPoolProperties(prop);

    ds = dataSource;
  

  protected void doGet(HttpServletRequest request,
    HttpServletResponse response) throws ServletException 
    Connection conn = ds.getConnection();
    ...
  

详情请参考以下文档:

http://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html#Plain_Ol'_Java

【讨论】:

以上是关于Java servlet (tomcat) 跟踪到多个数据库的多个 jdbc 连接的主要内容,如果未能解决你的问题,请参考以下文章

Java+Tomcat+Servlet实现页面访问

java 一个tomcat上可以装几个网站?几个war?几个servlet?

HTTP 状态 500 – 内部服务器错误(Java、Eclipse、Servlet、Tomcat)

Servlet与Tomcat运行示例

[Java]Servlet工作原理之一:Servlet的容器

无法将图像文件从 Android 应用程序发布到托管在 Tomcat 上的 Java servlet