hibernate 不得不说的那些事--Connection Provider
?从源代码不难看出这么多种Connection Provider的优先顺序 :
?
自定义Connection Provider?>DatasourceConnectionProvider>C3P0ConnectionProvider
>?ProxoolConnectionProvider>DriverManagerConnectionProvider>UserSuppliedConnectionProvider
?
首先hibernate检测hibernate.connection.provider_class是否配置了,如果配置了,则根据该配置对应的类(必须要实现ConnectionProvider接口,含无参构造函数)名实例化。
?
如果hibernate.connection.provider_class没有配置,则检测hibernate.connection.datasource配置,如果配置了,则使用DatasourceConnectionProvider。
?
如果hibernate.connection.datasource没有配置,则检测hibernate.c3p0.max_size,如果配置了,则使用C3P0ConnectionProvider。
?
如果hibernate.c3p0.max_size没有配置,则检测hibernate.proxool.xml、hibernate.proxool.properties、hibernate.proxool.existing_pool的配置,只要其中任何一个配置了,则使用ProxoolConnectionProvider。
?
?
如果hibernate.proxool.xml、hibernate.proxool.properties、hibernate.proxool.existing_pool都没有配置,则检测hibernate.connection.url的配置,则使用DriverManagerConnectionProvider。
?
如果以上没有配置的话,则使用UserSuppliedConnectionProvider(抛出异常),提示需要提供连接。
?