2016-07-22 63 views
2

我正在使用tomcat-jdbc池默認spring-boot設置。每次在池中建立新的JDBC連接並在第一次使用之前,我想運行一些自定義Java代碼。如何做到這一點,如果有幾種可能性,哪一種最好?spring/tomcat-jdbc池 - 新的連接監聽器

回答

1

嗯,我能想到的兩個選項:

  1. 創建您自己的包裝類 - 通過擴展Tomcat的DataSource類或實現Java的DataSource接口,並委託給包裹DataSource - 然後添加邏輯您想要所需的方法並通過手動實例化您的tomcat-jdbcDataSource(有關如何操作的示例,請參閱DataSourceConfiguration.Tomcat class)並將其包裝到您的課程中,從而在類別@Configuration中註冊bean。

  2. 創建一個方面並使用Spring的AOP支持截取對getConnection的調用。由於DataSource類是使用javax包,我想你將不得不使用的AspectJ,以及一些例子參見this link

我的建議是去與第一個選項,它應該給你頭痛少,這裏有一個小例子,你如何定義你的包裝器bean:

@Bean 
public DataSource dataSource(DataSourceProperties properties) { 
    return new MyDataSourceWrapper(tomcatDataSourceFrom(properties)); 
} 

private org.apache.tomcat.jdbc.pool.DataSource tomcatDataSourceFrom(
    DataSourceProperties properties) { 
    // manual instantiation like in DataSourceConfiguration.Tomcat class 
} 
1

要延長已接受的答案,你可以使用Spring AOP 不完整的AspectJ,如果您使用的切入點,因爲這一個:

@AfterReturning(pointcut = "execution(* org.apache.tomcat.jdbc.pool.DataSourceProxy.getConnection())") 
public void afterConnectionEstablished() { 
    ... 
}