web-dev-qa-db-ja.com

dataContextまたはhibernate.cfg.xmlを含むapplicationContext.xml。差?

混乱を解消したい。 applicationContext.xmlがあります。

質問1: 1と2の違いは何ですか?両方とも異なるアプローチで同じですか?

質問2:

Springフォーラムで問題について質問しました。彼がプーリングについて言及したことは以下のとおりです

休止状態に内部接続プーリングを使用する必要がある場合は、それに対してアドバイスし、単純に接続プーリングをサポートするデータソースを構成して、セッションファクトリにそれを注入します。

hibernateの内部接続プーリング=これは以下の番号2です。正しい?

接続プーリングをサポートするデータソースを設定するだけで、セッションファクトリにそれを注入します=これは以下の番号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>
22
Pirzada

回答1:

両方のアプローチは同じです。デフォルトでは、hibernateはclasspath:hibernate.cfg.xmlから構成を読み取り、SessionFactoryをビルドします。 LocalSessionFactoryBeanを使用すると、applicationContext.xmlの代わりにhibernate.cfg.xml内で休止状態の構成をセットアップできます。

Propertyに応じて両方のファイルに同じプロパティが指定されている場合、依存関係が発生するか、applicationContext.xmlで指定されたプロパティが優先され、hibernate.cfg.xmlの値が無視されます。

方法1の場合、annotatedClassesおよびhibernatePropertiesには、hibernate.cfg.xmlの対応する値で中毒性の効果があります。 applicationContext.xmlのDBCP dataSouruceにより、hibernate.cfg.xmlの関連プロパティが無視されます。

回答2:

方法2では、LocalSessionFactoryBeanのプロパティを指定しない場合、すべての休止状態の構成はhibernate.cfg.xmlで指定されます。 hibernate.cfg.xmlで接続プールが設定されていない場合、 デフォルトで休止状態の独自の接続プーリングアルゴリズムが使用されます は非常に初歩的なものであり、実稼働システムでの使用やパフォーマンステストのためのものでもありません。

10
Ken Chan

セッションファクトリを構築する場合は、両方のアプローチで同じ結果が得られます。他の人よりも多くのことができるとは思いません。

私の意見では、Springを使用していないときにhibernate.cfg.xmlアプローチを使用します。たとえば、JUnitがDAOをテストする場合。 Springアプリケーションコンテキストを構築する必要がないため、テストの実行が高速になります。

ただし、Springを使用している場合、データソースをセッションファクトリから分離しておくのは良いことだと思います。依存関係の注入にSpringを使用していますよね?セッションファクトリに必要なものを提供するためにスプリングを使用しないのはなぜですか?

4
Alban