0

通常,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>

然后在道中,

<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 在应用程序启动时连接到数据库。我有一个管理员(负责在启动后打开数据库连接)和一个在远程机器上工作的管理小程序,它与 Web 应用程序 servlet 通信。如果身份验证正常,应打开 Web 应用程序的数据库连接。

我怎样才能实现这个目标?

4

2 回答 2

0

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

于 2011-12-15T06:37:04.897 回答
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);
于 2012-01-03T17:16:11.310 回答