Spring Batch BATCH_JOB_SEQ 出現死鎖問題


1、數據庫分析死鎖sql問題

  插入BATCH_JOB_SEQ默認值或從BATCH_JOB_SEQ中刪除,其中ID< some_number

  使用默認的MapJobRegistry,以及默認的作業存儲庫或指定JobRepositoryFactoryBean.對於用於與Spring Batch數據庫交互的數據源,我們使用標准Microsoft SQL Server SQLServerDriver嘗試了DriverManagerDataSource或DBCP2池BasicDataSource.我可以上傳更具體的配置文件,但在我的測試中,只要我使用SQL Server和標准的Spring配置就會出現問題. 在我的調查中,我認為問題是由於默認的增量器類org.springframework.jdbc.support.incrementer.SqlServerMaxValueIncrementer如何將作業和步驟實例ID與SQL Server數據庫表的構造方式相結合. SqlServerMaxValueIncrementer中的代碼是同步的,因此如果我們在同一Java實例中運行所有作業,這將不是問題.

  如果我們在DB2數據庫中實現Spring Batch元數據,我們就沒有問題. SQL Server實現使用實際表,DB2實現使用序列對象.

  問題解決:

配置JobRepository的databaseType和isolationLevelForCreate屬性.以下是我在SQL Server 2008中使用的設置: 

<bean id="jobRepository"
    class="org.springframework.batch.core.repository.support.JobRepositoryFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="transactionManager" ref="transactionManager" />
    <property name="databaseType" value="SQLSERVER" />
    <property name="isolationLevelForCreate" value="ISOLATION_REPEATABLE_READ" />
</bean>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM