当前位置: 首页 > 知识库问答 >
问题:

Flyway DB迁移-如何访问应用程序服务(已配置Spring)

白弘伟
2023-03-14

主要问题--这看起来像是一个基本的flyway问题,我可能(不知为什么)在我的研究中错过了这个问题,但是--当尝试使用flyway迁移数据时,是否可以访问applications services(spring配置的)?下面的一些细节-

其他详细信息-

  • 我知道我们不能注入spring数据服务等(从这个SO问题中了解到)。我从数据访问的角度理解了这一点。
  • 但是在使用flyway时,我们是否可以不使用(通过注入)任何其他应用程序服务(我搜索了示例--但没有运气,在flyway文档中也没有给出详细信息)
  • 假设我们不能使用任何Spring服务(我找到了一些解决方法),我们是否可以访问application.properties/.yml中声明的属性(这似乎也不可能)。

把上面的内容放在我们的需求的上下文中--我们在几个表中添加了几个新的字段,作为发行版的一部分,我们希望用数据填充这些列。这就需要我们(或flyway)执行以下算法--

  • 从第一个表中获取数据。
  • 使用每行中的一些数据,通过API调用查找更多数据。
  • API的URL是特定于环境的(因此是上面的第三点)。
  • 将从API返回的数据更新到新添加的列中。
  • 对下一个表重复上述步骤。

附注。-我知道,添加依赖于同一表中其他列的列不符合第3标准等,但出于本帖子之外的原因,这是必需的。

技术堆栈-

  1. Spring boot 1.3.x
  2. Flyway 4.0.3
  3. 使用Java迁移
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使用任何现有的应用程序类,那么这与编写一个独立的迁移项目没有什么区别(因此flyway除了提供一个DB连接之外没有任何价值)--我确信情况不可能是这样的。

任何帮助都会很好!

共有1个答案

盖斌
2023-03-14

在flyway迁移中不可能使用依赖注入。

flyway的下一个版本将支持spring bean的依赖注入。更多详情请参阅Github问题。堆栈溢出是针对当前可用版本的解决方法。

 类似资料:
  • 我正在探索将java web应用程序移动到Azure应用程序服务的可能性。应用程序on prem在启动时读取属性文件。 是否有可能将属性文件传递或放置到应用服务?如果没有,建议将此类遗留应用程序移动到Azure应用服务?

  • 需要将Azure资源(PaaS)从一个位置(北欧)移动到另一个位置(西欧)。 是否可以使用Azure运营模式Pipeline, IaC?有什么障碍或挑战吗? Azure资源: 应用程序服务 应用程序服务计划 应用程序洞察 可用性测试 数据库(PaaS) 现有: 订阅:A 地点:北欧 目标: 订阅:B 地点:西欧

  • 从我的控制器中,我使用 但是我不知道如何从服务中访问它(我想我的服务类不应该扩展)。 我是否应该像这样将所需的参数映射到我的服务注册中: 或者类似的东西?如何从服务访问应用程序参数? 这个问题看起来是一样的,但我实际上回答了它(控制器的参数),我说的是从服务访问。

  • 我在Unix盒子上安装了ActiveMQ Artemis服务器。我能够创建一个Artemis broker实例,该实例为我提供到运行在上的web控制台的链接。

  • 我已在单独的Weblogic域中成功配置了SAML 2.0身份提供程序 我们在另一个域的Weblogic中部署了一个ADF应用程序,该应用程序具有非SAML基于表单的身份验证(ReadOnlySQLAuthenticator用于验证凭据) 我想将第二个域配置为服务提供者(以使现有应用程序能够使用身份提供者登录)。 我做了以下工作: 配置SAML 2.0 Identity Asserter 在服务器

  • 我已经通过creat-react-app创建了一个前端应用程序。 命令“npm run start”可以创建一个webpack-dev-server,并为我的 前端应用程序提供开发服务。问题来了: 我的前端应用程序必须从我之前创建的节点服务器请求一些api。 默认情况下create-react-app在端口3000上启动webpack-dev-server 我的节点服务器在端口3001上启动 直接