Spring flyway 中的自动装配
Spring autowiring in flyway
如何在实现 org.flywaydb.core.api.migration.JavaMigration
的 class 中注入 Spring bean?
好像是在Flyway 6.0中加入的:This issue好像在说,但是我真的不知道怎么进行。
我也看到 似乎在谈论它,但我希望有一个更短的解决方案(我没有作者所说的关于 JPA 依赖性的要求)。
谢谢
假设您正在使用 Spring 引导:
- 首先,您需要通过将
spring.flyway.enabled
设置为 false
来禁用 flyway 的初始化和触发。这也意味着您必须自己配置 Flyway。
- 用
@Component
. 注释你的 JavaMigrations
classes
- 创建一个实现
CommandLineRunner
的Class,实现运行方法。这个 class 还应该有你的 JavaMigrations
自动连接和你的数据源 url,用户和密码也需要被注入,或者一个 DataSource
对象。
在 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();
}
}
如何在实现 org.flywaydb.core.api.migration.JavaMigration
的 class 中注入 Spring bean?
好像是在Flyway 6.0中加入的:This issue好像在说,但是我真的不知道怎么进行。
我也看到
谢谢
假设您正在使用 Spring 引导:
- 首先,您需要通过将
spring.flyway.enabled
设置为false
来禁用 flyway 的初始化和触发。这也意味着您必须自己配置 Flyway。 - 用
@Component
. 注释你的 - 创建一个实现
CommandLineRunner
的Class,实现运行方法。这个 class 还应该有你的JavaMigrations
自动连接和你的数据源 url,用户和密码也需要被注入,或者一个DataSource
对象。 在
run
方法中将您的JavaMigrations
对象收集到一个数组中,并以编程方式将它们注册到 Flyway,然后 运行 迁移:JavaMigrations migrations[] = {myJavaMigration}; Flyway flyway = Flyway.configure() .dataSource(url, user, password) .javaMigrations(migrations) .load(); flyway.migrate();
JavaMigrations
classes
完整实施:
@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();
}
}