Java에서 JdbcTemplate의 DataSource 연결 URL을 기록하는 방법이 있습니까?JdbcTemplate - dataSource 연결 URL 로깅
필드가 DataSource에 있지만 액세스 할 수있는 게터가 없습니다. 물론 응용 프로그램 컨텍스트 xml에서 DataSource 속성을 읽을 수는 있지만 다른 방법으로 수행하고 싶습니다.
Java에서 JdbcTemplate의 DataSource 연결 URL을 기록하는 방법이 있습니까?JdbcTemplate - dataSource 연결 URL 로깅
필드가 DataSource에 있지만 액세스 할 수있는 게터가 없습니다. 물론 응용 프로그램 컨텍스트 xml에서 DataSource 속성을 읽을 수는 있지만 다른 방법으로 수행하고 싶습니다.
필드가있는 경우 리플렉션을 사용하여 필드에 액세스 하시겠습니까? 접근법은 미래를 보장하는 것은 아니지만 귀하의 요구에 충분할 수 있습니다.
당신은 컨텍스트 xml에서 가져올 필요가 없다고했지만, 나는 그 주위에 쉽고 깨지기 쉬운 방법을 볼 수 없다는 것을 알고 있습니다.
스프링 2.0 이상에서는 <util:property-path />
element을 사용하여 다른 bean의 특성을 참조 할 수 있습니다. 의이 DataSource
가과 같이 선언되어 있다고 가정 해 봅시다 (참고 : 나는 간결에 걸쳐 p-namespace
를 사용하는거야) : 나는 당신의 JdbcTemplate
일부 데이터 액세스 개체에서 사용하고 있으리라 믿고있어
<bean id="dataSource" class="com.example.SimpleDataSource"
p:user="db_user"
p:password="letmein"
p:driverClass="com.example.CabDriver"
p:jdbcUrl="jdbc:example:@localhost:1729:magicdb" />
. 의 그것과 같다 가정 해 봅시다 : 우리의 DAO에 JdbcUrl
속성을 얻는 방법 : 우리의 문제에 이제
<bean id="dao" class="com.example.SimpleDao"
p:dataSource-ref="dataSource" />
:
public class SimpleDao implements ExampleDao {
private JdbcTemplate jdbcTemplate;
public void setDataSource(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
}
그래서 봄의 설정이 DAO 지금처럼 구성하기 위해? 의 세터 추가하자
public class SimpleDao implements ExampleDao {
private String jdbcUrl;
// ...
public void setJdbcUrl(String jdbcUrl) {
this.jdbcUrl = jdbcUrl;
}
// ...
을 그리고 마지막으로 우리는이 사용하는 전술 <util:property-path />
요소 주입 :
<bean id="dao" class="com.example.SimpleDao"
p:dataSource-ref="dataSource">
<property name="jdbcUrl>
<util:property-path path="dataSource.jdbcUrl" />
</property>
</bean>
URL은 getJdbcUrl
를 사용하여 dataSource
라는 이름의 빈에서 사용할 수 있습니다 (이것은 구체적인 데이터 소스에주의를 인터페이스가 아님), property-path 요소는 Spring에게 거기에서 값을 가져오고이를 DAO의 속성 값으로 사용하도록 지시한다.
이것은 너무 많은 코드가 아닙니다 (하나의 setter와 하나의 추가 속성). 항상 두 값 모두에 같은 값을 주입해야합니다.
Tomcat 컨테이너에서 가져온 NamedParameterJdbcTemplate으로 삽입 된 JNDI 데이터 소스로 수행 한 작업은 다음과 같습니다.
String datasourceUrl = null;
try { // Log which database we are connected to.
JdbcTemplate jdbcTemplate = (JdbcTemplate)onyxReportingNamedParameterJdbcTemplate.getJdbcOperations(); // Get underlying JdbcTemplate
datasourceUrl = jdbcTemplate.getDataSource().getConnection().getMetaData().getURL();
} catch (SQLException e) { // No biggie, don't exit, this was just for info.
log.error("Non-fatal error: unable to get datasource for logging which database we are connected to.", e);
}
log.info("Datasource URL: " + datasourceUrl);
응용 프로그램 컨텍스트 :
<jee:jndi-lookup id="onyxReportingDS" jndi-name="jdbc/OnyxReadTLCDS" expected-type="javax.sql.DataSource" />
<bean id="onyxReportingNamedParameterJdbcTemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
<constructor-arg ref="onyxReportingDS" />
</bean>
어떤 데이터 소스 구현을 사용하고 있습니까? c3p0과 같은 것? – jasonmp85