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

Java和Tomcat 7的基本数据库连接池

常英毅
2023-03-14
问题内容

我正在尝试创建我的第一个连接池。我正在使用Tomcat 7和MySQL DB创建Java
Web应用程序,并且我想创建尽可能简单的连接池。我看了几本教程,但对我来说还不是很清楚,所以我想请您确认我是否做得很好。

我已经编写了以下类作为连接池管理器:

package dao.mysql;

import java.sql.Connection;
import java.sql.SQLException;
import org.apache.tomcat.jdbc.pool.DataSource;
import org.apache.tomcat.jdbc.pool.PoolProperties;

public class MySQLConnectionPool {

    private static DataSource datasource;
    private static String driver = "com.mysql.jdbc.Driver";
    private static String url = "jdbc:mysql://localhost:3306/mydb";
    private static String username = "user";
    private static String password = "password";

    public MySQLConnectionPool() {
        datasource = new DataSource(configurePoolProperties(driver, url, username, password));
    }

    private PoolProperties configurePoolProperties(String driver, String url, String username, String password) {
        PoolProperties properties = new PoolProperties();
        properties.setDriverClassName(driver);
        properties.setUrl(url);
        properties.setUsername(username);
        properties.setPassword(password);
        return properties;
    }

    public static synchronized Connection getConnection() {
        Connection connection = null;
        try {
            connection = datasource.getConnection();
        } catch (SQLException ex) {
            System.out.println("Error while getting a connection from the pool! \nSQL state:" + ex.getSQLState() + "\nMESSAGE" + ex.getMessage());
        }
        return connection;
    }
}

我不知道 静态 属性或 同步的

而且我不确定池的“客户端”类。我了解他们只需使用

Connection con = MySQLConnectionPool.getConnection();

最后使用

con.close();

就是这样吗?而且,有没有更简单或更完善的方法来做到这一点?

非常感谢!


问题答案:

这是错误的方法。

Tomcat已经有一个连接池,您可以通过目录context.xml中的进行配置和设置,而无需任何代码conf

在这里定义它之后,您要做的就是在代码中查找JNDI DataSource。对所有内容进行硬编码(并重新发明轮子)是一个非常糟糕的主意。

要了解如何配置JNDI数据源,请查看手册:http : //tomcat.apache.org/tomcat-7.0-doc/jndi-
datasource-examples-howto.html

Tomcat手册中还有一个有关如何从池中获取连接的示例:

InitialContext cxt = new InitialContext();
DataSource ds = (DataSource) cxt.lookup( "java:/comp/env/jdbc/dsname" );

dsname您在其中提供的名称在哪里context.xml



 类似资料:
  • 本文向大家介绍java连接mysql数据库 java连接sql server数据库,包括了java连接mysql数据库 java连接sql server数据库的使用技巧和注意事项,需要的朋友参考一下 在java的应用中,我们经常会对数据库进行必要的操作,下来我们就了解一下如何用java连接mysql数据库 以及java连接sql server数据库 一、mysql 二、sql server 以上就

  • 问题内容: 对于J2EE容器 之外 的Java应用程序,哪个连接池库是最好的? 我听说c3p0已经过时了。 雅加达的公共池库已不再开发 因此,我只剩下BoneCP和DBPool了。从我可以看出,两者活动有限。我可以看到的主要区别是性能,BoneCP似乎可以与之抗衡。但是,文档非常薄弱。 您在现实世界中使用了哪个数据库池库,为什么?好的和坏的是什么? 问题答案: 在工作中,我们使用了BoneCP(作

  • 我从几周前开始学习使用java,我想在简单的java控制台应用程序中使用Hibernate。我下载了Hibernate ORM的最新版本(4.3.8) 我将这个JAR添加到我的类路径中: com.mysql.jdbc_5.1.5.jar sqlite-jdbc-3.8.7.jar Hibernate库\antlr-2.7.7.jar Hibernate库\dom4j-1.6.1.jar Hiber

  • 本文向大家介绍php基础之连接mysql数据库和查询数据,包括了php基础之连接mysql数据库和查询数据的使用技巧和注意事项,需要的朋友参考一下 连接数据库,有三种方法 1. 常规方式: //mysql_fetch_row   提取的结果是没有查询中的字段名了(也就是没有键id,GoodsName,只有值),如下图: //mysql_fetch_assoc 提取的结果有键值,如下图: //mys

  • 我在应用程序中使用连接池(snaq.db.ConnectionPool)。连接池的初始化方式如下: 使用的DB池值是: 我的应用程序在某处泄漏连接(连接未被释放),因此连接池已耗尽。我现在已经修好了密码。 空闲超时后连接不应该关闭吗?如果这不是正确的假设,有没有办法关闭打开的空闲连接(仅通过java代码)?

  • 连接数据库 在能够对MongDB进行操作之前,需要使用BuguFramework创建一个数据库连接,代码如下: BuguConnection conn = BuguFramework.getInstance().createConnection(); conn.connect("192.168.0.100", 27017, "mydb", "username", "password"); 也可以