即使数据库已关闭,Spring应该会启动

时间:2015-07-31 07:49:33

标签: java spring hibernate orm spring-data

我有一个弹簧应用程序,它使用DB进行最少的操作。 我有一个要求,我的应用程序应该在没有DB的情况下运行(或者当db关闭时).Below是我的数据源配置。

<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>

我在google中找到了page,说在spring数据源配置中使用“initialize:false”。但我使用的是“ComboPooledDataSource”数据源,它没有这个属性。还有其他方法可以实现这个?

1 个答案:

答案 0 :(得分:1)

应用程序服务层可以使用两个DAO层(文件系统和数据库)运行,因此当数据库关闭时,您将捕获连接获取异常并切换到文件系统。

有两个事实来源将难以保持两个不同数据源之间的一致性,特别是如果一个资源不可用。

当两个资源都可用时,您可以使用XADisk和Bitronix进行XADataSource和JTA事务管理。