[英]Spring JDBC error connection
我將Tomcat與Spring結合使用(通過Web服務Jersey異步),並在Tomcat中設置池連接,如下所示:
<Resource auth="Container" driverClassName="com.mysql.jdbc.Driver"
maxActive="100" maxIdle="50" maxWait="10000" name="jdbc/UsersDB"
password="secret" type="javax.sql.DataSource" url="jdbc:mysql://localhost:3306/DB"
username="root" />
例如,在我的JDBC類中,我有:
public String getMFromToken(String token) {
logger.info(TAG_LOG + " "
+ "prima della richiesta JDBC id" );
int id = jdbcTemplateObject.queryForObject(sqlGetToken, new Object [] {token}, Integer.class);
logger.info(TAG_LOG + " "
+ "recuperato id " + id );
String sqlGetMFromCred = "select matricola from stud where cred_id = ?";
logger.info(TAG_LOG + " "
+ "prima della richiesta JDBC matricola" );
String matricola = jdbcTemplateObject.queryForObject(sqlGetMFromCred, new Object [] {id},String.class);
logger.info(TAG_LOG + " "
+ "recuperata matricola " + matricola );
return matricola;
}
如果我長時間不執行對tomcat的請求(要求對數據庫進行查詢的請求),tomcat會向我發送500錯誤,但是如果我調用了任何請求(對數據庫的查詢都不需要對數據庫的查詢),則一切正常。
所以問題是Spring的某些配置(我認為)..如果我等待很長的時間來執行任何請求,為什么Spring不起作用?
對不起,我的英語不好
雖然看到錯誤消息會很有幫助,但聽起來您的MySQL服務器正在斷開池連接。
您說過,只有讓您的應用程序擱置一段時間而不發送任何請求到數據庫時,您才會看到此問題。 當您的應用程序不使用數據庫連接就座時,您的MySQL服務器將看到一段時間未使用連接(如果您控制服務器,則可以配置)並斷開連接。
由於服務器斷開了它們的連接,因此連接池尚未意識到它們已關閉。 這就產生了一個問題,因為下次您使用連接時,該池會使您的應用程序連接失敗。 雖然我不確定,因為我沒有看到確切的錯誤消息,但這肯定會導致您收到500錯誤。
我的建議是,將testOnBorrow和validationQuery屬性添加到連接池配置中(無論如何,您應該始終設置這些屬性)。 這將指示池將連接指定給應用程序之前,使用您指定的查詢測試連接。 換句話說,該池將過濾掉所有不良連接,並用新的良好連接替換它們。
<Resource auth="Container" driverClassName="com.mysql.jdbc.Driver"
maxActive="100" maxIdle="50" maxWait="10000" name="jdbc/UsersDB"
password="secret" type="javax.sql.DataSource" url="jdbc:mysql://localhost:3306/DB"
username="root" testOnBorrow="true" validationQuery="SELECT 1" />
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.