applicationContext.xml с источником данных или hibernate.cfg.xml. Разница?
Хочу прояснить ситуацию. У меня есть applicationContext.xml.
Вопрос 1: В чем разница между 1 и 2. Являются ли они одинаковыми с разным подходом?
Вопрос 2:
Я задал вопрос на весеннем форуме относительно некоторой проблемы. Ниже он упомянул о пуле
если вам нужно / вы хотите использовать внутренний пул соединений для режима гибернации, я бы посоветовал против него и просто сконфигурировал источник данных, который поддерживает пул соединений, и вставил его в ваш сеанс.
внутренний пул соединений для спящего режима = это номер 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 ответа
Ответ 1:
Оба подхода одинаковы. По умолчанию Hibernate считывает конфигурацию с classpath:hibernate.cfg.xml
строить SessionFactory
, LocalSessionFactoryBean
просто позволяет настроить конфигурацию гибернации внутри applicationContext.xml
вместо hibernate.cfg.xml
,
Если в обоих файлах указано одно и то же свойство, в зависимости от свойства оно будет вызывать привыкание или свойства, указанные в applicationContext.xml
будет иметь более высокий приоритет, так что эти значения в hibernate.cfg.xml
будут игнорироваться
Для метода 1 annotatedClasses
а также hibernateProperties
должен иметь эффект привыкания с соответствующими значениями в hibernate.cfg.xml
, Источник данных DBCP в applicationContext.xml
должны вызывать связанные свойства в hibernate.cfg.xml
Быть игнорированным.
Ответ 2:
Для метода 2, если вы не указали какие-либо свойства LocalSessionFactoryBean
все конфигурации гибернации определяются hibernate.cfg.xml
, Если нет настроенного пула соединений в hibernate.cfg.xml
По умолчанию используется собственный алгоритм пула соединений hibernate, который довольно прост и не предназначен для использования в производственной системе или даже для тестирования производительности.
Если вам нужно построить фабрику сессий, вы получите один и тот же результат с обоими подходами. Я не думаю, что один может сделать больше, чем другой.
На мой взгляд, вы бы использовали подход hibernate.cfg.xml, когда вы не используете Spring. Например, при тестировании ваших DAO. Отсутствие необходимости создавать контекст приложения Spring делает ваши тесты более быстрыми.
Тем не менее, когда вы используете Spring, я думаю, что было бы хорошо держать ваш источник данных отделенным от фабрики сессий. Вы используете Spring для внедрения зависимостей, верно? Почему бы не использовать spring, чтобы дать вашей фабрике сессий то, что ей нужно?