一般来说,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应用程序的数据库连接。
我如何实现这一目标?
答案 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);