我在默认设置中使用tomcat-jdbc
池。spring-boot
每次在池中建立新的 JDBC 连接时以及第一次使用它之前,我都想运行一些自定义 Java 代码。怎么做,如果有几种可能性,哪一种是最好的?
问问题
938 次
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
好吧,我可以想到两个选择:
创建您自己的包装类 - 通过扩展 Tomcat 的
DataSource
类或通过实现 Java 的DataSource
接口并委托给被包装的类DataSource
- 然后将您想要的逻辑添加到所需的方法并@Configuration
通过手动实例化您的类中注册一个 beantomcat-jdbc
DataSource
(例如关于如何这样做,请参阅DataSourceConfiguration.Tomcat 类)并将其与您的类一起包装。创建一个切面并使用 Spring 的 AOP 支持来拦截对
getConnection
. 由于DataSource
类在 javax 包中,我认为您将不得不使用 AspectJ,有关一些示例,请参阅此链接
我的建议是使用第一个选项,它应该可以减少你的头疼,这里有一个小例子,你将如何定义你的 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
}
于 2016-07-23T14:01:06.770 回答