与Java和Tomcat 7的基本数据库连接池(Basic DB connection pool w

2019-07-04 20:25发布

我试图创建我的第一个连接池。 我创建和Tomcat 7和MySQL数据库一个Java Web aplication,我想创建一个最简单的连接池可能。 我已经看到了几个教程,但它不是我真的不清楚,所以我想请你确认,如果我做得很好。

我已经写了下面的类为连接池管理器:

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();

这就是它? 而且,有没有更简单的或更好的方式来做到这一点?

非常感谢!

Answer 1:

这是错误的方式来做到这一点。

Tomcat的已经有一个连接池,你可以通过无需任何代码,配置和设置context.xmlconf目录下。

一旦它被定义在那里,所有你需要做的是查找的JNDI数据源在你的代码。 硬编码所有的(和重新发明轮子)是一个非常糟糕的主意。

要了解如何配置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



Answer 2:

退房的JNDI数据源HOW-TO和Tomcat的JDBC连接池 Tomcat文档。 让Tomcat的做到这一点是特别理想,因为它避免了类加载器泄漏。



文章来源: Basic DB connection pool with Java and Tomcat 7