Конфигурация пула соединений JDBC

代码: импорт java.io.FileInputStream; импорт java.io.FileNotFoundException;

импорт java.io.IOException;
импорт java.io.InputStream;
импорт java.io.PrintWriter;
импорт java.lang.reflect.InvocationHandler;
импорт java.lang.reflect.Method;
импорт java.lang.reflect.Proxy;
импорт java.sql.Connection;
импорт java.sql.DriverManager;
импорт java.sql.SQLException;
импорт java.sql.SQLFeatureNotSupportedException;
импорт java.util.LinkedList;
импорт java.util.Properties; 

импорт org.slf4j.Logger; 

общественный  класс ConnPool {
     //Использование сохраненного набора соединений с базой данных LinkedList 
    Частный  статический LinkedList <Соединение> = ConnPool новый новый LinkedList <Connection> (); 

    // загрузка файла конфигурации статический блок кода 
    статический { 
     // если баночка пакет работает сообщенные здесь будет найти это ненормальное файл, решение заключается в следующем. Путь Строка
= ConnPool. Класс .GetClassLoader () getResource ( "db.properties". ) .GetPath (); // решения должны закомментировать эту строку кода
     // InputStream в = PropertiesUtil.class.getClassLoader.getResourceAsStream ( «db.properties «); // открыть эту строку кода для решения вышеупомянутой проблемы
FileInputStream в; // программы структурной перестройки должны закомментировать эту строку кода , чтобы открыть больше , чем решить
попробовать { в = новый новый FileInputStream (путь);// открыть эти решения требуют закомментировать эту строку кода Свойства проп = новый новый Свойства (); prop.load (в); Строка Driver = prop.getProperty ( "Драйвер" ); Строка URL = prop.getProperty ( "URL" ); Пользователь Строка = prop.getProperty ( "User" ); Строка пароля = prop.getProperty ( "пароль" ); // инициализировать соединение с базой данных пула номер размера соединений Int InitSize = в Integer.parseInt (prop.getProperty ( "InitSize" ) ); // драйверы нагрузки Class.forName (драйвер); для ( межд0 = I, I <InitSize, я ++ ) { Connection Conn = в DriverManager.getConnection (URL, пользователь, пароль); // добавить соединение в список , созданный System.out.println ( "инициализировать пул соединений с базой данных, чтобы создать первый" + (г + 1) + "соединение, добавляется в пул" ); connPool.add (штат Коннектикут); } } защелка (IOException Е) { e.printStackTrace (); } защелка (а ClassNotFoundException Е) { e.printStackTrace ( ); } улов (SQLException Е) { e.printStackTrace (); } } / *Соединение с базой данных * / общественности связи с этим GetConnection () бросает SQLException { IF (connPool.size ()> 0 ) { // Получить соединение из коллекции Final Connection Conn = connPool.removeFirst (); // вернуться прокси - серверов Подключение возврата (Соединение) Proxy.newProxyInstance (ConnPool. класс .getClassLoader (), conn.getClass (). в getInterfaces (), новый новый из InvocationHandler () { общественных объектов Invoke (прокси - объект, метод, метод, Object [арг]) бросает на Throwable { ЕСЛИ ( ! «закрыть».equals (method.getName ())) { вернуть Method.invoke (Конн, арг); } в ELSE { connPool.add (Conn); System.out.println ( «закрывает текущее соединение, пул соединений и возвращает соединение .. ....... " ); System.out.println ( " номер пула соединений является "+ connPool.size ()); возвращение нуль ; } } }); } еще { вбрасывание новый новый RuntimeException (" занят базы данных, повторите попытку позже ............ " ); } } общественный PrintWriter getLogWriter () бросает SQLException { возвращение нуль ; } Общественного недействительный setLogWriter (PrintWriter уходит) бросает SQLException { } общественных пустот setLoginTimeout ( Int секунды) бросает SQLException { } общественного INT getLoginTimeout () бросает SQLException { возвращает 0 ; } Общественного Logger getParentLogger () бросает SQLFeatureNotSupportedException { возвращение нуль ; } Общественного разворачивать объект (класс IFACE) бросает SQLException { обратный нуль ; } Общественного логический isWrapperFor (класс IFACE) бросает SQLException { вернуться ложным ; } Общественного соединения GetConnection (String имя пользователя, String пароль) бросает SQLException { возвращение нуль ; } }
Импорт в java.sql.Connection;
 Импорт java.sql.ResultSet;
 Импорт java.sql.SQLException;
 Импорт java.sql.Statement, 

общественный  класс JdbcUtil { 

    // База данных пула соединений 
    Частный  статический ConnPool ConnPool = новый новый ConnPool (); 

    / ** 
     получения соединения из пула * 
     * @return 
     * @throws SQLException
      * / 
    общественное  статическое подключение GetConnection () бросает SQLException {
         вернуть connPool.getConnection (); 
    } 

    / **  
     * закрыть соединение
     * @Param Conn 
     * @param ST 
     * @param RS 
     * @throws SQLException 
      * / 
    общественности  статической  недействительным CloseConnection (Connection Conn, Заявление ST, ResultSet RS) бросает SQLException { 

        // Результаты Закрыть ResultSet объект магазин запрос 
        IF (RS! = Null ) { 
                rs.Close (); 
        } 

        // близко себе объект 
        IF ! (ST = NULL ) { 
                st.close (); 
        } 

        // закрываем соединение 
        IF (Conn =!нуль) { 
                Conn.Close (); 
        } 
    } 

}

db.properties

драйвер = com.mysql.cj.jdbc.Driver 
URL = JDBC: MySQL: // локальный: 3306 /数据库名serverTimezone = Asia / Shanghai & useUnicode = верно и characterEncoding = utf8 & UseSSL = TRUE 
пользователь = корень 
пароль = корень 
InitSize = 15

Вызов следующим образом:

JdbcUtil jdbcUtil = новый JdbcUtil ();
  Строка SQL = " написать SQL заявления " ; 
  Connection Connection = NULL ; 
  в отчете о Заявлении = нуль ;    ResultSet Resultset = NULL ;
{Попробовать 
  Connection = jdbcUtil.getConnection (); 
  Заявление = Connection.createStatement (); 
  результирующего = Statement.executeQuery (SQL),
    это время (ResultSet.next ()) { 
        Строка ID = resultSet.getString ( "ID" ); IF ( ! ID = NULL ) { // бизнес - логика может быть записана здесь      }     }   } улов (Exception E) { 
            logger.error ( "отказ сбора данных" , E); 
            MSG = createResultJson (1, "отказ сбора данных!". ); 
   } окончательно {
      попробовать {
        
      


  jdbcUtil.CloseConnection (Connection, Statement, то Resultset); // запоминаем последний близкий поток, или будет создавать сообщили слишком много соединений ненормальности } улов (SQLException E) { // TODO Auto-Сформирован блок подвох e.printStackTrace (); } }

 

рекомендация

отwww.cnblogs.com/wangquanyi/p/11446004.html