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, чтобы дать вашей фабрике сессий то, что ей нужно?

Другие вопросы по тегам