ApplicationContext.xml с datasource или hibernate.cfg.xml. Разница?

Хотите устранить некоторую путаницу. У меня есть applicationContext.xml.

Вопрос 1: В чем разница между 1 и 2. Разве оба они одинаковы с другим подходом?

Вопрос 2:

Я задал вопрос на форуме Spring относительно некоторой проблемы. О том, что он упомянул о пуле, ниже

если вам нужно/хотите использовать внутренний пул соединений для спящего режима Я бы советовал против этого и просто сконфигурировал источник данных, который поддерживает объединение пулов и вводит это в ваш sessionfactorybean.

объединение внутренних соединений для hibernate = это число 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>

Ответ 1

Ответ 1:

Оба подхода одинаковы. По умолчанию, hibernate читает конфигурацию из classpath:hibernate.cfg.xml для сборки SessionFactory. LocalSessionFactoryBean просто позволяет вам настроить конфигурацию спящего режима внутри applicationContext.xml вместо hibernate.cfg.xml.

Если одно и то же свойство указано в обоих файлах, в зависимости от свойства, оно будет иметь эффект привыкания, или свойства, указанные в applicationContext.xml, будут иметь более высокий приоритет, так что эти значения в hibernate.cfg.xml будут игнорироваться.

Для метода 1 annotatedClasses и hibernateProperties должен обладать аддиктивным эффектом с соответствующими значениями в hibernate.cfg.xml. Данные DBCPSouruce в applicationContext.xml должны приводить к игнорированию связанных свойств в hibernate.cfg.xml.

Ответ 2:

Для метода 2, если вы не указываете какие-либо свойства LocalSessionFactoryBean, все конфигурации спящего режима определяются hibernate.cfg.xml. Если пул соединений не настроен в hibernate.cfg.xml, hibernate собственный алгоритм объединения пулов используется по умолчанию, который является довольно рудиментарным и не предназначен для использования в производственной системе, или даже для тестирования производительности.

Ответ 2

Если вы хотите создать сеанс factory, вы получите тот же результат с обоими подходами. Я не думаю, что можно сделать больше, чем другие.

По-моему, вы использовали бы метод hibernate.cfg.xml, если вы не используете Spring. Когда JUnit тестирует ваши DAO, например. Не нужно создавать контекст приложения Spring, чтобы ваши тесты выполнялись быстрее.

Однако, когда вы используете Spring, я думаю, что хорошо держать ваш источник данных отделенным от сеанса factory. Вы используете Spring для инъекции зависимости, правильно? Почему бы не использовать Spring, чтобы дать вашей сессии factory, что ей нужно?