【问题标题】:Spring+hibernate vs hibernate configuration. Cause of UnsupportedOperationException: Not supported by BasicDataSourceSpring+hibernate 与休眠配置。 UnsupportedOperationException 的原因:BasicDataSource 不支持
【发布时间】:2014-08-31 14:19:25
【问题描述】:

一开始我只使用休眠

我关注了hibernate.cfg.xml

<hibernate-configuration>
    <session-factory>
        <property name="hbm2ddl.auto">create</property>     
        <property name="connection.url">jdbc:mysql://localhost:3306/...</property>
        <property name="connection.username">root</property>
        <property name="connection.password">XXX</property> 
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="show_sql">true</property>
        <property name="format_sql">true</property>
        <property name="connection.pool_size">1</property>
        <property name="current_session_context_class">thread</property>        

        //mapping
        ...

    </session-factory>
</hibernate-configuration>

而且效果很好:

在我包含 Spring 然后配置如下:

...
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource"
        destroy-method="close">
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <property name="url" value="jdbc:mysql://localhost:3306/..." />
        <property name="username" value="root" />
        <property name="password" value=XXX /> 
    </bean>

    <bean id="sessionFactory"
        class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="configLocation" value="classpath:hibernate.cfg.xml" />
    </bean>
...

之后我在控制台中看到:

java.lang.UnsupportedOperationException: Not supported by BasicDataSource
    at org.apache.commons.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:1432)
    at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:139)

在我尝试删除之后

        <property name="connection.username">root</property>
        <property name="connection.password">XXX</property> 

来自hibernate.cfg.xml,我没有看到异常。

你能解释一下这个问题的原因吗?

最初我认为我不应该在不同配置中复制信息的问题,但现在我看到例如urldataSourcehibernate.cfg.xml 内部定义

请澄清这个 Spring + Hibernate 魔法。

【问题讨论】:

    标签: java spring hibernate configuration datasource


    【解决方案1】:

    请注意:

    org.springframework.jdbc.datasource.DriverManagerDataSource
    

    没有为您提供连接池!

    我建议迁移到 Tomcat JDBC 连接池。

    到目前为止,恕我直言,这是最有效的一个。

    <bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource" destroy-method="close">
    

    需要依赖

    org.apache.tomcat tomcat-jdbc
    

    检查文档: https://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题。 BasicDataSource 类将使用其自己的 urlusernamepassword 参数进行连接。会话工厂将使用已配置的数据源。因此,urlusernamepassword 参数被覆盖。只需在 hibernate.cfg.xml 中丢弃这些连接参数,因为它们由 dataSource bean 管理。

      【讨论】:

        【解决方案3】:

        我遇到了同样的问题,在上述解决方案之后,我得到了一个销毁方法“关闭”未找到错误或类似的问题。

        但是,getConnection(user, password) 似乎是这里的根本问题。当我在 hibernate.cfg.xml 中注释掉 connection.username 和 connection.password 时,一切正常。

        更正:我应该澄清一下,我将用户名和密码移动到了 appContext,就像这样

         <bean id="dataSource"
            class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"
            p:driverClassName="com.mysql.jdbc.Driver"
            p:url="jdbc:mysql://127.0.0.1:3306/my_schema"
            p:username="root"
            p:password="mypassword">
        </bean>
        

        【讨论】:

          【解决方案4】:

          最新版本不支持getConnection(User,Password)方法。

          它会帮助你: 替换

          org.apache.commons.dbcp2.BasicDataSource
          

          org.springframework.jdbc.datasource.DriverManagerDataSource
          

          【讨论】:

          • 现在我有一个工作应用程序!我只是想了解问题的原因
          • 您的建议是用完全不缓存连接的东西替换完全成熟的连接池。用户不应在生产环境中这样做。
          猜你喜欢
          • 1970-01-01
          • 2018-12-16
          • 2012-04-18
          • 2014-11-05
          • 2021-12-17
          • 2011-05-03
          • 1970-01-01
          • 2016-11-06
          • 1970-01-01
          相关资源
          最近更新 更多