2015-02-10 2 views
0

У меня есть проект JPS.Различные клиенты, использующие одно и то же соединение mysql JSP

Если у меня разные компьютеры, использующие систему, они используют одно и то же соединение MySQL.

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

Я хочу, чтобы каждый клиент имел другое соединение с mysql.

Извините, если я не был достаточно ясен.

package br.com.scope.model; 

import java.io.IOException; 
import java.io.InputStream; 
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.PreparedStatement; 
import java.sql.SQLException; 
import java.sql.Statement; 
import java.util.Properties; 

import org.springframework.context.annotation.Scope; 
import org.springframework.context.annotation.ScopedProxyMode; 

import br.com.scope.log.LoggerIntegrador; 

public class ConexaoMysql { 
    private static Connection connection; 
    private final static ConexaoMysql conexaoMysql = new ConexaoMysql(); 
    private static Properties prop; 
    private LoggerIntegrador logger; 

    private ConexaoMysql() { 
     super(); 
     prop = new Properties(); 
     Class<? extends ConexaoMysql> cls = this.getClass(); 
     InputStream is = cls.getResourceAsStream("db.properties"); 
     try { 
      prop.load(is); 
     } catch (IOException e) { 
      logger = LoggerIntegrador.getInstance(); 
      logger.error(e.getMessage(), e); 
     } 
    } 

    public static ConexaoMysql getConnection() throws SQLException, ClassNotFoundException, IOException { 
     if (connection == null || connection.isClosed()){ 
      conexaoMysql.abreConexao();    
     } 
     return conexaoMysql; 
    } 

    public static void beginTransaction() throws SQLException, ClassNotFoundException, IOException { 
     getConnection(); 
     connection.setAutoCommit(false); 
    } 

    public static void commit() throws SQLException { 
     connection.commit(); 
     connection.setAutoCommit(true); 
    } 

    public static String getDriver() { 
     return prop.getProperty("driver"); 
    } 

    public static String getConnectionString() { 
     return prop.getProperty("connectionstring"); 
    } 

    public static String getUser() { 
     return prop.getProperty("user"); 
    } 

    public static String getPassword() { 
     return prop.getProperty("password"); 
    } 

    private void abreConexao() throws ClassNotFoundException, SQLException, IOException{ 
     Class.forName(getDriver()); 

     connection = DriverManager.getConnection(
       getConnectionString(), 
       getUser(), 
       getPassword()); 
    } 

    public static void fechaConexao() throws SQLException { 
     if (!connection.isClosed()) { 
      connection.close();   
     } 
    } 

    public PreparedStatement getPreparedStatement(String sql) throws SQLException { 
     return connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); 
    } 

    public static int getId() { 
     return conexaoMysql.hashCode(); 
    } 
} 
+0

Используйте пул соединений, например [DBCP] (http://commons.apache.org/proper/commons-dbcp/) и выберите из него соединение. Вам нужно настроить это на своем веб-контейнере. –

ответ

1

Что вы ищете - это пул соединений. Это ограниченный пул соединений, с помощью которых клиенты могут подключиться к сети, когда им это нужно, и верните их, когда это будет сделано. Это избавляет вас от накладных расходов или создания и уничтожения соединений все время. Он также гарантирует, что количество подключений растет предсказуемо.

В большинстве контейнеров предусмотрены такие устройства, как, например, вот documentation for configuring a connection pool in Tomcat. Найдите один для своего контейнера.

Если по какой-либо причине вы не можете использовать это или не хотите, чтобы контейнер был ответственным, вы можете использовать библиотеку, которая поможет вам управлять пулом соединений самостоятельно, в вашем приложении. c3p0 является популярным со многими examples в Интернете.

EDIT: Hikari - новый классный выбор для объединения пулов.

Смежные вопросы