gpt4 book ai didi

从数据库中断中恢复的 Java DAL?

转载 作者:行者123 更新时间:2023-12-04 05:11:43 25 4
gpt4 key购买 nike

我的 DAL 包含通过 Oracle 的 UCP 连接到 Oracle 的 Spring Data Access。这意味着我主要使用 JdbcTemplate。我的服务器的要求是从数据库中断中恢复,更具体地说,如果我们发生中断,我们的服务器显然会抛出许多异常,但是,一旦数据库重新联机,服务器应该再次正常运行。

JdbcTemplate 会与 UCP 一起为我处理这个问题吗?换句话说,JdbcTemplate 会在数据库关闭时抛出异常,然后在数据库恢复后运行(它由 UCP 支持,所以我希望是这种情况)还是我需要做其他事情,比如创建一个新的 UCP例如工厂?

谢谢你的时间。

最佳答案

为了模拟数据库中断,我们的 DBA 在我们的服务器运行时关闭了相关的服务帐户并终止了所有现有连接。然后我们发现,为了他人的利益,我自己的问题的答案是,如果没有正确的配置,JdbcTemplate 将不会自动恢复。

我的初始配置如下:

<bean id="DataSource" class="oracle.ucp.jdbc.PoolDataSourceFactory" factory-method="getPoolDataSource">
<property name="URL" value="${jdbc.url}"/>
<property name="User" value="${jdbc.user}"/>
<property name="Password" value="${jdbc.password}"/>
<property name="ConnectionFactoryClassName" value="oracle.jdbc.pool.OracleDataSource"/>
<property name="ConnectionPoolName" value="FOX"/>
<property name="MinPoolSize" value="1"/>
<property name="MaxPoolSize" value="3"/>
<property name="InitialPoolSize" value="1"/>
</bean>

<bean id="DataTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<constructor-arg ref="DataSource" />
</bean>

不幸的是,在中断的情况下,这会在您的池中留下死连接,因此,我们的服务器没有恢复。我想有许多不同的方法可以解决这个问题,例如,可以通过在看到异常时清除池,但是,设置 ValidateConnectionOnBorrowtrue是一个简单的改变,并产生了预期的效果:
<bean id="DataSource" class="oracle.ucp.jdbc.PoolDataSourceFactory" factory-method="getPoolDataSource">
<property name="URL" value="${jdbc.url}"/>
<property name="User" value="${jdbc.user}"/>
<property name="Password" value="${jdbc.password}"/>
<property name="ConnectionFactoryClassName" value="oracle.jdbc.pool.OracleDataSource"/>
<property name="ConnectionPoolName" value="FOX"/>
<property name="MinPoolSize" value="1"/>
<property name="MaxPoolSize" value="3"/>
<property name="InitialPoolSize" value="1"/>
<property name="ValidateConnectionOnBorrow" value="true"/>
</bean>

<bean id="DataTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<constructor-arg ref="DataSource" />
</bean>

现在我们的池化连接已经过验证,当发生中断时,断开的连接会被处理掉。结果,一旦数据库恢复,我们的服务器就重新上线。

关于从数据库中断中恢复的 Java DAL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14838342/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com