diff --git a/credit-tracker.properties b/credit-tracker.properties index 982f795..0ccb297 100644 --- a/credit-tracker.properties +++ b/credit-tracker.properties @@ -69,6 +69,8 @@ ct.monitoring-interval=${MONITORING_INTERVAL:15} ct.update-flags-interval=${UPDATE_FLAGS_INTERVAL:1} ct.days-to-update-flags=${DAYS_TO_UPDATE_FLAGS:30} +ct.db-version=${DB_VERSION:1234} + ct.encoding=windows-1251 #Batch size and global pipeline timeout diff --git a/src/main/java/ru/nbch/credit_tracker/config/settings/CreditTrackerSettings.java b/src/main/java/ru/nbch/credit_tracker/config/settings/CreditTrackerSettings.java index 31c8291..bf73de1 100644 --- a/src/main/java/ru/nbch/credit_tracker/config/settings/CreditTrackerSettings.java +++ b/src/main/java/ru/nbch/credit_tracker/config/settings/CreditTrackerSettings.java @@ -36,4 +36,6 @@ public class CreditTrackerSettings { private Integer batchSize; private Integer timeout; + + private String dbVersion; } diff --git a/src/main/java/ru/nbch/credit_tracker/entities/app/AppVersion.java b/src/main/java/ru/nbch/credit_tracker/entities/app/AppVersion.java new file mode 100644 index 0000000..a3aebda --- /dev/null +++ b/src/main/java/ru/nbch/credit_tracker/entities/app/AppVersion.java @@ -0,0 +1,10 @@ +package ru.nbch.credit_tracker.entities.app; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class AppVersion { + private String dbVersion; +} diff --git a/src/main/java/ru/nbch/credit_tracker/mapper/signal/AppVersionMapper.java b/src/main/java/ru/nbch/credit_tracker/mapper/signal/AppVersionMapper.java new file mode 100644 index 0000000..3ab056a --- /dev/null +++ b/src/main/java/ru/nbch/credit_tracker/mapper/signal/AppVersionMapper.java @@ -0,0 +1,9 @@ +package ru.nbch.credit_tracker.mapper.signal; + +import org.apache.ibatis.annotations.Mapper; +import ru.nbch.credit_tracker.entities.app.AppVersion; + +@Mapper +public interface AppVersionMapper { + AppVersion getAppVersion(); +} diff --git a/src/main/java/ru/nbch/credit_tracker/service/DbVersionValidationService.java b/src/main/java/ru/nbch/credit_tracker/service/DbVersionValidationService.java new file mode 100644 index 0000000..f8cb14c --- /dev/null +++ b/src/main/java/ru/nbch/credit_tracker/service/DbVersionValidationService.java @@ -0,0 +1,54 @@ +package ru.nbch.credit_tracker.service; + +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import ru.nbch.credit_tracker.config.settings.CreditTrackerSettings; +import ru.nbch.credit_tracker.entities.app.AppVersion; +import ru.nbch.credit_tracker.mapper.signal.AppVersionMapper; + +@Service +public class DbVersionValidationService implements InitializingBean { + + private final Logger log = LoggerFactory.getLogger(getClass()); + private final AppVersionMapper appVersionMapper; + private final CreditTrackerSettings settings; + + @Autowired + public DbVersionValidationService(AppVersionMapper appVersionMapper, CreditTrackerSettings settings) { + this.appVersionMapper = appVersionMapper; + this.settings = settings; + } + + @Override + public void afterPropertiesSet() throws Exception { + String expectedDbVersion = settings.getDbVersion(); + + if (StringUtils.isEmpty(expectedDbVersion)) { + log.error("expected database version is not specified in the settings."); + System.exit(1); + } + + log.info("expected DB version: {}", expectedDbVersion); + + AppVersion appVersion = appVersionMapper.getAppVersion(); + if (appVersion == null || StringUtils.isEmpty(appVersion.getDbVersion())) { + log.error("couldn't load version from APP_VERSION database table."); + System.exit(1); + } + + String actualVersion = appVersion.getDbVersion(); + + log.info("actual DB version: {}", actualVersion); + + if (!expectedDbVersion.equals(actualVersion)) { + log.error("expected database version does not match actual database version"); + System.exit(1); + } + + log.info("Database version validation complete: {}", actualVersion); + } +} diff --git a/src/main/resources/mybatis/mapper/signal/AppVersionMapper.xml b/src/main/resources/mybatis/mapper/signal/AppVersionMapper.xml new file mode 100644 index 0000000..35d22b0 --- /dev/null +++ b/src/main/resources/mybatis/mapper/signal/AppVersionMapper.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/sql/v2.21.ddl b/src/main/resources/sql/v2.21.ddl index 738ee03..58e0701 100644 --- a/src/main/resources/sql/v2.21.ddl +++ b/src/main/resources/sql/v2.21.ddl @@ -1,5 +1,5 @@ -CREATE TABLE signals_user_packages ( +CREATE TABLE app_version ( DB_VERSION varchar(12) );