我正在尝试将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依赖项和额外的斜杠...
答案 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>