2017-01-26 2 views
0

У меня есть класс под названием SQLConnection, отвечающий за открытые и закрытые соединения jdbc. Всегда, когда мне нужно открыть соединение, мне нужно прочитать xml-файл для зарядки атрибутов класса, а затем я открою соединение.Класс подключения, следует ли использовать Singleton?

Я думаю о создании шаблона одноэлементного дизайна для этого класса и чтения xml-файла в классе contructor.

Я спрашиваю: какой лучший подход и что обеспечивает лучшую производительность? У вас есть статический подход к классу или чтение xml и создание класса объектов каждый раз? Ahh, это веб-приложение с 10 ~ 100 пользователями.

Вот как я делаю:

public class SQLConnection { 

    String url = ""; 
    String driver = ""; 
    String userName = ""; 
    String password = ""; 

    public Connection openConnection() { 

     Connection conn = null;  
     this.setAtributes();   

     try { 
      Class.forName(driver).newInstance(); 
      conn = DriverManager.getConnection(url, userName, password); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     return conn; 

    } 


    public void closeConnection(Connection conn) { 
     try { 
      conn.close(); 
     } catch (SQLException e) { 
      e.printStackTrace(); 
     } 
    } 

    //read a xml file that have database infos 
    public void setAtributes(){ 

     this.url = "lalala"; 
     this.userName = "lalala"; 
     this.password = "lalala"; 
     this.driver = "lalala";     
    } 
} 

Вот что я хочу сделать:

public class SQLConnection { 

    private static SQLConnection instance; 

    String url = ""; 
    String driver = ""; 
    String userName = ""; 
    String password = ""; 

    private SQLConnection() { 

    } 

    public static synchronized SQLConnection getInstance() { 
     if (instance == null) 
      instance = new SQLConnection(); 
      setAtributes(instance); 

     return instance; 
    } 

    public Connection openConnection() { 

     Connection conn = null;  

     try { 
      Class.forName(driver).newInstance(); 
      conn = DriverManager.getConnection(url, userName, password); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     return conn; 

    } 

    //read a xml file that have database infos 
    public static void setAtributes(SQLConnection instance){ 

     instance.url = "lalala"; 
     instance.userName = "lalala"; 
     instance.password = "lalala"; 
     instance.driver = "lalala";  
    } 
} 
+2

Используйте вместо этого реальный пул соединений. – Kayaman

+1

** Никогда не используйте ** Singleton для подключения. Используйте пулы соединений. – BackSlash

+2

Могло бы остановиться на первом предложении, действительно. Не используйте Singleton, период, пока вы не сможете сформулировать, почему это лучший способ. (И это почти никогда не бывает.) – cHao

ответ

0

Короткий ответ: Нет.

Singletons solve Контент проблемы проблема. Для SQL-соединения нет конкуренции, вы можете создать столько соединений, сколько хотите. Более подробная информация об использовании синглетонов приведена здесь: What is so bad about singletons?

Как и другие люди, лучше использовать пул соединений. Вы также получите лучшую производительность с пулом подключений. О преимуществах пулов подключения: Why we need a connection pooling for JDBC?

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