liquibase игнорирует уже выполненные изменения
Я пытаюсь использовать liquibase (3.5.5) из существующей базы данных (на MySQL).
Я использовал команду generateChangeLog для создания файла db.changelog.xml.
C: /liquibase-3.5.5/liquibase.bat --driver = com.mysql.jdbc.Driver ^ --classpath = C: /Libraries/mysql-connector-java-5.1.37-bin.jar ^ --changeLogFile = db.changelog.xml ^ --url = "jdbc: mysql: // vbalder / izalerting" ^ --username =* ^ --password = * ^ generateChangeLog
результат: Liquibase 'generateChangeLog' Successful
Сгенерированный файл db.changelog.xml содержит changeSets с автором BGADEYNE (generated)
и идентификаторы, которым предшествует 1533645947580-
, например 1533645947580-1
- добавленной
logicalFilePath="db.changelog.xml"
в тег databaseChangeLog Я использовал команду changelogSync для создания и заполнения таблиц DATABASECHANGELOG и DATABASECHANGELOGLOCK. Они содержат строки для каждого набора изменений.
C: /liquibase-3.5.5/liquibase --driver = com.mysql.jdbc.Driver ^ --classpath = C: /Libraries/mysql-connector-java-5.1.37-bin.jar ^ --changeLogFile = db.changelog.xml ^ --url = "jdbc: mysql: // vbalder / izalerting" ^ --username = izalerting ^ --password = alfa ^ changelogSync
результат: Liquibase 'changelogSync' Successful
- Создан компонент CDI для выполнения db.changelog.xml при запуске приложения.
Добавлена maven зависимость:
<dependency>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-cdi</artifactId>
<version>3.5.5</version>
</dependency>
Добавлен компонент CLI:
@Dependent
public class LiquibaseProducer {
@Resource(name="java:/izalerting")
private DataSource dbConnection;
@Produces @LiquibaseType
public CDILiquibaseConfig createConfig() {
CDILiquibaseConfig config = new CDILiquibaseConfig();
config.setChangeLog("be/uzgent/iz/alerting/liquibase/db.changelog.xml");
config.setContexts("non-legacy");
return config;
}
@Produces @LiquibaseType
public DataSource createDataSource() throws SQLException {
return dbConnection;
}
@Produces @LiquibaseType
public ResourceAccessor create() {
return new ClassLoaderResourceAccessor(getClass().getClassLoader());
}
}
При развертывании приложения в WildFly я вижу это
2018-08-07 15:07:09,234 ОШИБКА [stderr] (служебная нить MSC 1-4) ИНФОРМАЦИЯ 7/7/18 15:07: liquibase.integration.cdi.CDILiquibase: загрузка Liquibase 3.5.4 2018-08-07 15:07:09,285 ОШИБКА [stderr] (служебный поток MSC 1-4) ИНФОРМАЦИЯ 7/7/18 15:07: liquibase: Успешно получена блокировка журнала изменений 2018-08-07 15:07:09,781 ОШИБКА [stderr] (Служебная нить MSC 1-4) ИНФОРМАЦИЯ 7/7/18 15:07: liquibase: чтение из PUBLIC.DATABASECHANGELOG 2018-08-07 15:07:09,814 ОШИБКА [stderr] (служебная нить MSC 1-4) SEVERE 8/7/18 15:07: liquibase: db.changelog.xml: db.changelog.xml::1533645947580-1::BGADEYNE (сгенерировано): Изменить набор db.changelog.xml:: 1533645947580-1:: BGADEYNE (сгенерировано) не удалось. Ошибка: таблица "ALERTRESULT" уже существует; Оператор SQL: 2018-08-07 15:07:09,815 ОШИБКА [stderr] (служебный поток MSC 1-4) CREATE TABLE PUBLIC.alertresult (triggerid VARCHAR(255) NOT NULL, приложение VARCHAR(40) NOT NULL, Resultid INT NOT NULL, тема VARCHAR(255), контент CLOB, contenturl CLOB, время выполнения TIMESTAMP, html BOOLEAN DEFAULT TRUE NOT NULL, alerttlevel VARCHAR(20) ПО УМОЛЧАНИЮ 'INFO' NOT NULL, закрываемая BOOLEAN DEFAULT TRUE NOT NULL, экранная ширина INT, screenheight INT, screenheight 42101-173] [Сбой SQL: CREATE TABLE PUBLIC.alertresult (triggerid VARCHAR(255) NOT NULL, приложение VARCHAR(40) NOT NULL, результат INT INT NULL, субъект VARCHAR(255), контент CLOB, contenturl CLOB, время выполнения TIMESTAMP, html BOOLEAN DEFAULT TRUE NOT NULL, уровень оповещения VARCHAR(20) DEFAULT 'INFO' NOT NULL, закрываемый BOOLEAN DEFAULT TRUE NOT NULL, ширина экрана INT, screenheight INT)] 2018-08-07 15:07:09,816 ОШИБКА [stderr] (служба MSC нить 1-4) ИНФОРМАЦИЯ 7/7/18 15:07: liquibase: db.changelog.xml::1533645947580-1::BGADEYNE (генерируется): успешно выпущенный канал Ge Log Lock
Таблица DATABASECHANGELOG содержит строку для каждого набора изменений.
+------------------+-----------------------+-------------------+-----------+
| # ID | AUTHOR | FILENAME | EXECTYPE |
+------------------+-----------------------+-------------------+-----------+
| 1533645947580-1 | BGADEYNE (generated) | db.changelog.xml | EXECUTED |
| 1533645947580-2 | BGADEYNE (generated) | db.changelog.xml | EXECUTED |
| 1533645947580-3 | BGADEYNE (generated) | db.changelog.xml | EXECUTED |
| 1533645947580-4 | BGADEYNE (generated) | db.changelog.xml | EXECUTED |
| 1533645947580-5 | BGADEYNE (generated) | db.changelog.xml | EXECUTED |
| 1533645947580-6 | BGADEYNE (generated) | db.changelog.xml | EXECUTED |
| 1533645947580-7 | BGADEYNE (generated) | db.changelog.xml | EXECUTED |
| 1533645947580-8 | BGADEYNE (generated) | db.changelog.xml | EXECUTED |
| 1533645947580-9 | BGADEYNE (generated) | db.changelog.xml | EXECUTED |
| 1533645947580-10 | BGADEYNE (generated) | db.changelog.xml | EXECUTED |
| 1533645947580-11 | BGADEYNE (generated) | db.changelog.xml | EXECUTED |
| 1533645947580-12 | BGADEYNE (generated) | db.changelog.xml | EXECUTED |
| 1533645947580-13 | BGADEYNE (generated) | db.changelog.xml | EXECUTED |
| 1533645947580-14 | BGADEYNE (generated) | db.changelog.xml | EXECUTED |
| 1533645947580-15 | BGADEYNE (generated) | db.changelog.xml | EXECUTED |
| 1533645947580-16 | BGADEYNE (generated) | db.changelog.xml | EXECUTED |
| 1533645947580-17 | BGADEYNE (generated) | db.changelog.xml | EXECUTED |
| 1533645947580-18 | BGADEYNE (generated) | db.changelog.xml | EXECUTED |
| 1533645947580-19 | BGADEYNE (generated) | db.changelog.xml | EXECUTED |
| 1533645947580-20 | BGADEYNE (generated) | db.changelog.xml | EXECUTED |
+------------------+-----------------------+-------------------+-----------+
Кто-нибудь знает, что я здесь делаю неправильно?
1 ответ
Вместо
@Resource(name="java:/izalerting")
Мне нужно было использовать
@Resource(lookup="java:/izalerting")
на Wildfly 9