Я создаю тестовый контейнер postgres следующим образом. Он также устанавливает свойство Spring.flyway.command, которое будет использоваться позже.
Код: Выделить всё
@Bean
@RestartScope
@ServiceConnection
public PostgreSQLContainer postgresContainer(DynamicPropertyRegistry properties) {
properties.add("spring.flyway.command", () -> MyFlywayMigrationStrategy.MIGRATE);
return new PostgreSQLContainer(
DockerImageName.parse(PostgresInitializer.POSTGRES_IMAGE));
}
Поддержка определения динамических свойств путем внедрения DynamicPropertyRegistry устарела, и попытка сделать это теперь по умолчанию завершается неудачно. Вместо внедрения DynamicPropertyRegistry реализуйте отдельный метод @Bean, который возвращает DynamicPropertyRegistrar. Этот отдельный метод bean-компонента должен внедрить контейнер, из которого будут получены значения свойств. Это решает некоторые проблемы жизненного цикла контейнера и гарантирует, что контейнер, из которого было получено значение свойства, будет запущен до использования свойства.
I' Я попробовал следовать инструкциям в примечаниях к выпуску и получил следующее:
Код: Выделить всё
@Bean
@DependsOn("postgresContainerRegistrar")
@RestartScope
@ServiceConnection
public PostgreSQLContainer postgresContainer() {
return new PostgreSQLContainer(
DockerImageName.parse(PostgresInitializer.POSTGRES_IMAGE));
}
@Bean
public DynamicPropertyRegistrar postgresContainerRegistrar() {
return registry -> {
registry.add("spring.flyway.command", () -> MyFlywayMigrationStrategy.MIGRATE);
};
}
Код: Выделить всё
@Autowired
public MyFlywayMigrationStrategy(
@Value("${spring.flyway.command:validate}") String command,
ApplicationContext applicationContext) {
this.command = command;
this.applicationContext = applicationContext;
}
Подробнее здесь: https://stackoverflow.com/questions/793 ... -parameter
Мобильная версия