Как заменить DynamicPropertyRegistry в качестве параметра метода компонента?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как заменить DynamicPropertyRegistry в качестве параметра метода компонента?

Сообщение Anonymous »

У меня есть приложение Spring-Boot версии 3.2.5, которое успешно работает с использованием тестовых контейнеров. Я обновляю его до Spring-Boot v3.4.1.
Я создаю тестовый контейнер 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));
}
Когда я обновляюсь до Spring-Boot 3.4.1, он больше не запускается, и я получаю сообщение об ошибке при внедрении компонентов DynamicPropertyRegistry. Это описано в примечаниях к выпуску.

Поддержка определения динамических свойств путем внедрения 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);
};
}
Значение Spring.flyway.command используется позже следующим образом:

Код: Выделить всё

  @Autowired
public MyFlywayMigrationStrategy(
@Value("${spring.flyway.command:validate}") String command,
ApplicationContext applicationContext) {
this.command = command;
this.applicationContext = applicationContext;
}
Но введенное значение в MyFlywayMigrationStrategy — это не то, что я установил в DynamicPropertyRegistrar. Что я неправильно понимаю в DynamicPropertyRegistrar или примечаниях к выпуску?


Подробнее здесь: https://stackoverflow.com/questions/793 ... -parameter
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»