Интеграция с FlywayDB

Я пытаюсь интегрировать миграцию Flyway в свой проект (портлет - сборка maven), но я не могу понять, как выполнить все необходимые шаги - не могли бы вы взглянуть на то, что я сделал до сих пор, и посоветуйте, что мне не хватает, пожалуйста ? Я прочитал документацию и несколько примеров, но нет полного руководства по настройке с нуля:

Вот что я сделал:

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) Добавлен sql-скрипт V1_Create_table_messages.sql в src/main/resources/db/migration

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: добавлена ​​​​зависимость коннектора MySQL в pom.xml

РЕШЕНО:

проблема заключалась в отсутствии зависимости mysql и дополнительной косой черты в URL-адресе...


person Smajl    schedule 10.04.2014    source источник


Ответы (1)


Проверьте свой метод migrate(). Вы устанавливаете источник данных дважды.

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

и

flyway.setDataSource(dataSource);

Я предполагаю, что второй setDataSource() перезаписывает правильный первый источник данных.

ИЗМЕНИТЬ

Правильное определение POM для использования MySQL Java Connector вместо H2 будет следующим:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.30</version>
</dependency>
person Gregor Koukkoullis    schedule 10.04.2014
comment
Верно, я забыл удалить эту строку. Однако проблема все еще есть... Я отредактирую свой вопрос. - person Smajl; 10.04.2014
comment
Я проверил, как я использую Flyway, и он почти такой же, как у вас. Вы уверены, что источник данных доступен? Access denied for user 'nobody'@'localhost' (using password: NO) - person Gregor Koukkoullis; 10.04.2014
comment
Когда я изначально использую JDBC в своем пролете, я использую ту же конфигурацию для работы с моей базой данных, и до сих пор у меня не было проблем... - person Smajl; 10.04.2014
comment
Вы подключаетесь к MySQL или к H2, как предполагает зависимость в вашем POM? Возможно, ваш URL-адрес JDBC должен быть jdbc:h2:myDb? Или ваш POM может содержать mysql-connector-java? - person Gregor Koukkoullis; 10.04.2014
comment
Я подключаюсь к базе данных MySQL на локальном хосте - возможно, зависимость в POM неверна... - person Smajl; 10.04.2014
comment
Код, который вы разместили, отлично работает на моей машине. Должна быть еще проблема со строкой URL-адреса JDBC или с набором DataSource. - person Gregor Koukkoullis; 10.04.2014
comment
Вы были правы... Я создавал URL-адрес с помощью кода, и в URL-адресе была одна лишняя косая черта, которая каким-то образом вызвала проблему... - person Smajl; 10.04.2014