有没有办法使用c3p0作为dropwizard Hibernate存储库的连接提供程序? 我将c3p0的属性添加到dropwizard配置文件中,但我不认为它做了什么.. 另外,我将Hibernate c3p0依赖项添加到pom文件
答案 0 :(得分:0)
所以,我在这里几乎不是专家,你的问题是我第一次遇到dropwizard。
但是快速查看其代码表明它依赖于DataSourceFactory,它使用tomcat-jdbc连接池进行硬编码。
但是,因为looks like你通过构建自己的DataSourceFactory
来直接配置hibernate(以及其他db依赖模块),并且由于该类是非最终的,我认为你可以编写自己的子类并覆盖其构建方法以返回适当配置的c3p0数据源,或者(更容易)让c3p0数据源从c3p0.properties
文件(或c3p0支持的几种配置样式中的任何一种)中获取其配置。继承的getter和setter将毫无意义 - 这些属性将被忽略,并且尝试使用dropwizard的json或yaml工具配置DataSource将被忽略。 (你可以覆盖那些getter和setter来抛出异常来提醒你它们没有被实现,但是你必须验证它们不会被调用,即使你没有明确配置它们。)唯一困难的部分是配置MetricRegistry
,我假设保留和监控你感兴趣的池的统计数据。但这不会太难:请参阅ManagedPooledDataSource的start()方法获取模板,以及您可以在c3p0 PooledDataSource上监控的所有统计信息。
您可能不需要扩展DataSourceFactory。仅编写一个实现PooledDataSourceFactory的单独类就足够了。另外,还有一个名为DatabaseConfiguration的类,其最后一个提交消息是"将设施添加到插件自定义数据库连接池。"但我无法找到这个类的任何示例或文档。很清楚如何通过扩展DataSourceFactory来集成c3p0,其他人有suggested that。