Сравнивая две ветви ( 6.2.x & 7.1.x ), похоже, что он был заменен на setIsolationLevel(int)
.Это интерфейсный метод isSerial()
все еще там, но его реализация изменилась:
@Override
public boolean isSerial() {
if (_isolationLevel == BackgroundTaskConstants.ISOLATION_LEVEL_NOT_ISOLATED) {
return false;
}
return true;
}
Вы можете просто вызвать setIsolationLevel(BackgroundTaskConstants.ISOLATION_LEVEL_NOT_ISOLATED)
вместо setSerial(false)
.Поскольку значение ISOLATION_LEVEL_NOT_ISOLATED
равно 4
, любое значение, кроме 4
, будет isSerial()
возвращать true
.Или, если вы действительно хотите, вы можете просто перезаписать метод isSerial()
и позволить ему либо вернуть true
, либо false
.
Однако вы должны взглянуть на BackgroundTaskLockHelperUtil
реализация .Особенно это метод getLockKey(BackgroundTask)
:
protected static String getLockKey(BackgroundTask backgroundTask) {
BackgroundTaskExecutor backgroundTaskExecutor =
BackgroundTaskExecutorRegistryUtil.getBackgroundTaskExecutor(
backgroundTask.getTaskExecutorClassName());
String lockKey = StringPool.BLANK;
if (backgroundTaskExecutor.getIsolationLevel() ==
BackgroundTaskConstants.ISOLATION_LEVEL_CLASS) {
lockKey = backgroundTask.getTaskExecutorClassName();
}
else if (backgroundTaskExecutor.getIsolationLevel() ==
BackgroundTaskConstants.ISOLATION_LEVEL_COMPANY) {
lockKey =
backgroundTask.getTaskExecutorClassName() + StringPool.POUND +
backgroundTask.getCompanyId();
}
else if (backgroundTaskExecutor.getIsolationLevel() ==
BackgroundTaskConstants.ISOLATION_LEVEL_CUSTOM) {
lockKey = backgroundTaskExecutor.generateLockKey(backgroundTask);
}
else if (backgroundTaskExecutor.getIsolationLevel() ==
BackgroundTaskConstants.ISOLATION_LEVEL_GROUP) {
lockKey =
backgroundTask.getTaskExecutorClassName() + StringPool.POUND +
backgroundTask.getGroupId();
}
else if (backgroundTaskExecutor.getIsolationLevel() ==
BackgroundTaskConstants.ISOLATION_LEVEL_TASK_NAME) {
lockKey =
backgroundTask.getTaskExecutorClassName() + StringPool.POUND +
backgroundTask.getName();
}
else {
lockKey =
backgroundTask.getTaskExecutorClassName() + StringPool.POUND +
backgroundTaskExecutor.getIsolationLevel();
}
return lockKey;
}
Таким образом, в зависимости от вашего «уровня изоляции» будет получена конкретная блокировка, поэтому вам следует сначала рассмотреть, хотите ли вы, чтобы несколько экземпляров вашего BackgroundTaskExecutor выполнялись параллельно (isSerial()
должен вернуть false
) или нет.Если нет, подумайте, какой уровень изоляции подходит лучше всего, и используйте его.