스프링 부트: 프리픽스가 다른 여러 유사한 Configuration Properties
Spring Boot을 사용하고 있으며, 두 가지 매우 유사한 서비스를 사용하고 있습니다.application.yml.
설정은 대략 다음과 같습니다.
serviceA.url=abc.com
serviceA.port=80
serviceB.url=def.com
serviceB.port=8080
주석달린 클래스 1개를 만들 수 있습니까?@ConfigurationProperties주입 지점에 프레픽스를 설정할 수 있습니까?
예.
@Component
@ConfigurationProperties
public class ServiceProperties {
private String url;
private String port;
// Getters & Setters
}
서비스 자체에서 다음을 수행합니다.
public class ServiceA {
@Autowired
@SomeFancyAnnotationToSetPrefix(prefix="serviceA")
private ServiceProperties serviceAProperties;
// ....
}
유감스럽게도 문서에서는 이러한 기능에 대해 아무것도 찾을 수 없었습니다.도와주셔서 정말 감사합니다!
나는 네가 노력한 것과 거의 같은 것을 성취했다.먼저 각 속성을 콩으로 등록합니다.
@Bean
@ConfigurationProperties(prefix = "serviceA")
public ServiceProperties serviceAProperties() {
return new ServiceProperties ();
}
@Bean
@ConfigurationProperties(prefix = "serviceB")
public ServiceProperties serviceBProperties() {
return new ServiceProperties ();
}
서비스 시(또는 속성을 사용하는 장소)에는 @Qualifier를 입력하고 자동 배선되는 속성을 지정합니다.
public class ServiceA {
@Autowired
@Qualifier("serviceAProperties")
private ServiceProperties serviceAProperties;
}
Spring Boot의 @ConfigurationProperties에 대한 이 투고 가이드에 따라 주석 없이 간단한 클래스를 만들 수 있습니다.
public class ServiceProperties {
private String url;
private String port;
// Getters & Setters
}
그런 다음 @Bean 주석을 사용하여 @Configuration 클래스를 만듭니다.
@Configuration
@PropertySource("classpath:name_properties_file.properties")
public class ConfigProperties {
@Bean
@ConfigurationProperties(prefix = "serviceA")
public ServiceProperties serviceA() {
return new ServiceProperties ();
}
@Bean
@ConfigurationProperties(prefix = "serviceB")
public ServiceProperties serviceB(){
return new ServiceProperties ();
}
}
마지막으로 다음과 같은 속성을 얻을 수 있습니다.
@SpringBootApplication
public class Application implements CommandLineRunner {
@Autowired
private ConfigProperties configProperties ;
private void watheverMethod() {
// For ServiceA properties
System.out.println(configProperties.serviceA().getUrl());
// For ServiceB properties
System.out.println(configProperties.serviceB().getPort());
}
}
Javvanos 예는 JavaBean Validation을 제외하고 완전히 동작했습니다.
다음 속성 중 하나에 @NotNull 주석을 달았습니다.
public class ServiceProperties {
@NotNull
private String url;
private String port;
// Getters & Setters
}
그 결과 응용 프로그램 부팅에 실패하고 다음 오류 메시지가 표시됩니다.
***************************
APPLICATION FAILED TO START
***************************
Description:
Binding to target ch.sbb.hop.commons.infrastructure.hadoop.spark.SparkJobDeployerConfig@730d2164 failed:
Property: url
Value: null
Reason: may not be null
Action:
Update your application's configuration
주석을 제거하면 응용 프로그램이 올바른 속성 바인딩으로 시작됩니다.결론적으로 JavaBean Validation이 올바르게 초기화되지 않은 것은 구성방식의 프록시가 없기 때문일 수 있습니다.
@ConfigurationProperties anotation에는 프리픽스 설정을 위한 필드가 있습니다.다음은 예를 제시하겠습니다.
@Component
@ConfigurationProperties(prefix = "b2gconfig")
public class B2GConfigBean {
private String account;
public String getAccount() {
return account;
}
public void setAccount(String account) {
this.account = account;
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
private String key;
}
그리고 application.properties 파일:
언급URL : https://stackoverflow.com/questions/49422952/spring-boot-multiple-similar-configurationproperties-with-different-prefixes
'source' 카테고리의 다른 글
| Oracle의 두 타임스탬프 간 차이 계산(밀리초) (0) | 2023.03.11 |
|---|---|
| 비즈니스 논리: 데이터베이스 또는 애플리케이션 계층 (0) | 2023.03.11 |
| AngularJS에서 쿼리 파라미터를 읽는 가장 간결한 방법은 무엇입니까? (0) | 2023.03.11 |
| Python에서 두 개의 json 문자열을 병합하는 방법은 무엇입니까? (0) | 2023.03.11 |
| 오브젝트 속성 정렬 및 JSON.stringify (0) | 2023.03.11 |