3

tomcat-jdbcデフォルト設定でプールを使用していspring-bootます。プールで新しい JDBC 接続が確立されるたびに、それが初めて使用される前に、いくつかのカスタム Java コードを実行したいと考えています。それを行う方法と、いくつかの可能性がある場合、どれが最適ですか?

4

2 に答える 2

3

すでに受け入れられている回答を拡張するには、次のようにポイントカットを使用する場合、完全な AspectJ なしでSpring AOP を使用できます。

@AfterReturning(pointcut = "execution(* org.apache.tomcat.jdbc.pool.DataSourceProxy.getConnection())")
public void afterConnectionEstablished() {
    ...
}
于 2016-08-03T14:25:54.777 に答える
2

さて、私は2つのオプションを考えることができます:

  1. Tomcat のDataSourceクラスを拡張するか、Java のDataSourceインターフェイスを実装してラップされたものに委譲することにより、独自のラッパー クラスを作成DataSourceし、目的のメソッドに必要なロジックを追加し、Bean を@Configuration手動でインスタンス化してクラスに登録しますtomcat-jdbc DataSource(方法の例については、そうするには、DataSourceConfiguration.Tomcat クラスを参照してください)、それをクラスでラップします。

  2. アスペクトを作成し、Spring の AOP サポートを使用して への呼び出しをインターセプトしますgetConnection。クラスは javax パッケージに含まれているためDataSource、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
}
于 2016-07-23T14:01:06.770 に答える