2016-07-22 12 views
2

Ich verwende tomcat-jdbc Pool in Standard spring-boot Setup. Ich möchte jedes Mal einen benutzerdefinierten Java-Code ausführen, wenn eine neue JDBC-Verbindung im Pool eingerichtet wird und bevor sie zum ersten Mal verwendet wird. Wie geht es, und wenn es mehrere Möglichkeiten gibt, welche ist die Beste?Spring/Tomcat-Jdbc Pool - neue Verbindung Listener

Antwort

1

Nun, ich kann von zwei Möglichkeiten denken:

  1. Ihre eigene Wrapper-Klasse erstellen - entweder durch DataSource Klasse Tomcat Erweiterung oder durch Java DataSource Schnittstelle und das Delegieren an den umwickelten DataSource Umsetzung - und dann die Logik hinzufügen Sie möchten die gewünschten Methoden und registrieren Sie eine Bohne in einer Klasse durch manuelle Instanziierung Ihrer tomcat-jdbc (für Beispiele, wie Sie dies tun, beziehen Sie sich auf DataSourceConfiguration.Tomcat class) und wickeln Sie es mit Ihrer Klasse.

  2. Erstellen Sie einen Aspekt und verwenden Sie die AOP-Unterstützung von Spring, um Anrufe auf getConnection abzufangen. Da DataSource Klasse im javax Paket ist, ich glaube, Sie werden AspectJ verwenden müssen, und für einige Beispiele zu this link

Mein Vorschlag mit der ersten Option zu gehen, wäre beziehen, sollte es Ihnen weniger Kopfschmerzen geben , hier ist ein kleines Beispiel, wie Sie Ihre Wrapper-Bean definieren würde:

@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

Zur Erweiterung bereits akzeptierte Antwort, Sie Frühling AOP ohne volle AspectJ, wenn Sie diese verwenden können, verwenden pointcut als:

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