最初我只使用了休眠
我跟随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
,我没有看到异常。
你能解释这个问题的原因是什么吗?
最初我认为这个问题我不应该在不同的配置中复制信息,但现在我看到url
定义在dataSource
内部和hibernate.cfg.xml
内部
请澄清这个 Spring + Hibernate 魔法。
答案 0 :(得分:3)
请注意:
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
答案 1 :(得分:1)
我遇到了同样的问题。 BasicDataSource
课程将使用自己的url
,username
和password
参数进行连接。会话工厂将使用已配置的数据源。因此,结果会覆盖url
,username
和password
参数。只需删除hibernate.cfg.xml
中的连接参数,因为它们由dataSource
bean管理。
答案 2 :(得分:0)
我有同样的问题,经过上面的解决方案后,我得到了一种破坏方法&#39;关闭&#39;没有找到错误或类似的东西。
但是,看起来getConnection(用户,密码)似乎是这里的根本问题。当我在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>
答案 3 :(得分:-1)
在最新版本中,不支持getConnection(用户,密码)方法。
它会帮助你: 替换
org.apache.commons.dbcp2.BasicDataSource
与
org.springframework.jdbc.datasource.DriverManagerDataSource