[英]using activemq failover URI for reconnecting, while timeout on first connection
[英]Losing connection to MySQL after a while, and not reconnecting
我正在開發一個使用JPA + Hibernate訪問MySQL數據庫的獨立服務器。
當我啟動服務器時,一切正常。 然而,過了一段時間(通常是第二天早上,如果我在下午開始),它將停止工作,因為顯然與MySQL的連接已關閉(我在日志中看到很多SocketException
)。 這可能是由於空閑,服務器正在開發而沒有人在晚上使用它。
我認為Hibernate,JDBC或我應用程序下面的其他一些層將管理連接並在必要時重新打開它,但顯然不是。 我錯過了配置參數嗎?
persistence.xml
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd“version =”2.0“>
<persistence-unit name="manager">
<class>example.data.entities.User</class>
<class>example.data.entities.Player</class>
<properties>
<property name="hibernate.dialect" value="example.data.HibernateDialect" />
<property name="hibernate.max_fetch_depth" value="3" />
<property name="hibernate.hbm2ddl.auto" value="update" />
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
</properties>
</persistence-unit>
EntityManagerFactory
創建
log.info("Connecting to database @ " + dbUrl + " using " + dbUser + "/" + dbPass);
emf = Persistence.createEntityManagerFactory("manager", Maps.create(
"javax.persistence.jdbc.user", dbUser,
"javax.persistence.jdbc.password", dbPass,
"javax.persistence.jdbc.url", dbUrl
));
一個問題
try
{
TypedQuery<User> q = em.createQuery("SELECT u FROM User u WHERE u.email = :mail", User.class);
q.setParameter("mail", email);
try {
u = q.getSingleResult();
log.info("Authenticating: " + u);
} catch (NoResultException e) {
return false;
}
} finally {
em.close();
}
正如你的建議,這是因為mysql在每次wait_timeout
通過后關閉空閑連接; 你有一些選擇來解決你的問題:
wait_timeout
足夠大的用例(默認為8小時)。 mysql驅動支持autoReconnect jdbc url看起來像jdbc:mysql:// localhost / bms_company?autoReconnect = true
如果你懷疑mysql正在丟棄連接嘗試在MySQL的my.ini文件末尾添加以下條目。 該文件位於MySQL安裝的根文件夾中。
#在響應“Bad handshake”connect_timeout = 0之前,mysqld服務器等待連接數據包的秒數
#服務器在關閉之前等待交互式連接上的活動的秒數。 interactive_timeout = 2000000
#服務器在關閉連接之前等待連接活動的秒數wait_timeout = 2000000
--Kiran.Kumar
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.