2011-01-14 4 views
0

나는 여러 개의 데이터 소스 (여러 개의 mysql dbs에 대응)와 tomcat dbcp를 사용하여 spring을 사용하고있다. 내가 찾을 수 없습니다Tomcat DBCP와 다중 데이터 소스를 가진 Spring JDBC

  • 절차와 같은 몇 가지 이상한 예외를 얻고있다 - proc 디렉토리는 DB에 확실히 존재하는 경우
  • 이 풀에서 빌릴 수 없습니다 - 지역 dev에 설치, 그래서 확실히 풀이 가득하지

내가 느끼는 문제는이 될 수도, 모두로부터의 입력이 필요합니다

내가 하나 jdbcTemplate 객체가 내가 해고해야 할 모든 쿼리, 내 spring.xml에서 정의한, 나는 적절한 다를 설정 jdbcTemplate.setDataSource() 전화 tasource를 입력 한 다음 simplejdbccall(jdbctemplate)을 사용하여 proc을 실행하십시오.

여러 개의 jdbcTemplate 개체, 즉 정의 된 각 데이터 소스에 대해 하나씩 정의해야할까요? jdbctemplate에 데이터 소스를 설정하고 저장된 proc을 실행하는 bean은 prototype으로 정의됩니다.

+0

도움이 끔찍하게 스레드 안전하지 않습니다. –

답변

5

DataSource을 계속 변경하려면 공유 된 JdbcTemplate을 사용하지 않아야합니다. DataSource을 한 번 설정하고 그대로 두십시오.

빈은 복수 JdbcTemplate 빈을 의미하거나, DataSource 각각에 하나를 의미하거나 필요시 수동으로 새 JdbcTemplate 개체를 수동으로 만들고 공유하지 않습니다. 새로운 파일을 만드는 데 상당한 성능 오버 헤드가 없습니다. 문제는 아닙니다.

prototype으로 정의 할 수 있습니다.하지만 수동으로 DataSource을 삽입하려는 경우에는 그다지 중요하지 않습니다. new을 사용하여 JdbcTemplate을 인스턴스화 할 수도 있습니다.

0

답변 해 주셔서 감사합니다. 매번 jdbctemplate의 새 인스턴스를 만들어 이러한 오류를 극복했습니다. 또한 최신 mysql jconnector jsr (5.1.14)로 업데이트했습니다. 클래스 디자인이 매우 간단합니다. 나는 jdbcTemplate 객체를 인스턴스 변수로 인스턴스화하는 사용자 정의 작성된 스프링 jdbc 래퍼의 새 인스턴스를 사용하는 기본 dao를 갖고있다. 이 인스턴스 변수는 모든 요청에 ​​대해 SimpleJdbcCall의 새 인스턴스에서 사용됩니다. 모든 나의 DAO 클래스는이 기본 DAO로부터 상속받습니다. DatabaseMetaData의 .... 를 추출하는 동안 오류 :

org.springframework.jdbc.support.MetaDataAccessException :

그러나이 같은 일부 간헐적 인 오류가 있습니다. . . 에 의해 발생합니다 : org.apache.tomcat.dbcp.dbcp.PoolingDataSource.checkConnection() : 연결이 닫혔습니다. 이 오류의 패턴이 표시되지 않습니다. 각 데이터 소스에 대해 initialSize가 &이고 maxActive가 100입니다. 여기에 문제가 될 수있는 정보가 있으면 알려주십시오.

관련 문제