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
Nun, ich kann von zwei Möglichkeiten denken:
Ihre eigene Wrapper-Klasse erstellen - entweder durch
DataSource
Klasse Tomcat Erweiterung oder durch JavaDataSource
Schnittstelle und das Delegieren an den umwickeltenDataSource
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 Ihrertomcat-jdbc
(für Beispiele, wie Sie dies tun, beziehen Sie sich auf DataSourceConfiguration.Tomcat class) und wickeln Sie es mit Ihrer Klasse.Erstellen Sie einen Aspekt und verwenden Sie die AOP-Unterstützung von Spring, um Anrufe auf
getConnection
abzufangen. DaDataSource
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
}
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() {
...
}