23

いくつかの混乱を解消したい。私はapplicationContext.xmlを持っています。

質問 1: 1 と 2 の違いは何ですか。どちらも同じでアプローチが異なりますか?

質問2:

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

休止状態に内部接続プーリングを使用する必要がある/使用したい場合は、それに対してアドバイスし、接続プーリングをサポートするデータソースを構成して、それを sessionfactorybean に挿入します。

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

接続プーリングをサポートするデータソースを構成し、それをセッションに注入するだけですfactorybean =これは以下の番号 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>
4

2 に答える 2

10

答え 1:

どちらのアプローチも同じです。デフォルトでは、hibernate はclasspath:hibernate.cfg.xmlbuildから構成を読み取りますSessionFactory。の代わりにLocalSessionFactoryBean内部で休止状態の設定をセットアップできるようにするだけです。applicationContext.xmlhibernate.cfg.xml

両方のファイルで同じプロパティが指定されている場合、プロパティによっては、中毒性の影響があったり、で指定されたプロパティ applicationContext.xmlが優先されて、それらの値 hibernate.cfg.xmlが無視されたりします。

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

答え 2:

方法 2 の場合、 のプロパティを指定しない場合LocalSessionFactoryBean、すべての休止状態の構成はhibernate.cfg.xml. で接続プールが構成されていない場合hibernate.cfg.xmlhibernate 独自の接続プール アルゴリズムがデフォルトで使用されます。

于 2012-09-28T08:09:55.820 に答える
4

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

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

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

于 2012-09-28T06:50:02.380 に答える