从 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的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot中常用的三个注解

Spring Boot中常用的三个注解

Springset注入(掌握)

解决spring boot中普通类中使用service为null 的方法

websocket无法注入问题解决方案

Context与ApplicationContext