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

以编程方式设置Flyway占位符

彭雨华
2023-03-14

我有一个非常简单的Spring Boot应用程序,它使用Flyway进行数据库迁移。我想在迁移开始之前使用Spring配置类以编程方式设置Flyway占位符。

@Configuration
public class FlywayConfiguration {

  @Autowired
  private Flyway flyway;

  @Value("${threedsserver.db.tableSpaces.data:pg_default}")
  private String tablespaceData;

  @Value("${threedsserver.db.tableSpaces.index:pg_default}")
  private String tablespaceIndex;

  @Value("${threedsserver.db.tableSpaces.lob:pg_default}")
  private String tablespaceLob;

  @PostConstruct
  void setFlywayPlaceholders() {
    Map<String, String> placeholders = flyway.getPlaceholders();
    placeholders.put("tablespace_data", tablespaceData);
    placeholders.put("tablespace_index", tablespaceIndex);
    placeholders.put("tablespace_lob", tablespaceLob);
    flyway.setPlaceholders(placeholders);
  }
}
No value provided for placeholder expressions: ${tablespace_data}

我假设迁移在配置文件被处理之前就开始了。怎么解决这个?我不想使用application.properties设置flyway占位符,但所有其他属性(如spring.flyway.userspring.flyway.password等)都希望由application.properties设置。

共有1个答案

倪子晋
2023-03-14

您可以使用FlywayConfigurationCustomizer,如下所示:

import org.flywaydb.core.api.configuration.FluentConfiguration
import org.springframework.boot.autoconfigure.flyway.FlywayConfigurationCustomizer
import org.springframework.context.annotation.Configuration

@Configuration
class CustomFlywayConfiguration : FlywayConfigurationCustomizer {
    override fun customize(configuration: FluentConfiguration?) {
        configuration?.placeholders?.put("tablespace_index", "some_value")
    }
}

我这里有spring boot flyway集成的示例

 类似资料:
  • 我试图在我的应用程序中使用模拟位置进行测试。要接收位置更新,我使用最新的Android开发者留档在这里:https://developer.android.com/training/location/receive-location-updates 本教程使用FusedLocationProviderClient和locationClient。requestLocationUpdates(crea

  • 我是飞航的新手。飞行路线很好,很友好。 我想在V1__Initial_structure.sql文件中为我的表创建并给出架构名称。我不知道在哪里为占位符赋值。我已经以编程方式配置了Flyway。我的sql文件包含, 创建架构 ${schemaName} 创建表${SchemaName}. brand(brand_codeID,brand_namevarchar(50)唯一不为空,活动char(1)

  • 我找不到夸克。飞道。在我的Quarkus应用程序中工作的占位符。我在申请表中定义了这一行。属性文件 在我的sql文件中,我有一行 我得到的错误是 以下是我尝试过的事情: 升级到Quarkus 1.13.6。期末考试 尝试设置 如集成测试所示:https://github.com/quarkusio/quarkus/tree/main/integration-tests/flyway 谢谢你马修

  • 问题内容: 我正在尝试在应用程序启动期间进行设置,但似乎为时已晚,非无头模式已经启动: 除此之外,还有另一种方法让无头为真吗?我不希望在控制台上进行任何配置。 问题答案: 我正在使用一个类,该类在常量(和其他静态代码)中静态加载JFreeChart的不同部分。 将静态加载块移到类的顶部解决了我的问题。 这不起作用: 通过将Java移动到类的顶部,让Java尽早执行该静态块! 当考虑它时,这是完全有

  • 有没有办法以编程方式自定义这些TextInputLayout属性: textColorHint 彩色口音 颜色控制正常 颜色控制已激活 文本选择句柄 我知道如何使用主题属性对它们进行样式化,但是我正在处理的项目动态地加载颜色信息,据我所知,在运行时无法更改主题/样式值。

  • 问题内容: 有没有一种方法可以通过编程设置属性?似乎没有方法。 明确地说,我不是在谈论视图/窗口小部件样式!我在谈论以下内容: 问题答案: setTypeface是属性textStyle。 正如 Shankar V 添加的那样,要保留以前设置的字体属性,可以使用: