一尘不染

spring / tomcat-jdbc池-新的连接侦听器

spring-boot

tomcat-jdbc在默认spring- boot设置中使用池。我想每次在池中建立新的JDBC连接时以及在首次使用它之前都运行一些自定义Java代码。如何做到?如果有几种可能性,哪一种是最好的?


阅读 264

收藏
2020-05-30

共1个答案

一尘不染

好吧,我可以想到两个选择:

  1. 创建您自己的包装器类(通过扩展Tomcat的DataSource类或通过实现Java的DataSource接口并委派给被包装的类DataSource),然后将所需的逻辑添加到所需的方法,并@Configuration通过手动实例化您的类来注册Bean tomcat-jdbc DataSource(例如有关如何这样做,请参阅DataSourceConfiguration.Tomcat类),并将其包装在您的类中。

  2. 创建一个方面并使用Spring的AOP支持来拦截对的调用getConnection。由于DataSource类位于javax包中,因此我认为您必须使用AspectJ,有关某些示例,请参考此链接。

我的建议是选择第一个选项,这样可以减少麻烦,这是一个如何定义包装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
}
2020-05-30