Пружинная электропроводка в пролетном - PullRequest
0 голосов
/ 11 февраля 2020

Как я могу внедрить bean-компонент Spring в классе, который реализует org.flywaydb.core.api.migration.JavaMigration?

Кажется, он был добавлен в Flyway 6.0: Эта проблема , кажется, говорит об этом, но я не действительно не вижу, как действовать.

Я также видел этот ответ , который, кажется, говорит об этом, но я надеялся, что было более короткое решение (у меня нет требование о зависимости JPA, о котором говорит автор).

Спасибо

1 Ответ

0 голосов
/ 11 февраля 2020

Предполагается, что вы используете Spring Boot:

  1. Сначала вам нужно будет отключить инициализацию и запуск пролетного пути, установив для spring.flyway.enabled значение false. Это также означает, что вам придется настраивать Flyway самостоятельно.
  2. Аннотируйте свои JavaMigrations классы с помощью @Component.
  3. Создайте класс, который реализует CommandLineRunner и реализует метод run. Этот класс также должен иметь ваш JavaMigrations автонавод и ваш URL источника данных, пользователя и пароль также должны быть внедрены, или, альтернативно, объект DataSource.
  4. В методе run Ваши JavaMigrations объекты в массив и программно регистрируют их в Flyway, а затем запускают миграцию:

    JavaMigrations migrations[] = {myJavaMigration};
    Flyway flyway = Flyway.configure()
                         .dataSource(url, user, password)
                         .javaMigrations(migrations)
                         .load();
    flyway.migrate();
    

Полная реализация:

@Component
public class MyJavaMigration extends BaseJavaMigration {
...
}

@Component
public class MyFlywayMigration implements CommandLineRunner {

    @Autowired
    private MyJavaMigration myJavaMigration;

    @Autowired
    private DataSource dataSource; 

    @Override
    public void run(String... args) {
      JavaMigrations migrations[] = {myJavaMigration};
      Flyway flyway = Flyway.configure()
                            .dataSource(dataSource)
                            .javaMigrations(migrations)
                            .load();
      flyway.migrate();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...