2013-11-09 5 views
0

Я хочу настроить спящий режим весной ... для этого я использую следующие конфигурации в spring-servlet.xmlИнтеграция спящего режима с пружиной; Избегайте дублирование параметров соединения

<context:property-placeholder location="classpath:resources/database.properties" /> 
<bean class="org.springframework.jdbc.datasource.DriverManagerDataSource" id="dataSource"> 
     <property name="driverClassName" value="${database.driver}"></property> 
     <property name="url" value="${database.url}"></property> 
     <property name="username" value="${database.user}"></property> 
     <property name="password" value="${database.password}"></property> 
     </bean> 

Вот подаст database.properties

database.driver=com.mysql.jdbc.Driver 
database.url=jdbc:mysql://10.2.5.142:3306/testdb 
database.user=root 
database.password= 
hibernate.dialect=org.hibernate.dialect.MySQLDialect 
hibernate.show_sql=true 
hibernate.hbm2ddl.auto=update 

Теперь я хочу использовать только один экземпляр SessionFactory; для этого я включил следующий код в моем классе DAO

SessionFactory sessionFactory = new Configuration().configure("/resources/hibernate.cfg.xml").buildSessionFactory(); 

я должен иметь, чтобы установить связанные параметры базы данных в двух местах

(1) database.properties 
(2) hibernate.cfg.xml 

Есть ли способ, с помощью которого я могу положить эти значения только в одном месте

+0

Какую версию Spring и Hibernate вы используете? –

+0

весна3.2.4 и hibernate3 –

+0

что вы хотите сделать. Я думаю, вы должны использовать Spring для создания экземпляра SessionFactory, а не по коду – ChandlerSong

ответ

0

Вы можете использовать LocalSessionFactoryBean установить свойства и придать DataSource вместо hibernate.cfg.xml см http://docs.spring.io/spring/docs/3.2.5.RELEASE/spring-framework-reference/htmlsingle/#orm-hibernate

Вот пример из Spring Reference:

<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
    <property name="driverClassName" value="org.hsqldb.jdbcDriver"/> 
    <property name="url" value="jdbc:hsqldb:hsql://localhost:9001"/> 
    <property name="username" value="sa"/> 
    <property name="password" value=""/> 
    </bean> 

    <bean id="mySessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 
    <property name="dataSource" ref="myDataSource"/> 
    <property name="mappingResources"> 
     <list> 
     <value>product.hbm.xml</value> 
     </list> 
    </property> 
    <property name="hibernateProperties"> 
     <value> 
     hibernate.dialect=org.hibernate.dialect.HSQLDialect 
     </value> 
    </property> 
    </bean> 
1

Вам не нужен файл hibernate.cfg.xml вообще. Вы можете настроить SessionFactory как фасоль Spring.

здесь пример:

живучесть-hibernate.xml

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:p="http://www.springframework.org/schema/p" 
     xmlns:aop="http://www.springframework.org/schema/aop" 
     xmlns:tx="http://www.springframework.org/schema/tx" 
     xmlns:util="http://www.springframework.org/schema/util" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
     http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd 
     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd 
     http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> 

    <context:property-placeholder location="classpath:resources/database.properties"/> 

    <bean id="dataSource" 
      class="org.apache.commons.dbcp.BasicDataSource" 
      destroy-method="close" 
      p:driverClassName="${database.driver}" 
      p:url="${database.url}" 
      p:username="${database.user}" 
      p:password="${database.password}" /> 

    <bean id="sessionFactory" 
      class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean" 
      p:dataSource-ref="dataSource" 
      p:packagesToScan="package.with.your.entities"> 
     <property name="hibernateProperties"> 
      <props> 
       <prop key="hibernate.dialect">${hibernate.dialect}</prop> 
       <prop key="hibernate.show_sql">${hibernate.show_sql}</prop> 
      </props> 
     </property> 
    </bean> 

    <tx:annotation-driven transaction-manager="txnManager"/> 

    <bean id="txnManager" 
     class="org.springframework.orm.hibernate4.HibernateTransactionManager" 
     p:sessionFactory-ref="sessionFactory"/> 

</beans> 

Вы можете импортировать конфигурации в spring-servlet.xml с помощью импорта тегов.

<import resource="persistence-hibernate.xml"/> 

А затем вставьте свой SessionFactory вместо того, чтобы создавать его самостоятельно.

@Repository 
@Transactional 
public class YourDaoImpl implements YourDao { 

    @Autowired 
    private SessionFactory sessionFactory; 

    ... 
} 
+0

хочу использовать только один экземпляр SessionFactory. Я устанавливаю значение sessionFactory с использованием указанного кода в случае, если это нуль .. для этого мне нужно иметь файл hibernate.cfg.xml .. без этого, как я могу инициализировать объект sessionFactory ? –

+0

Когда вы объявляете свой SessionFactory как Spring Bean, он будет Singleton (Single instance). Когда вам это нужно, просто используйте @Autowired. –

+0

Я сделал то же самое, что и ваш код показывает ... когда я создаю объект sessionFactory public static, он дает мне null value.and я инициализирую его, написав sessionFactory = new Configuration(). Configure ("/ resources/hibernate.cfg.xml"). .buildSessionFactory(); Мне нужно создать экземпляр, потому что я хочу, чтобы только один статический sessionFactory использовал все приложение –

Смежные вопросы