ALTER TABLE orders ADD version INT NOT NULL DEFAULT 0;
ALTER TABLE merchandise ADD version INT NOT NULL DEFAULT 0;
@Version
@Column(name = "version")
private Integer version;
OptimisticLockingFailureException
catch (OptimisticLockingFailureException lockingFailureE){
log.error(
"Optimistic lock conflict detected in batch {}...",
(i / BATCH_SIZE)+1
);
DuplicateKeyException,而不執行排程。@EnableSchedulerLock 來開啟,同時,我也建立一個Configuration給ShedLock作設定。@Configuration
// 設定當Server崩潰時,鎖最長占用時間
@EnableSchedulerLock(defaultLockAtMostFor = "1m")
public class ShedLockConfiguration {
@Bean // 設定排程鎖元件,跟TaskScheduler是一樣的概念
public LockProvider lockProvider(DataSource dataSource) {
return new JdbcTemplateLockProvider(
JdbcTemplateLockProvider.Configuration.builder()
.withJdbcTemplate(new JdbcTemplate(dataSource))
.usingDbTime()
.build()
);
}
}
本篇文章出自《每天學Java直到今年結束》Day225,大家可以到我的網站上查看~