相关疑难解决方法(0)

在MySQL,Grails 2应用程序更长时间不活动期间保持池连接活动(或将它们计时并获得新的连接)的正确方法

我有一个grails应用程序,有高活动的flurries,但往往是一段时间不活动,可以持续几个小时到一个晚上.我注意到早上的第一个用户得到以下类型的异常,我相信这是由于池中的连接过时而MYSql数据库关闭它们.

我在Googling中发现了有关使用Connector/J连接属性'autoReconnect = true'是否是一个好主意的信息(以及即使连接被恢复,客户端是否仍会获得异常),或者是否设置其他属性将周期性地逐出或刷新空闲连接,测试借用等.Grails使用下面的DBCP.我目前有一个简单的配置,如下所示,我正在寻找一个答案,如何最好地确保在长时间非活动期间有效且未关闭后从池中抓取任何连接.

dataSource {
        pooled = true
        dbCreate = "update"
        url = "jdbc:mysql://my.ip.address:3306/databasename"
        driverClassName = "com.mysql.jdbc.Driver"
        dialect = org.hibernate.dialect.MySQL5InnoDBDialect
        username = "****"
        password = "****"
        properties {
          //what should I add here?
          }
    }
Run Code Online (Sandbox Code Playgroud)

例外

    2012-06-20 08:40:55,150 [http-bio-8443-exec-1] ERROR transaction.JDBCTransaction  - JDBC begin failed
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was 64,129,968 milliseconds ago.  The last packet sent successfully to the server was 64,129,968 milliseconds ago. is longer than the server configured value of 'wait_timeout'. …
Run Code Online (Sandbox Code Playgroud)

mysql grails connection-pooling connector-j

37
推荐指数
2
解决办法
7万
查看次数

数据库访问无法在早上工作

我正在建立一个登录系统.当我在我自己的计算机上测试时,它工作得非常好.一旦我将它上传到我们的服务器,我们就开始遇到问题......它不会在早上登录几秒钟.其余时间工作正常.

我昨天和今天只碰到了这个,我每天早上只能测试一次,所以很难给出太多细节.这是设置:

首页是一个使用javascript和angular js的html页面.它会显示一个空框架,然后对页面内容发出ajax请求.在任何返回值为"访问权限不足"的失败的ajax请求中,它将取消隐藏div持有登录表单.该登录表单空白页面并提供提交按钮.单击提交按钮后,它会向Java服务器发送ajax登录请求.一旦返回该请求,该页面就会再次隐藏登录表单,并且会像往常一样继续运行.

在后端,我们有一个运行1.6到1.7之间的java服务器(是的,我知道,我应该知道更好 - 服务器报告它是1.7.001,但1.7功能,如基于字符串的switch-case语句''工作,所以我们在上传时编译1.6 java.这是我们正在处理的一个已知问题.)我们正在使用Stripes来执行前端代码.数据库是一个mysql数据库,位于同一台服务器上.

发生此错误时,它始终是早上的第一次登录.我加载页面,输入用户/通行证,然后单击登录.页面闪烁并返回登录屏幕.我还没有在登录后清除用户/通行证,因为我们还处于测试阶段,所以我可以再次点击"登录",再次点击十几次,最后登录.这个问题有只发生过两次:昨天和今天,早上第一次登录.

我的同事在之前的项目,同一台服务器上遇到了类似的问题.他说他认为问题与sql server关闭连接有关,而java服务器没有意识到连接已经关闭,但他不确定,并且不知道如何修复它.

我甚至不知道提供什么其他信息,显示什么代码,或类似的东西.我可以在任何地方找到的最好的建议是"设置一个预定的事件来每隔几个小时发出一次确定的数据库请求",但这似乎是...... kludgy.如果有人能帮助我,我希望能够测试更确定的问题和解决方案.如果有人能告诉我他们希望看到的代码,我很乐意将其粘贴.更多信息?请问.范围看起来很...... 很大 ......我不知道哪些部分可能是相关的.

编辑1:错误代码!

[ERROR] - Database Error 1 on verify
java.sql.SQLException: Already closed.
    at org.apache.tomcat.dbcp.dbcp.PoolableConnection.close(PoolableConnection.java:114)
    at org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.close(PoolingDataSource.java:191)
Run Code Online (Sandbox Code Playgroud)

编辑2:连接代码

这是我们专门为所有mysql数据库连接保留的对象.

private static ConnectionSource coreConnection = null;
private static DataSource coreDataSource = null;

public static ConnectionSource getCoreConnection() throws SQLException, NamingException {
    if (coreConnection == null || !coreConnection.isOpen()) {        
        Context env = (Context)new InitialContext().lookup("java:comp/env");        
        coreDataSource = (DataSource)env.lookup("webapps/test");
        coreConnection = new DataSourceConnectionSource(coreDataSource, new MysqlDatabaseType());
    }
    return coreConnection;
}
Run Code Online (Sandbox Code Playgroud)

java mysql stripes

2
推荐指数
1
解决办法
220
查看次数

标签 统计

mysql ×2

connection-pooling ×1

connector-j ×1

grails ×1

java ×1

stripes ×1