Это 20-й день моего участия в ноябрьском испытании обновлений. Узнайте подробности события:Вызов последнего обновления 2021 г.
Flywayway - это плагин управления базой данных, так что все сценарии базы данных контролируются в IDE (идее, Eclipse и т. Д.), чтобы следы версий можно записать.
Здесь следует отметить, что при использовании пролетного пути запрещается изменять структуру таблицы базы данных в программе управления базой данных.
1. Springboot интегрирует flyway
1.pom.xml
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
<version>6.4.4</version>
</dependency>
2.application.yml
spring:
flyway: # flyway 数据库 DDL 版本控制
enabled: true # 正式环境才开启
clean-disabled: true # 禁用数据库清理
encoding: UTF-8
locations: classpath:/db #脚本存放地址
table: flyway_schema_history_systemportal #flyway记录表,记录了当前执行到了那个脚本
baseline-version: 1 # 基线版本默认开始序号 默认为 1
baseline-on-migrate: true # 针对非空数据库是否默认调用基线版本,为空的话默认会调用基线版本
placeholder-replacement: false
placeholders: # 定义 afterMigrateError.sql 要清理的元数据表表名
flyway-table: ${spring.flyway.table}
Во время первой инициализации могут возникать следующие ошибки, а также необходимо добавить placeholder-replace: false.
3. Структура скрипта
При определении сценария инициализации рекомендуется использовать номер версии V+(номер)+__(двойное подчеркивание)+название компании+init, например V1__systemportal_init.sql арендодателя.
При определении версии изменения номер версии будет V+(номер)+__(двойное подчеркивание)+операция+имя таблицы, например, у арендодателя будет V2__update_table.sql.
Среди них V1__systemportal_init.sql (скрипт инициализации) представляет собой всю структуру таблиц и данные проекта и экспортируется следующим образом.
V2__update_table.sql - измененная версия (скрипт изменения структуры таблицы, если изменений нет, то существует только скрипт инициализации) Содержание следующее.
ALTER TABLE "systemportal"."task_plan"
ALTER COLUMN "update_user" TYPE varchar(255) USING "update_user"::varchar(255);
После выполнения вышеуказанных операций удалите все данные таблицы в исходной базе данных (не забудьте сделать резервную копию), а затем запустите проект для создания таблицы в базе данных.
2. Принцип
При использовании flyway будет создана таблица записей для записи имени скрипта, который выполняется в данный момент. (Поле script - это скрипт в БД, который был выполнен) В соответствии с вышеизложенным во время инициализации генерируются следующие записи.
При повторном запуске будет запрашивать, есть ли в таблице скрипты выше версии V2, и если есть скрипты, то выполнять эти скрипты, если ничего нет, то не выполнять.
Три встроенных кварца
При интеграции кварца требуется таблица запросов, но поскольку при использовании пролетного пути нет структуры таблицы, ее необходимо обработать.
1. Закомментируйте содержимое в @PostConstruct
2. Добавить конфигурацию
Добавьте следующую конфигурацию (выполнить после запуска)
@Component
public class RuntimeConfig implements ApplicationListener<ContextRefreshedEvent> {
@Autowired
private Scheduler scheduler;
@Autowired
private QrtzJobDao qrtzJobDao;
@Override
public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
this.initJob();
}
public void initJob() {
QrtzJobVO qrtzJobVO = new QrtzJobVO();
List<QrtzJobVO> scheduleJobList = qrtzJobDao.queryQrtzJobAll(qrtzJobVO);
scheduleJobList.forEach(scheduleJob -> {
CronTrigger cronTrigger = ScheduleUtils.getCronTrigger(this.scheduler, scheduleJob.getJobId());
if (cronTrigger == null) {
ScheduleUtils.createScheduleJob(this.scheduler, scheduleJob);
} else {
ScheduleUtils.updateScheduleJob(this.scheduler, scheduleJob);
}
});
}
}