Я создал очень простой веб-сервис на Tomcat 9.0.12, который каждый раз, когда он вызывается, я создаю соединение с базой данных (Oracle 12), используя DataSource (определенный в файле conf / context.xml), затем перед возвратомв ответ клиенту он закрывает соединение с базой данных.
Но если я проверяю активный сеанс в моей базе данных, это показывает, что соединение все еще живо, поэтому у меня много "зомби" соединения с моимБаза данных.
Я использовал более или менее тот же код для программы на стороне клиента, и в этом случае программа закрывает соединение. Может быть, у Tomcat плохая конфигурация?
Как я могу это исправить?
Спасибо!
conf / context.xml
<Resource maxWaitMillis="5000"
maxIdle="100"
maxActive="200"
password="PASSWORD"
username="USER"
url="jdbc:oracle:thin:@/192.168.1.248:1521/PRD"
driverClassName="oracle.jdbc.driver.OracleDriver"
type="javax.sql.DataSource"
auth="Container"
name="jdbc_Connection"/>
Ява
public String method() {
try {
System.out.println("---------------------------------------");
System.out.println("START");
System.out.println("---------------------------------------");
DataSource ds = (DataSource) InitialContext.doLookup("java:comp/env/jdbc_Connection");
Connection DB = ds.getConnection();
String sql ="SELECT VAR FROM TABLE_NAME";
PreparedStatement stmt = null;
try {
stmt = DB.prepareStatement(sql);
ResultSet rs = stmt.executeQuery();
while(rs.next()){
System.out.println("rs->"+rs.getString(1));
}
rs.close();
stmt.close();
} catch (SQLException ex) {
}finally{
if(stmt != null){
try {
stmt.close();
} catch (SQLException ex) {
}
}
}
System.out.println("CLOSE");
DB.close();
} catch (SQLException ex) {
ex.printStackTrace();
} catch (NamingException ex) {
ex.printStackTrace();
}
System.out.println("---------------------------------------");
System.out.println("END");
System.out.println("---------------------------------------");
return "HELLO";
}