Flywaydb集成

时间:2014-04-10 07:54:23

标签: java maven flyway

我正在尝试将Flyway迁移整合到我的项目中(portlet - maven build)但我无法弄清楚如何执行所有必要的步骤 - 请你看看我到目前为止做了什么并建议我是什么不见了,拜托?我阅读了文档和一些示例,但没有完整的教程如何从头开始设置:

这就是我所做的:

1)在pon.xml中添加了依赖项

<dependency>
    <groupId>com.googlecode.flyway</groupId>
    <artifactId>flyway-core</artifactId>
    <version>2.3</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.21</version>
</dependency>

2)在src / main / resources / db / migration中添加了sql脚本V1_Create_table_messages.sql

CREATE TABLE messages (
    id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    msgid VARCHAR(64) UNIQUE,
    sender VARCHAR(255),
    receiver VARCHAR(255),
);

3)使用以下方法创建迁移类:

 public void migrate() {
        try {       
            Flyway flyway = new Flyway();

            flyway.setDataSource("jdbc:mysql://localhost:3306/myDb", "user", "password");

            flyway.setInitOnMigrate(true);
            flyway.migrate();
        } catch (Exception e) {
            System.out.println("Error while migrate database");
        }
    }

当我打电话给这个方法时,我得到了这个:(编辑!)

com.googlecode.flyway.core.api.FlywayException: Unable to obtain Jdbc connection from DataSource
Caused by: java.sql.SQLException: Invalid authorization specification message from server: "Access denied for user 'nobody'@'localhost' (using password: NO)"

setDataSource中的所有信息都已正确设置。我知道它可能有些愚蠢,但我觉得我错过了在这里设置Flyway的一些重要步骤......

感谢您的任何提示!

EDIT2: 在pom.xml中添加了MySQL连接器依赖

解决:

问题是在url中缺少mysql依赖项和额外的斜杠...

1 个答案:

答案 0 :(得分:0)

检查您的migrate()方法。您将数据源设置了两次。

flyway.setDataSource("jdbc:mysql://localhost:3306/myDb", "user", "password");

flyway.setDataSource(dataSource);

我猜第二个setDataSource()会覆盖正确的第一个数据源。

修改

使用MySQL Java Connector而不是H2的正确POM定义是:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.30</version>
</dependency>