C3P0 один сервер несколько баз данных

Miguel Pérez Martínez спросил: 27 ноября 2017 в 06:29 в: java

Доброе утро,

Как видно из заголовка, я хочу создать решение для использования пулов соединений для подключения к различным базам данных на одном и том же сервере Mysql. Я выполнил действия, указанные в следующем сообщении:

https://stackoverflow.com/questions/26785842/multiple-data-sources-for-c3p0

Мое решение заключается в следующем :

public class DatabaseUtility
{
        public static ComboPooledDataSource getDataSource(String db, String user, String pass) throws PropertyVetoException
        {
                ComboPooledDataSource cpds = new ComboPooledDataSource();
                cpds.setJdbcUrl("jdbc:mysql://X.X.X.X:3306/"+db);
                cpds.setUser(user);
                cpds.setPassword(pass);                // Optional Settings
                cpds.setInitialPoolSize(5);
                cpds.setMinPoolSize(5);
                cpds.setAcquireIncrement(5);
                cpds.setMaxPoolSize(20);
                cpds.setMaxStatements(100);                return cpds;
        }        public static void main(String[] args) throws SQLException
        {
                Connection connection = null;
                PreparedStatement pstmt = null;
                ResultSet resultSet = null;
                try
                {
                        //QUERY to DATABASE 1
                        ComboPooledDataSource dataSource = DatabaseUtility.getDataSource("bd1", "user1", "pass1");
                        connection = dataSource.getConnection();
                        pstmt = connection.prepareStatement("SELECT * FROM municipio");                        System.out.println("The Connection Object is of Class: " + connection.getClass());                        resultSet = pstmt.executeQuery();
                        while (resultSet.next())
                        {
                                System.out.println(resultSet.getString(1) + "," + resultSet.getString(2) + "," + resultSet.getString(3));
                        }                        //QUERY to DATABASE 2
                        dataSource = DatabaseUtility.getDataSource("bd2", "user2", "pass2");
                        connection = dataSource.getConnection();
                        pstmt = connection.prepareStatement("SELECT * FROM alojamiento");                        System.out.println("The Connection Object is of Class: " + connection.getClass());                        resultSet = pstmt.executeQuery();
                        while (resultSet.next())
                        {
                                System.out.println(resultSet.getString(1) + "," + resultSet.getString(2) + "," + resultSet.getString(3));
                        }                }
                catch (Exception e)
                {
                        connection.rollback();
                        e.printStackTrace();
                }
        }
}

Каждый раз, когда я подключаюсь к базе данных, я вызываю конструктор с определенной строкой соединения.

Однако я сомневаюсь, что это эффективно решение, или я делаю что-то не так ...

PS Я использую проект без Spring.

Буду признателен за ваш совет, заранее спасибо,

Привет.

0 ответов