2013-02-28 45 views
0

我曾嘗試使用下面的代碼創建了一個mysqlDatasource連接:如何在java中重新創建mysql數據源連接(如果連接失敗)?

MysqlDataSource d = new MysqlDataSource(); 
d.setUser("user"); 
d.setPassword("pass"); 
d.setServerName("hostname.com"); 
d.setDatabaseName("db"); 
Connection c = d.getConnection(); 

如果進出口運行我的應用程序和連接斷開,因爲MySQL的重新啓動或某些其他原因,其餘的操作將即使MySQL服務器實例失敗在跑。

在這種情況下,我想重新創建一個連接?這可能嗎?我如何去做這件事?

回答

0

在大多數情況下,當您創建多個連接並對其進行處理時,最好使用連接池,其中Connection對象就是對象,並且複用到由基礎實現處理的實際套接字連接。這意味着連接會在您需要時自動創建,您不必擔心回收資源和創建適當數量的連接。

兩個突出的例子是BoneCPC3P0

0

除毛先生之外,另一種選擇是使用setURL定義url explicitly以允許使用autoReconnect parameter自動重新連接,但請注意,不建議使用此方法。這裏提供的答案只是爲了完整。

0

只需要DBCP CONNECTION的幫助,並創建您的連接池,如下面的代碼。您可以看到存在validation query,它定期對數據庫執行ping操作並刷新池。您還可以將此屬性設置爲true

BasicDataSource dataSource = new BasicDataSource(); 

dataSource.setDriverClassName("com.mysql.jdbc.Driver"); 
dataSource.setUsername("username"); 
dataSource.setPassword("password"); 
dataSource.setUrl("jdbc:mysql://<host>:<port>/<database>"); 
dataSource.setMaxActive(50); 
dataSource.setMaxIdle(5); 
dataSource.setInitialSize(5); 
dataSource.setValidationQuery("SELECT 1"); 
0

試試這個。

String driver = "com.microsoft.jdbc.sqlserver.SQLServerDriver"; 
Class.forName(driver); 
String url = "jdbc:microsoft:sqlserver://host:1433/database"; 
Connection conn = DriverManager.getConnection(url, "username", "password");