当前位置: 首页 > 知识库问答 >
问题:

applicationContext.xml数据源或hibernate.cfg.xml.区别?

宋博易
2023-03-14

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

问题1:1有什么区别

问题 2:

我在Spring论坛上问了一些问题。他提到的关于池化的一件事如下

如果您需要/想使用hibernate的内部连接池,我建议您不要这样做,只需配置一个支持连接池的数据源,并将其注入sessionfactorybean。

hibernate的内部连接池=这是下面的第二个问题。正确

简单地配置一个支持连池的数据源并将其注入到您的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个答案

赵雅懿
2023-03-14

如果您想要构建会话工厂,则使用这两种方法将获得相同的结果。我不认为一个人能比另一个人做得更多。

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

然而,当您使用Spring时,我认为将数据源与会话工厂分开是一件好事。您使用Spring进行依赖注入,对吗?为什么不使用spring来满足您的会话工厂的需求呢?

吕宸
2023-03-14

答案1:

这两种方法是相同的。默认情况下,hibernate从< code > class path:hibernate . CFG . XML 中读取配置,以构建< code>SessionFactory。< code > LocalSessionFactoryBean 仅允许您在< code > application context . XML 而不是< code>hibernate.cfg.xml中设置hibernate配置。

如果在两个文件中指定了相同的属性,则根据属性,它将具有上瘾效果,或者应用程序中指定的属性.xml将具有更高的优先级,使得Hibernate.cfg.xml中的那些值将被忽略。

对于方法1,annotatedClasseshibernatePropertieshibernate.cfg中的相应值应该具有令人上瘾的效果。xml.applicationContext中的DBCP数据源。xml应该导致hibernate.cfg中的相关属性。xml被忽略。

答案二:

对于方法2,如果不指定< code > LocalSessionFactoryBean 的任何属性,则所有hibernate配置都由< code>hibernate.cfg.xml指定。如果在< code>hibernate.cfg.xml中没有配置连接池,则默认使用hibernate自己的连接池算法,这是非常初级的算法,不适合在生产系统中使用,甚至不适合用于性能测试

 类似资料:
  • 问题内容: 要清除一些混乱。我有applicationContext.xml。 问题1: 1和2有什么区别?不同的方法都相同吗? 问题2: 我在Spring论坛上问了一些问题。他提到的有关合并的内容如下 如果您需要/想要使用内部连接池进行hibernate,我会建议您这样做,只需配置一个支持连接池的数据源并将其注入到sessionfactorybean中即可。 hibernate的内部连接池= 这

  • 问题内容: 术语“ jta-datasource”和“ resource-local datasource”对我来说有点模糊。我放下我的理解(或假设),我想让你说一下我是对还是错。 可以将同一数据库称为jta数据源或资源本地数据源 如果提到为jta-datasource,那么Bean /其他类可以使用JTA。因此,UserTransaction接口 如果数据源是本地资源,则无法使用CMT / BM

  • 问题内容: 我想在下面提到的springApplicationContext.xml中保留密码编码 有什么办法可以做到这一点? 目前,我已经使用property-placeholder配置了所有属性,如下所示,但是原始密码仍在我的database.properties中打开 springApplicationContext.xml 但实际价值存在于我的 我想要以下内容: springApplica

  • 我在连接数据源时遇到问题。 此错误显示API在API中运行此函数时: 2019-08-20 23:30:04.672错误20424---[nio-8080-exec-4]O.A.C.C.C.[.[.[/].[dispatcherServlet]:路径为[]的上下文中servlet[dispatcherServlet]的servlet.Service()引发异常[处理程序调度失败;嵌套异常为java

  • 尝试启动Spring应用程序时出现以下错误

  • 问题内容: 好的,我是第500位用户问这个问题,我读了很多答案,但仍然没有运气。 父模块pom包含: 子模块有,我使用运行我的webapp模块。 定义标准的调度程序模块: 我在下有文件,但是启动失败: 怎么了?文档和所有人都说Spring MVC将搜索XX-servlet.xml,其中XX是servlet的名称。为什么要搜索? 问题答案: 有自己的上下文,所有servlet和过滤器都共享它。默认情