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


问题内容

我正在尝试创建我的第一个连接池。我正在使用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