我tomcat-jdbc在默认spring- boot设置中使用池。我想每次在池中建立新的JDBC连接时以及在首次使用它之前都运行一些自定义Java代码。如何做到?如果有几种可能性,哪一种是最好的?
tomcat-jdbc
spring- boot
好吧,我可以想到两个选择:
创建您自己的包装器类(通过扩展Tomcat的DataSource类或通过实现Java的DataSource接口并委派给被包装的类DataSource),然后将所需的逻辑添加到所需的方法,并@Configuration通过手动实例化您的类来注册Bean tomcat-jdbc DataSource(例如有关如何这样做,请参阅DataSourceConfiguration.Tomcat类),并将其包装在您的类中。
DataSource
@Configuration
创建一个方面并使用Spring的AOP支持来拦截对的调用getConnection。由于DataSource类位于javax包中,因此我认为您必须使用AspectJ,有关某些示例,请参考此链接。
getConnection
我的建议是选择第一个选项,这样可以减少麻烦,这是一个如何定义包装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 }