混乱を解消したい。 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>
回答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
で接続プールが設定されていない場合、 デフォルトで休止状態の独自の接続プーリングアルゴリズムが使用されます は非常に初歩的なものであり、実稼働システムでの使用やパフォーマンステストのためのものでもありません。
セッションファクトリを構築する場合は、両方のアプローチで同じ結果が得られます。他の人よりも多くのことができるとは思いません。
私の意見では、Springを使用していないときにhibernate.cfg.xmlアプローチを使用します。たとえば、JUnitがDAOをテストする場合。 Springアプリケーションコンテキストを構築する必要がないため、テストの実行が高速になります。
ただし、Springを使用している場合、データソースをセッションファクトリから分離しておくのは良いことだと思います。依存関係の注入にSpringを使用していますよね?セッションファクトリに必要なものを提供するためにスプリングを使用しないのはなぜですか?