Tomcat에서 실행되는 웹 응용 프로그램을 DataSource를 통해 Oracle DB에 연결합니다. 나는 사용자가 연결되어 있지 않더라도 응용 프로그램이 시작되자 마자 연결 풀이 가득 차 있기 때문에 이상한 행동을 해왔습니다!이 쿼리의 출처는 어디입니까?
이select value$ from props$ where name = 'global_db_name'
연결에 대한 맥락이있다 : I이 실행되고있는 쿼리를 검사 할 때 항상 동일하게 나타납니다
<Context antiResourceLocking="true" crossContext="true" path="/taquillas">
<Resource auth="Container" driverClassName="oracle.jdbc.OracleDriver"
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
jdbcInterceptors="org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer"
jmxEnabled="true" url="jdbc:oracle:thin:@yyy.yyy.yyy.yyy:zzzz:ANNI"
username="xxxxxxxxx" name="jdbc/andrea" password="xxxxxxx"
type="javax.sql.DataSource" validationInterval="30000"
maxActive="50" minIdle="1" maxWait="10000" defaultAutoCommit="false"
initialSize="1" removeAbandonedTimeout="60"
removeAbandoned="true" validationQuery="SELECT 1 FROM DUAL"/>
</Context>
그리고 데이터 소스는 다음과 같이이다 :
public dbutilsHandler()
throws ClassNotFoundException, SQLException, NamingException {
this.gson = new GsonBuilder()
.setDateFormat("yyyy-MM-dd")
.serializeNulls().create();
InitialContext cxt;
cxt = new InitialContext();
this.ds = (DataSource) cxt.lookup("java:/comp/env/jdbc/andrea");
this.query = new QueryRunner(ds);
this.con = this.query.getDataSource().getConnection();
}
아무런 연결이 열려 있지 않은지 확인하고 있지만 왜 아직도 일어나고 있는지 이해할 수 없습니다. 도움!
그것을 호출, 또는 아무것도 때, 우리는이 코드가 무엇인지 전혀 모른다. 우리가 말할 수있는 것은 그것이 자바 명명 규칙을 존중하지 않는다는 것이며, 그것은 연결을 열지 만 그것을 닫지는 않는다는 것입니다. –
범인으로 SQL (일반적인 배경 소음이라고 Google이 빠르게 제안하는)을 어떻게 식별하고 있습니까? 연결 풀이 가득 찼다는 것을 어떻게 판단합니까? 그게 무슨 뜻입니까, 50 개의 연결이 있습니까? 아니면 더 이상 열리지 않습니까? 어떤 코드가 오류가 있습니까? 실제로 어떤 오류가 발생합니까? 시작시 응용 프로그램은 무엇을합니까? –