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

spring/tomcat-jdbc pool - new connection listener

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

嗯,我可以想到两个选择:

  1. 创建您自己的包装器 class - 通过扩展 Tomcat 的 DataSource class 或实现 Java 的DataSource 接口并委托给包装的 DataSource - 然后将您想要的逻辑添加到所需的方法中,并通过手动实例化 [=] 在 @Configuration class 中注册一个 bean 15=] DataSource(有关如何操作的示例,请参阅 DataSourceConfiguration.Tomcat class)并用您的 class.

  2. 包装它
  3. 创建方面并使用 Spring 的 AOP 支持拦截对 getConnection 的调用。由于 DataSourceclass 在 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
}

要扩展已经接受的答案,如果您使用切入点,则可以使用 Spring AOP 没有完整的 AspectJ

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