Подтвердить что ты не робот

Базовый пул соединений с Java и Tomcat 7

Я пытаюсь создать свой первый пул соединений. Я создаю веб-приложение Java с Tomcat 7 и MySQL DB, и я бы хотел создать простейший пул соединений. Я взглянул на несколько учебников, но это не совсем понятно для меня, поэтому я хотел бы, чтобы вы подтвердили, что у меня все хорошо.

Я написал следующий класс в качестве менеджера пула соединений:

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;
    }
}

Я не уверен в свойствах static и синхронизированном.

И я не уверен в "клиентских" классах пула. Я понимаю, что им нужно только получить соединение, используя

Connection con = MySQLConnectionPool.getConnection();

и, наконец, закрыть это соединение, используя

con.close();

И что это? А также есть ли более простой или лучший способ сделать это?

Большое спасибо!

4b9b3361

Ответ 1

Это неправильный способ сделать это.

Tomcat уже имеет пул соединений, и вы можете настроить и настроить без кода через context.xml в каталоге conf.

После определения там все, что вам нужно сделать, это найти JNDI DataSource в вашем коде. Hardcoding все это (и повторное изобретательство колеса) - очень плохая идея.

Чтобы узнать, как настроить JNDI DataSource, ознакомьтесь с руководством: 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

Ответ 2

Просмотрите JNDI Datasource HOW-TO и Tomcat JDBC Connection Пул Документация Tomcat. Предоставление Tomcat делает это предпочтительнее, особенно потому, что оно позволяет избежать утечек загрузчика класса.