1
A
回答
2
如果您的應用程序將與許多連接一起工作,那麼最好使用連接池。它已經在Java中實現,您可以輕鬆使用它。 這是使用Tomcat(如果你編寫web應用程序,你也可以使用Tomcat的游泳池,這將是更好)使用的Web應用程序池的例子
package usepool;
import org.apache.tomcat.jdbc.pool.DataSource;
import org.apache.tomcat.jdbc.pool.PoolProperties;
/**
*
* @author brainless
*/
public class ConnectionPool {
private static DataSource datasource;
public static String dbURL = "jdbc:mysql://localhost:3306/"
+ "<YourDataBase>?useUnicode=true&useEncoding=true&characterEncoding=UTF-8";
public static String driverClass = "com.mysql.jdbc.Driver";
public static String userName = "root";
public static String password = "password";
public static boolean jmx = true;
public static boolean testIdle = false;
public static boolean testBorrow = true;
public static boolean testReturn = false;
public static int validationInterval = 30000;
public static int timeBetweenEviction = 30000;
public static int maxActive = 100;
public static int initialSize = 10;
public static int maxWait = 10000;
public static int removeAbandonedTimeout = 60;
public static int minEvictableIdle = 30000;
public static int minIdle = 10;
public static boolean logAbandoned = true;
public static boolean removeAbandoned = true;
public static String jdbcInterceptors = "org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;"
+ "org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer";
private ConnectionPool() {
}
public static synchronized DataSource getInstance() {
if (datasource == null) {
PoolProperties p = new PoolProperties();
p.setUrl(dbURL);
p.setDriverClassName(driverClass);
p.setUsername(userName);
p.setPassword(password);
p.setJmxEnabled(jmx);
p.setTestWhileIdle(testIdle);
p.setTestOnBorrow(testBorrow);
p.setTestOnReturn(testReturn);
p.setValidationInterval(validationInterval);
p.setTimeBetweenEvictionRunsMillis(timeBetweenEviction);
p.setMaxActive(maxActive);
p.setInitialSize(initialSize);
p.setMaxWait(maxWait);
p.setRemoveAbandonedTimeout(removeAbandonedTimeout);
p.setMinEvictableIdleTimeMillis(minEvictableIdle);
p.setMinIdle(minIdle);
p.setLogAbandoned(logAbandoned);
p.setRemoveAbandoned(removeAbandoned);
p.setJdbcInterceptors(jdbcInterceptors);
datasource = new DataSource();
datasource.setPoolProperties(p);
}
return datasource;
}
public static synchronized void closePool() {
if (datasource != null) {
datasource.close();
}
}
}
這個類是單身。爲了讓你的代碼的連接,你需要使用這樣的
import usepool.ConnectionPool;
/*
* code
*/
connect = ConnectionPool.getInstance().getConnection();
0
這在大多數Java應用程序中比使用連接池不那麼重要。與使用連接池而不是手動管理連接所帶來的便利和收益相比,您的問題更多的是個人偏好問題。
2
有2種方法來處理連接:每個請求
- 一個連接 點播
- 連接
每個請求一個連接意味着您在流程開始時獲得連接,並在最後返回。這對於web請求來說不是一個好主意,因爲這意味着應用程序只能處理儘可能多的併發web請求,因爲有可用的db連接。 但是,對於批處理來說,這可能是一個好主意,你知道你只需要N個連接。
按需連接意味着當您打算進行數據庫調用時獲得連接,然後在db調用完成後立即返回它。
在這兩種情況下,建議使用連接池,但對於連接按需策略尤其重要,因爲您希望連接在返回後保持打開狀態,因爲打開連接時存在大量開銷。
通常有兩種方法來處理連接池:
- 容器管理
- 應用管理
容器管理意味着應用程序服務器提供的連接池,通過JNDI的應用程序。這是JBoss通常所做的。如果它在那裏,你可以使用這種方法。否則,您應該使用應用程序管理的池。
大多數DI框架將爲您提供一個連接池,並提供一些配置。 使用連接池確實沒有顯着的缺點。 java中最常見的兩種是DBCP和C3P0,它們都是非常成熟的庫。如果您不使用DI框架,您應該查看這些庫的入門指南並實施他們的建議。
相關問題
- 1. 在DAL中處理數據庫連接的最佳方式 - 創建或傳遞?
- 2. 連接數據庫的最新方式
- 3. 在c#中連接數據庫的最佳方式是什麼?
- 4. 在Laravel中連接多個數據庫的最佳方式
- 5. 在PHP連接MySQL數據庫的最佳方式
- 6. 在php中實現數據庫連接的最佳方式
- 7. 在類之間共享數據庫連接的最佳方式
- 8. 連接android和oracle數據庫的最佳方式是什麼?
- 9. 什麼是使用鈦創建數據庫的最佳方式
- 10. 數據庫連接的最佳途徑?
- 11. Sqlite數據庫連接最佳實踐
- 12. 最佳數據庫連接池大小
- 13. 數據庫連接最佳實踐
- 14. Android數據庫連接最佳實踐
- 15. 使用pdo連接到兩個數據庫的最佳方法
- 16. 在php中連接數據庫的最佳方法是什麼?
- 17. 高流量連接的最佳數據庫連接字符串?
- 18. 用於數據庫表連接的最佳設計模式
- 19. 如何在VBA + Access中創建實際應用'03:連接到數據庫的最佳方式是什麼?
- 20. 對於單次運行應用程序,創建greenDAO數據庫連接的最佳方式是什麼?
- 21. 創建數據庫驅動的Java網站的最佳方法?
- 22. 最佳/正確的方式來存儲SQLite數據源連接
- 23. PHP - 有多個連接時連接數據庫的最佳方法
- 24. 爲我的ASP.NET應用程序設置數據庫連接的最佳方式?
- 25. 連接和使用C#中的sqlite數據庫的最佳方式是什麼?
- 26. 最佳的方式連接到MS SQL
- 27. 連接node.js和sphinx的最佳方式
- 28. 管理連接表的最佳方式
- 29. Ruby - 創建PostgreSQL數據庫的最佳方法
- 30. 創建Sql Server數據庫夜間複製的最佳方法
對於連接池,您可以使用一些開箱即用的工具,如:http://commons.apache.org/dbcp/ – dbalakirev