liquibase会忽略已经执行的changeSets

时间:2018-08-07 13:22:59

标签: cdi liquibase wildfly-9

我正在尝试使用现有数据库(在MySQL上)中的liquibase(3.5.5)。

  1. 我已经使用了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文件包含具有作者BGADEYNE (generated)和ID(由1533645947580-开头)的changeSet。例如1533645947580-1

  1. 向数据库ChangeLog标记中添加了logicalFilePath="db.changelog.xml"
  2. 我使用了changelogSync命令来创建和填充DATABASECHANGELOG和DATABASECHANGELOGLOCK表。它们确实包含每个changeSet的行。

    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

  1. 创建了一个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());
    }
}
  1. 将应用程序部署到WildFly时,我可以看到

    2018-08-07 15:07:09,234错误[stderr](MSC服务线程1-4)信息8/7/18 3:07 PM:liquibase.integration.cdi.CDILiquibase:正在启动Liquibase 3.5.4 2018-08-07 15:07:09,285错误[stderr](MSC服务线程1-4)信息8/7/18 3:07 PM:liquibase:成功获取更改日志锁定 2018-08-07 15:07:09,781错误[stderr](MSC服务线程1-4)信息8/7/18 3:07 PM:liquibase:从PUBLIC.DATABASECHANGELOG读取 2018-08-07 15:07:09,814错误[stderr](MSC服务线程1-4)严重8/7/18 3:07 PM: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)创建表PUBLIC.alertresult(triggerid VARCHAR(255)NOT NULL,应用程序VARCHAR(40)NOT NULL,resultid INT NOT NULL,主题VARCHAR(255),内容CLOB,contenturl CLOB,executetime TIMESTAMP,html BOOLEAN DEFAULT TRUE NOT NULL,警报级别VARCHAR(20)DEFAULT'INFO'NOT NULL,可关闭的BOOLEAN DEFAULT TRUE NOT NULL,screenwidth INT,screenheight INT)[42101-173 ] [失败的SQL:CREATE TABLE PUBLIC.alertresult(triggerid VARCHAR(255)NOT NULL,应用程序VARCHAR(40)NOT NULL,resultid INT NOT NULL,主题VARCHAR(255),content CLOB,contenturl CLOB,executetime TIMESTAMP,html BOOLEAN DEFAULT是否NOT NULL,警报级别VARCHAR(20)DEFAULT'INFO'否NULL,可关闭的布尔默认值TRUE NOT NULL,屏幕宽度INT,屏幕高度INT)] 2018-08-07 15:07:09,816错误[stderr](MSC服务线程1-4)信息8/7/18 3:07 PM:liquibase:db.changelog.xml :: 1533645947580-1 :: BGADEYNE(已生成):成功释放更改日志锁定

DATABASECHANGELOG表包含每个changeSet的一行。

+------------------+-----------------------+-------------------+-----------+
|       # 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 个答案:

答案 0 :(得分:0)

代替

@Resource(name="java:/izalerting")

我需要使用

@Resource(lookup="java:/izalerting")

在野蝇9上