带有datasource或hibernate.cfg.xml的applicationContext.xml。区别?

时间:2012-09-28 06:07:33

标签: spring hibernate java-ee struts2

想要澄清一些困惑。我有applicationContext.xml。

问题1: 1和1之间的区别是什么? 2.它们是否在不同方法上相同?

问题2:

我在Spring论坛上就一些问题提出了问题。他提到的有关汇集的内容如下:

  

如果您需要/想要使用内部连接池进行休眠   我会建议反对它,只需配置一个数据源   支持连接池并将其注入您的   sessionfactorybean。

hibernate = 的内部连接池这是下面的数字2 。正确?

只需配置支持连接池的数据源,并将其注入sessionfactorybean = 这是数字1 。正确?

1# -

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="${jdbc.driverClassName}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
        <property name="maxActive" value="100"/>
        <property name="maxIdle" value="30"/>
        <property name="maxWait" value="16000"/>
        <property name="minIdle" value="0"/>
    </bean>

 <!-- Hibernate SessionFactory -->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="annotatedClasses">
            <list>
                <value>com.mkyong.customer.model.Customer</value>
            </list>
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.format_sql">false</prop>
                <prop key="hibernate.generate_statistics">true</prop>
            </props>
        </property>
    </bean>

2# -

池和连接信息在hibernate.cfg.xml

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

2 个答案:

答案 0 :(得分:10)

回答1:

两种方法都是一样的。默认情况下,hibernate会将配置从classpath:hibernate.cfg.xml读取到构建SessionFactoryLocalSessionFactoryBean只允许您在applicationContext.xml内设置hibernate配置,而不是hibernate.cfg.xml

如果在两个文件中指定了相同的属性,则取决于属性,它将具有令人上瘾的效果,或者applicationContext.xml中指定的属性将具有更高的优先级,以便hibernate.cfg.xml中的这些值将被忽略

对于方法1,annotatedClasseshibernateProperties应该会对hibernate.cfg.xml中的相应值产生上瘾效果。 applicationContext.xml中的DBCP dataSouruce应该会导致hibernate.cfg.xml中的相关属性被忽略。

回答2:

对于方法2,如果未指定LocalSessionFactoryBean的任何属性,则所有hibernate配置均由hibernate.cfg.xml指定。如果hibernate.cfg.xmlhibernate's own connection pooling algorithm is used by default中没有配置连接池,这是非常基本的,不打算在生产系统中使用,甚至不用于性能测试。

答案 1 :(得分:4)

如果您想要构建一个会话工厂,那么两种方法都会得到相同的结果。我不认为一个人可以比另一个人做得更多。

在我看来,当你不使用Spring时,你会使用 hibernate.cfg.xml 方法。例如,当JUnit测试你的DAO时。不必构建Spring应用程序上下文可以使测试运行得更快。

但是,当您使用Spring时,我认为将数据源与会话工厂分开是件好事。你正在使用Spring进行依赖注入,对吗?为什么不使用弹簧为您的会议工厂提供它所需要的东西?