0

我使用以下代码创建了一个 mysqlDatasource 连接:

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

如果我正在运行我的应用程序并且由于 mysql 重新启动或其他原因而断开连接,即使 mysql 服务器实例正在运行,其余操作也会失败。

在那种情况下,我想重新创建连接?这可能吗?我该怎么做呢?

4

4 回答 4

0

除了毛先生的选择之外,另一个选项是使用 setURL显式定义 url以允许自动重新连接,使用autoReconnect 参数,但请注意,不推荐这种方法。此处提供答案仅是为了完整性。

于 2013-02-28T04:10:24.750 回答
0

只需借助DBCP CONNECTION并创建您的连接池,如下面的代码。您可以看到有validation query哪些 ping 数据库定期刷新池。还有其他属性,例如validateConnection您可以将此属性设置为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");
于 2013-02-28T04:15:43.560 回答
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");
于 2013-02-28T04:23:50.587 回答
0

在大多数情况下,当您创建多个连接并处理它们时,最好使用连接池,其中的Connection对象就是对象,并且多路复用到由底层实现处理的实际套接字连接。这意味着连接会在您需要时自动创建,您无需担心回收资源和创建适当数量的连接。

两个突出的例子是BoneCPC3P0

于 2013-02-28T04:00:27.207 回答