关于Hibernate代码连接MySQL数据库的问题

Jeson_y 2016-11-10 03:44:42
配置文件 hibernate-cfg.xml:


<hibernate-configuration>
<session-factory name="mysql">
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://192.168.1.107:3306/monit?autoReconnect=true</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.show_sql">false</property>
<!-- <property name="hibernate.format_sql">true</property> -->

<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
<!-- 在连接池中可用数据库连接的最小数目 -->
<property name="c3p0.min_size">5</property>
<!-- 在连接池中所有数据库连接的最大数目 -->
<property name="c3p0.max_size">30</property>
<!-- 设定数据库连接的超时时间 -->
<property name="c3p0.time_out">18000</property>
<!-- 可以被缓存的PreparedStatement的最大数目 -->
<property name="c3p0.max_statement">50</property>
</session-factory>
</hibernate-configuration>


监视器中 contextInitialized()方法代码

Configuration cfg = new Configuration().configure();
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder()
.applySettings(cfg.getProperties()).buildServiceRegistry();
SessionFactory sf = cfg.buildSessionFactory(serviceRegistry);
Session session = sf.openSession();
List<Management> list = findAll(session);


启动Tomcat 的时候就会报错:

[framework] 2016-11-10 15:39:10,536 - com.mchange.v2.async.ThreadPoolAsynchronousRunner -32606 [C3P0PooledConnectionPoolManager[identityToken->1hge15y9kleveao14zmxys|1fb3bc23]-AdminTaskTimer] WARN com.mchange.v2.async.ThreadPoolAsynchronousRunner - com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@30d76e7c -- APPARENT DEADLOCK!!! Complete Status:
Managed Threads: 3
Active Threads: 3
Active Tasks:
com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask@7543698c
on thread: C3P0PooledConnectionPoolManager[identityToken->1hge15y9kleveao14zmxys|1fb3bc23]-HelperThread-#1
com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask@6e27c62b
on thread: C3P0PooledConnectionPoolManager[identityToken->1hge15y9kleveao14zmxys|1fb3bc23]-HelperThread-#2
com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask@1cc6a279
on thread: C3P0PooledConnectionPoolManager[identityToken->1hge15y9kleveao14zmxys|1fb3bc23]-HelperThread-#0
Pending Tasks:
com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask@34d4c4b1
com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask@7cbd5b8f
Pool thread stack traces:
Thread[C3P0PooledConnectionPoolManager[identityToken->1hge15y9kleveao14zmxys|1fb3bc23]-HelperThread-#2,5,main]
java.net.SocketInputStream.socketRead0(Native Method)
java.net.SocketInputStream.read(Unknown Source)
java.net.SocketInputStream.read(Unknown Source)
com.mysql.jdbc.util.ReadAheadInputStream.fill(ReadAheadInputStream.java:114)
com.mysql.jdbc.util.ReadAheadInputStream.readFromUnderlyingStreamIfNecessary(ReadAheadInputStream.java:161)
com.mysql.jdbc.util.ReadAheadInputStream.read(ReadAheadInputStream.java:189)
以下错误信息省略...


当我注释监听器中的代码 Tomcat可以正确启动,项目也可以正常运行,不知道监听器中的代码出现什么问题了?


PS: 早先数据库我是使用本机MySQL的,没有任何问题,改成其他计算机的IP地址就报错了!本机使用DOS可以正常访问这个IP的数据库
...全文
183 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
bcsflilong 2016-11-11
  • 打赏
  • 举报
回复
引用 3 楼 Jeson_y 的回复:
[quote=引用 2 楼 bcsflilong 的回复:] C3P0 的bug 把max_statements设置为0即可以解决。 c3p0在同时关闭statement和connection的时候,或者关闭他们之间的时间很短的时候,有时候connection并没有被关闭,因为有些preparedstatement还在被cached住。这是c3p0的作者自己说的。 看看这个也好 http://agodika.com/mblog/tech/2011/02/16/fixing-c3p0-apparent-deadlock-problem/
非常感谢! 不过您贴的链接不能访问,我还是很想去看看的[/quote] 网址应该是在墙外
Jeson_y 2016-11-11
  • 打赏
  • 举报
回复
引用 2 楼 bcsflilong 的回复:
C3P0 的bug 把max_statements设置为0即可以解决。 c3p0在同时关闭statement和connection的时候,或者关闭他们之间的时间很短的时候,有时候connection并没有被关闭,因为有些preparedstatement还在被cached住。这是c3p0的作者自己说的。 看看这个也好 http://agodika.com/mblog/tech/2011/02/16/fixing-c3p0-apparent-deadlock-problem/
非常感谢! 不过您贴的链接不能访问,我还是很想去看看的
bcsflilong 2016-11-11
  • 打赏
  • 举报
回复
C3P0 的bug 把max_statements设置为0即可以解决。 c3p0在同时关闭statement和connection的时候,或者关闭他们之间的时间很短的时候,有时候connection并没有被关闭,因为有些preparedstatement还在被cached住。这是c3p0的作者自己说的。 看看这个也好 http://agodika.com/mblog/tech/2011/02/16/fixing-c3p0-apparent-deadlock-problem/
Jeson_y 2016-11-11
  • 打赏
  • 举报
回复
等一晚上都没人么

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧