从 Spring 的 applicationContext xml 传递 hibernate.connection.datasource
Posted
技术标签:
【中文标题】从 Spring 的 applicationContext xml 传递 hibernate.connection.datasource【英文标题】:Passing hibernate.connection.datasource from Spring's applicationContext xml 【发布时间】:2012-06-04 04:02:41 【问题描述】:之前我在应用程序服务器本身中配置了数据源,并将其传递给应用程序级别的 hbr.xml 文件
<property name="hibernate.connection.datasource">java:comp/env/jdbc/myDataSource</property>
现在我已将 applicationContext.xml 中的数据源配置为
<bean id="mydatasource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver" />
<property name="url"
value="jdbc:sqlserver://localhost:1433;databaseName=mydatasource;maxPoolSize=100" />
<property name="username" value="sa" />
<property name="password" value="$database.password"/>
</bean>
如何将其传递给 hbr.xml 文件?
基于下面给出的我的另一个问题是我的会话工厂应该是什么类?应该是org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean
或
org.springframework.orm.hibernate3.LocalSessionFactoryBean
【问题讨论】:
【参考方案1】:将数据源与休眠映射一起注入您的 DAO:
<bean id="mydatasource" ...>
...
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="mydatasource" />
<property name="mappingResources">
<list>
<value>path/to/your/mappings.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props><!-- see http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/session-configuration.html -->
<prop key="hibernate.dialect">org.hibernate.dialect.mysqlDialect</prop>
....
</props>
</property>
...
</bean>
使用注解,您可以通过注入的 bean 访问您的数据源
@Resource
private SessionFactory sessionFactory;
...
Session session = this.sessionFactory.getCurrentSession();
【讨论】:
我有 100 多个 DAO。我必须全部更改吗? 不知道你的 DAO 实现我只能猜测。但也许使用通用 DAO 可以显着减少该数量。您可以在此条目下找到一个这样的实现(尽管存在许多关于此主题的其他帖子):***.com/questions/9721383/hibernate-crud-generic-dao以上是关于从 Spring 的 applicationContext xml 传递 hibernate.connection.datasource的主要内容,如果未能解决你的问题,请参考以下文章