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>
