好吧,我改變我的連接工廠的代碼,我使用PoolProperties類,現在我收到此錯誤:太多的連接(新的錯誤)
Data source rejected establishment of connection, message from server: "Too many connections"
在我InsertandGetObject方法我日誌中的消息爲了測試連接是否關閉,我也在服務器上啓動了debbug。
這個問題的任何想法? :■
這是我的連接池:
public static Connection getConnection() throws DatabaseConnectionException {
PoolProperties p = new PoolProperties();
p.setName("jdbc/MetaData");
p.setUrl("jdbc:mysql://localhost:3306/db_name");
p.setDriverClassName("com.mysql.jdbc.Driver");
p.setUsername("root");
p.setPassword("");
p.setInitialSize(3);
p.setMaxActive(10);
p.setMaxIdle(8);
p.setMinIdle(2);
p.setRemoveAbandoned(true);
p.setMaxWait(10000);
Connection conn = null;
try {
DataSource dataSource = new org.apache.tomcat.jdbc.pool.DataSource(p);
conn = dataSource.getConnection();
} catch (SQLException e) {
LOGGER.debug("MSJ SQLExp: " + e.getMessage());
throw new DatabaseConnectionException(e);
}
return conn;
}
這是關閉連接的方法:
public Concept insertAndGetObject(Concept object) throws SQLException,
DatabaseConnectionException {
try {
connection = ConnectionFactory.getConnection();
connection.setAutoCommit(false);
statement = connection.prepareStatement(INSERT_CONCEPTS);
statement = ConceptMapperUtil.setStatementParameters(statement,
object);
statement.executeUpdate();
connection.commit();
LOGGER.debug("Inserted concept row ");
} catch (SQLException e) {
connection.rollback();
if (e.getErrorCode() == SQL_INSERT_ERROR_CODE) {
LOGGER.debug("Concept already exists!");
} else {
throw e;
}
} finally {
object = findConceptByUniqueFk(object.dataSource.getIdDataSource(),
object.conceptType.getIdConcept(),
object.idMetadataVersion.getIdMetaDataVersion());
DbUtil.close(statement);
// connection.setAutoCommit(true);
DbUtil.close(connection);
}
return object;
}
與您的問題並不嚴格相關,但您爲什麼(1)在方法開始時沒有獲取「Concept」,以避免將異常用作「正常」業務邏輯(插入已有的概念是在您的流程中「正常」)和(2)在有可能拋出嚴重的SQLException並且您的連接處於無效狀態時,返回到finally子句中的數據庫?第二點甚至可以解釋你的問題,儘管我不能告訴你迄今爲止提供的信息。 –
我做了一些改變,現在我得到這個錯誤,任何想法? – kennechu
您的應用程序正在接收多少個請求(或同時請求)?您的數據庫被配置爲處理多少個同時連接?嘗試增加mysql允許的連接數(通過mysql管理員或編輯my.ini) –