Spring @ConfigurationProperties и поведение области прототипаJAVA

Программисты JAVA общаются здесь
Anonymous
Spring @ConfigurationProperties и поведение области прототипа

Сообщение Anonymous »

Я работаю с Spring Boot, и у меня есть класс, помеченный @ConfigurationProperties для привязки внешних свойств конфигурации. По умолчанию, когда приложение запускается, Spring создает одноэлементный экземпляр этого класса, и этот же экземпляр возвращается для каждого запроса, что является ожидаемым поведением.
Однако, когда я пытаюсь изменить область этого класса для прототипирования, добавив @Scope("prototype") и изменив некоторые свойства в файле application.yml и повторно отправив мой запрос, я заметил, что он не создает новый экземпляр для каждого запроса, как Я ожидал. Вместо этого он по-прежнему возвращает тот же экземпляр, поскольку измененное свойство такое же, как и раньше.

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

@ConfigurationProperties(prefix = "isoft")
@Getter
@Setter
@Validated
public class DataBaseConfigDTO{
private final Map datasource;
private final List maintainers;
private final String manager;

//for triming manager
public DataBaseConfigDTO(Map datasource,
List maintainers,
String manager) {
this(datasource, maintainers, manager.trim(), false);
}

private DataBaseConfigDTO(Map datasource,
List maintainers,
@Email String manager,
boolean idle) {
this.datasource = datasource;
this.maintainers = maintainers;
this.manager = manager;
}
}
Файл application.yml:

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

isoft:
datasource:
driver-class-name: cards.oracle.jdbc.OracleDriver
url: jdbc:oracle:thin:@localhost:1521:testCards
username: 'AMz.cards__'
password: '123.cards.'
hikari:
connection-timeout: 10000
maintainers:
- shahsavariCards
- mohammadiCards
manager: iot@micro.cards

management:
endpoints:
web:
exposure:
include: "*"
Контроллер:

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

@RestController
@RequestMapping(path = "/api/v1/loans", produces = {MediaType.APPLICATION_JSON_VALUE})
@AllArgsConstructor
@Validated
public class LoansController {
private final DataBaseConfigDTO dataBaseConfigDTO;

@GetMapping("/props")
public ResponseEntity getProps() {
return ResponseEntity.ok(dataBaseConfigDTO);
}
}
когда я меняю какое-либо свойство в application.yml, ведьма помещается в репозиторий GitHub, и я вызываю /refresh из привода, а затем вызываю /api/v1 /loans/props он возвращает последнее значение этого свойства и не синхронизируется с последним значением, но когда я меняю свой подход и использую Environment#getProperty, он работает нормально и возвращает последнее значение это свойство.

Подробнее здесь: https://stackoverflow.com/questions/790 ... e-behavior

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