主要问题 - 这可能看起来像一个基本的飞路问题,我可能(不知何故)在我的研究中错过了这个但是 - 是否有可能在尝试时访问应用程序服务(弹簧配置)使用flyway迁移数据?下面几个细节 -
其他详情 -
将上述内容纳入我们的要求 - 我们在几个表中添加了几个新字段,作为发布的一部分,我们希望用数据填充这些列。这要求我们(或飞路)执行以下算法 -
P.S。 - 我知道,添加依赖于同一个表中其他列的列不符合第3个法线等。但是由于这篇文章之外的原因,它是必需的。
技术堆栈 -
我尝试的几个例子如下 -
我的飞路移民课程如下。
public class R__MigrationYeah implements SpringJdbcMigration {
@Value("${mypath.subpath}") // this does not work !
private String someStringIwannaUse;
@Inject // this does not work either (even with Autowired or Const. injection)!
private MyService myService;
}
我看过一些帖子/博客有关于如何配置flyways MigrationResolver或ConfigurationAware等的复杂细节 - 并且不确定他们是否解决了这个问题(即使他们这样做了 - 只是为了快速编写这些工作很多迁移脚本 - 这是唯一的方法吗?)。
最后 - 我知道我遗漏了一些东西,因为如果我们必须编写flyway Java代码而不能通过Spring使用任何现有的应用程序类,那么它与编写独立的迁移没有什么不同项目(因此除了提供数据库连接之外,没有飞路增值) - 我确信情况并非如此。
任何帮助都会很棒!
答案 0 :(得分:0)
在飞路迁移中无法使用依赖注入。
flyway的下一个版本将支持spring bean的依赖注入。有关详细信息,请参阅Github issue。在Stack Overflow上是当前版本的解决方法。
答案 1 :(得分:-2)
我认为你想要比我们设计的更动态地使用flyway。 基本上它只适用于DB-Schema,你可以做任何sql可以做的事情,但从那以后 它以一种你不想要的可重复,可靠,循序渐进的方式工作 其中的任何真实商业数据。 Flyway使用您提供的静态脚本 不能让它们随时间动态变化(它会通过校验和不匹配来抗议)或“API-Calls”。
答案 2 :(得分:-2)
对于那种东西,你可以创建自己的Spring Boot应用程序,并通过它的Java API使用Flyway。沿着这条路线。
@SpringBootApplication
@Import(ServiceConfig.class)
public class FlyWayApp implements CommandLineRunner {
public static void main(String[] args) {
SpringApplication.run(FlyWayApp.class, args);
}
@Value("${mypath.subpath}")
private String someStringIwannaUse;
@Autowired
private MyService myService;
@Override
public void run(String... args) throws Exception {
// Create the Flyway instance
Flyway flyway = new Flyway();
// Point it to the database
flyway.setDataSource("jdbc:h2:file:./target/foobar", "sa", null);
//Fetch data and create migration scripts needed by Flyway
myService.createMigrationScripts();
// Start the migration
flyway.migrate();
}
}