在Web应用程序启动后初始化sessionfactory

时间:2011-12-13 09:05:09

标签: spring sessionfactory

一般来说,hibernate sessionfactory是在spring配置文件(例如spring-dao.xml)中创建的,如;

<bean id="mySessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation">
<value>file:src/hibernate.cfg.xml</value>
</property>
</bean>

然后在dao,

<bean id="myProductDao" class="product.ProductDaoImpl">
<property name="sessionFactory" ref="mySessionFactory"/>
</bean>

在web.xml中,我们将配置文件(spring-dao.xml)放在contextConfigLocation中;

<context-param>  
        <param-name>contextConfigLocation</param-name>  
        <param-value>/WEB-INF/spring-dao.xml</param-value>  
</context-param>

启动应用程序时,数据源将注入所有dao bean。

这是摘要,我的问题是什么,我不希望spring在应用程序启动时连接到数据库。我有一个admin(负责在启动后打开数据库连接)和一个在远程机器上工作的管理applet,它与web app servlet通信。如果验证正常,则应打开Web应用程序的数据库连接。

我如何实现这一目标?

2 个答案:

答案 0 :(得分:0)

lazy-init="true" bean上指定mySessionFactory,当您的代码第一次尝试访问它时,即当验证成功时,它将被初始化。

答案 1 :(得分:0)

解决方案并不难;最初创建一个没有参数的数据源,然后在管理员凭据确定之后设置值。

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
  <!-- Connection properties. All should be ommitted. -->
</bean>


// code below is called after admin login
    DataSource dS = context.getBean("dataSource");
    dS.setUrl("...");
    dS.setUserPass(adminPass);