【问题标题】:spring/tomcat-jdbc pool - new connection listenerspring/tomcat-jdbc pool - 新的连接监听器
【发布时间】:2016-11-26 08:07:46
【问题描述】:

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

【问题讨论】:

    标签: spring jdbc spring-boot connection-pooling tomcat-jdbc


    【解决方案1】:

    要扩展已经接受的答案,如果你使用切入点作为这个,你可以使用 Spring AOP 没有完整的 AspectJ

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

    【讨论】:

      【解决方案2】:

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

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

      2. 创建一个切面并使用 Spring 的 AOP 支持来拦截对 getConnection 的调用。由于DataSourceclass 在 javax 包中,我认为您必须使用 AspectJ,有关示例请参阅 this link

      我的建议是使用第一个选项,它应该可以减少你的麻烦,这里有一个小例子,你将如何定义你的 wrapper 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
      }
      

      【讨论】:

        猜你喜欢
        • 2014-12-21
        • 1970-01-01
        • 2012-11-28
        • 2019-01-21
        • 2014-09-13
        • 2014-10-15
        • 1970-01-01
        • 1970-01-01
        • 2021-11-10
        相关资源
        最近更新 更多