【发布时间】:2015-10-22 19:39:33
【问题描述】:
我有一个 spring 应用程序,它对 DB 执行最少的操作。 而且我要求我的应用程序应该在没有 DB 的情况下运行(或者当 db 关闭时)。下面是我的数据源配置。
<bean id="dt31DataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close" depends-on="systemPropertyInitializer"
p:driverClass="${dt31.driver_class}"
p:jdbcUrl="${dt31.url}"
p:user="${dt31.username}"
p:password="${dt31.password}"
p:idleConnectionTestPeriod="1000"
p:maxPoolSize="4"
p:minPoolSize="2"
p:maxIdleTime="2000"
p:unreturnedConnectionTimeout="600"
p:contextClassLoaderSource="library"
p:privilegeSpawnedThreads="true"
p:initialize=false
/>
<bean id="dt31SessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dt31DataSource"/>
<property name="packagesToScan" value="com.t22.dt31"/>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
${dt31.dialect}
</prop>
<prop key="hibernate.show_sql">
false
</prop>
<prop key="hibernate.hbm2ddl.auto">
update
</prop>
</props>
</property>
</bean>
我在谷歌找到了一个page,说在spring数据源配置中使用“initialize:false”。但是我使用的是没有这个属性的“ComboPooledDataSource”数据源。还有其他方法可以实现吗?
【问题讨论】:
-
Spring 应用程序将启动,即使 DB 已关闭,因为您的登录页面没有实例化任何在 DB 中有表的模型类。所以你可以显示一个页面,如果这是你想要的,但我不明白目的。
-
Borg,感谢您的及时评论。当我的应用程序最初加载时,它正在尝试创建实习生需要数据源配置的会话工厂 bean。我认为 ComboPooledDataSource bean 正在加载阶段准备与数据库的连接,并且由于数据库关闭,它失败了。抛出错误,例如:未能获取资源,com.mchange.v2.resourcepool.BasicResourcePool@5ff26372 正在中断所有等待资源检查的线程。
-
是的,因为您的组合事物中有连接超时、空闲测试期。我建议删除它。对于初学者,最好使用简单的数据源。其次,请问您为什么会有这样的要求,这样做有什么好处?我很好奇..
-
我会测试你的建议。意思是,当我给出我的要求时,我的应用程序将主要使用文件系统,而很少使用 DB。在启动时,我的应用程序将运行一些仅处理文件的迁移脚本系统,一旦应用程序启动,如果用户在 UI 中执行了一些操作,那么它将处理 DB。所以在启动时,有时我的 DB 可能已关闭或可能不存在。
标签: java spring hibernate orm spring-data