【问题标题】:How do I recreate a mysql data source connection, if the connection fails, in java?如果连接失败,如何在 java 中重新创建 mysql 数据源连接?
【发布时间】:2013-02-28 03:51:03
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: java mysql eclipse


    【解决方案1】:

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

    两个突出的例子是BoneCPC3P0

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        只需在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");
        

        【讨论】:

          【解决方案4】:

          试试这个。

          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");
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-06-23
            • 1970-01-01
            • 1970-01-01
            • 2020-12-15
            • 2011-12-05
            • 2019-02-21
            • 1970-01-01
            • 2016-12-05
            相关资源
            最近更新 更多