我有一个大问题,我不知道如何解决它:
我有一个数据库的单例实例如下:
public Connection getConnection() throws SQLException {
if (db_con == null)
db_con = createConnection();
return db_con;
}
Run Code Online (Sandbox Code Playgroud)
我有一个代码如下:
shortTextScoringComponent.scoreComponent( "RS",SelectDataBase.getBlogs(rightSarcastic));
shortTextScoringComponent.scoreComponent( "RNS",SelectDataBase.getBlogs(rightNonSarcasm));
shortTextScoringComponent.scoreComponent( "FNS",SelectDataBase.getBlogs(wrongNonSarcasm));
shortTextScoringComponent.scoreComponent( "FS",SelectDataBase.getBlogs(wrongSarcasm));
Run Code Online (Sandbox Code Playgroud)
因此,你可以看到我调用数据库4次,值得注意的是,每次调用之间都有很长的处理时间,因此在第二行成功执行之后,我的意思是这一行:
SelectDataBase.getBlogs(rightNonSarcasm);
Run Code Online (Sandbox Code Playgroud)
当谈到第三行时,我收到以下错误:
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was 79,547,948 milliseconds ago. The last packet sent successfully to the server was 79,547,964 milliseconds ago. is longer than the server configured value of 'wait_timeout'. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem.
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed.
Run Code Online (Sandbox Code Playgroud)
我搜索了很多,但有许多不同的答案让我困惑,你知道我的确切问题是什么吗?
小智 2
首先,正如例外所说,请添加
自动重新连接=true
在你的connectionString中也添加这个
tcpKeepAlive=true
其次,您可以保留一个轮询线程来不断检查连接活动性
class PollingThread extends Thread
{
private java.sql.Connection connection;
PollingThread(int index, java.sql.Connection connection)
{
super();
this.connection = connection;
}
public void run()
{
Statement stmt = null;
while (!interrupted())
{
try
{
sleep(15 * 60 * 1000L);
stmt = connection.createStatement();
stmt.execute("do 1");
}
catch (InterruptedException e)
{
break;
}
catch (Exception sqle)
{
/* This thread should run even on DB error. If autoReconnect is true,
* the connection will reconnect when the DB comes back up. */
}
finally
{
if (stmt != null)
{
try
{
stmt.close();
} catch (Exception e)
{}
}
stmt = null;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2967 次 |
| 最近记录: |