如何解决MyBatis-与MySQL的连接随机删除
| *更新:我发现一个打开后没有关闭会话的方法。我认为这可能是原因。稍后将进行测试并报告。 * 我们正在将MyBatis与我们的GWT Java Web应用程序一起使用。问题是,有时尝试使用MyBatis读取或写入数据库时会发生异常。可能是什么原因?任何后续查询将起作用。似乎连接已超时,需要刷新。这有时会发生在一整天,我们看不到任何模式。我们尝试了不同的配置,但无济于事。org.apache.ibatis.exceptions.PersistenceException:
### Error opening session. Cause: com.MysqL.jdbc.exceptions.jdbc4.MysqLNonTransientConnectionException: Communications link failure during rollback(). Transaction resolution unkNown.
### Cause: com.MysqL.jdbc.exceptions.jdbc4.MysqLNonTransientConnectionException: Communications link failure during rollback(). Transaction resolution unkNown.
MyBatis配置文件:
<environments default=\"development\">
<environment id=\"development\">
<transactionManager type=\"JDBC\" />
<dataSource type=\"POOLED\">
<property name=\"driver\" value=\"com.MysqL.jdbc.Driver\"/>
<property name=\"url\" value=\"jdbc:MysqL://localhost/project\"/>
<property name=\"username\" value=\"username\"/>
<property name=\"password\" value=\"password\"/>
<property name=\"poolMaximumActiveConnections\" value=\"20\"/>
<property name=\"poolMaximumIdleConnections\" value=\"5\"/>
<property name=\"poolPingEnabled\" value=\"true\"/>
<property name=\"poolPingQuery\" value=\"select 1\"/>
</dataSource>
</environment>
</environments>
更新1
异常是在不同的“ DAO”中引发的,它不是特定于单个方法/调用的。
通用方法如下所示:
@Override
public Entity get(String id) throws Exception {
LogHelper.logMethodStart(logger,\"get\",\"id\",id);
sqlSession session = null;
try {
session = GenericDao.SESSION_FACTORY.openSession();
EntityDao mapper = session.getMapper(EntityDao.class);
return mapper.get(id);
} catch (Exception e) {
logger.error(e);
throw e;
} finally {
if (session != null) {
session.close();
}
}
}
会话工厂类包含以下内容:
public static sqlSessionFactory SESSION_FACTORY;
static {
logger.info(\"sqlSessionFactory init started.\");
String aResource = \"iBatisConfig.xml\";
Reader reader;
try {
reader = Resources.getResourceAsReader(aResource);
} catch (IOException e) {
throw new RuntimeException(e);
}
SESSION_FACTORY = new sqlSessionFactoryBuilder().build(reader);
try {
reader.close();
} catch (IOException e) {
logger.error(e);
}
SESSION_FACTORY.getConfiguration().addMappers(\"com.example.project.server.dao\");
logger.info(\"sqlSessionFactory init end.\");
}
解决方法
问题为我解决。我经历了所有打开一个会话的方法,而一个会话没有被关闭-编码错误。因此,连接池有时会耗尽免费连接。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。