>  기사  >  Java  >  SpringBoot에서 @ConfigurationProperties를 사용하는 방법

SpringBoot에서 @ConfigurationProperties를 사용하는 방법

王林
王林앞으로
2023-05-19 11:10:061366검색

종속성 추가

먼저 Spring Boot 종속성을 추가해야 합니다.

org.springframework.bootspring-boot-starter-parent

간단한 예

@ConfigurationProperties는 @Configuration과 함께 사용해야 합니다. 일반적으로 다음에서 수행합니다. POJO 구성:

@Data@Configuration@ConfigurationProperties(prefix = "mail")public class ConfigProperties { private String hostName; private int private String from;}

위의 예에서는 mail Properties로 시작하는 모든 속성 파일을 읽습니다. 그리고 이를 Bean의 필드와 일치시킵니다.

#Simple Propertiesmail.hostname=host@mail.commail.port=9000mail.from=mailer@mail.com

Spring의 속성 이름 일치는 다음과 같이 다양한 형식을 지원합니다.

mail.hostNamemail.hostnamemail.host_namemail.host-namemail.HOST_NAME

@Configuration을 사용하지 않으려면 다음과 같이 @EnableConfigurationProperties 주석에서 구성 파일을 수동으로 가져와야 합니다.

@SpringBootApplication@EnableConfigurationProperties(ConfigProperties.class)public class ConfigPropApp { public static void main(String[] args) { SpringApplication.run(ConfigPropApp.class,args) }}

@에서 구성 파일을 지정할 수도 있습니다. ConfigurationPropertiesScan 경로:

@SpringBootApplication@ConfigurationPropertiesScan("com.flydean.config") public class ConfigPropApp { public static void main(String[] args) { SpringApplication.run(ConfigPropApp.class,args) }}

여기서 이 경우 프로그램은 com.flydean.config 패키지의 구성 파일만 찾습니다.

속성 중첩

클래스, 목록, 맵을 중첩할 수 있습니다. 아래 예를 들어 먼저 공통 POJO를 만들어 보겠습니다.

@Datapublic class Credentials { private String authMethod;

그런 다음 중첩된 구성 파일을 만듭니다.

@Data@Configuration@ConfigurationProperties(prefix = "nestmail") public class NestConfigProperties { private String host; private int port; private List , String> extraHeaders; private Credentials credential;}

해당 속성 파일은 다음과 같습니다.

# Nest Simple Propertiesnestmail.hostname=mailer@mail.comnestmail.port=9000nestmail.from=mailer@mail.com# 목록 속성nestmail. defaultRecipients[0]=admin@mail.comnestmail.defaultRecipients[1]=owner@mail.com#Map Propertiesnestmail.additionalHeaders.redelivery=trueenestmail.additionalHeaders.secure=true#Object Propertiesnestmail.credentials.username=johnnestmail.credentials .password= Passwordnestmail.credentials.authMethod=SHA1

@ConfigurationProperties 및 @Bean

@ConfigurationProperties는 다음과 같이 @Bean과 함께 사용할 수도 있습니다.

@Datapublic 클래스 항목 { private String name; private int size;}

방법 보기 사용하려면:

@Data@Configurationpublic class BeanConfigProperties { @Bean @ConfigurationProperties(prefix = "item") public Item item() { return new Item() }}

속성 확인

@ ConfigurationProperties는 속성 유효성 검사를 위한 표준 JSR-303 형식입니다. 예를 들어 보겠습니다.

@Data@Validated@Configuration@ConfigurationProperties(prefix = "mail")public class ConfigProperties { @NotEmpty private String hostName; @Min(1025) @Max(65536) private int port; = "^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,6}$") private String from;}

If 속성이 항소 조건을 충족하지 않으면 다음 예외가 발생할 수 있습니다.

대상 org.springframework.boot.context.properties.bind.BindException에 바인딩: 'mail' 아래의 속성을 com.flydean.config.ConfigProperties에 바인딩하지 못했습니다. $$EnhancerBySpringCGLIB$ $f0f87cb9 실패: 속성: mail.port 값: 0 이유: 최소값은 1025보다 작을 수 없습니다. 속성: mail.hostName 값: null 이유: 비워둘 수 없습니다. 작업: 애플리케이션 구성 업데이트프로세스가 종료 코드 1로 완료되었습니다.

속성 변환

@ConfigurationProperties에서는 여러 속성 변환도 지원합니다. 아래에서는 Duration 및 DataSize를 예로 들어 보겠습니다.

두 개의 Duration 필드를 정의합니다.

@ConfigurationProperties(prefix = "conversion") public class PropertyConversion { private Duration timeInDefaultUnit; private Duration timeInNano ...}

속성 파일에서 다음 두 필드를 정의하세요.

conversion.timeInDefaultUnit=10conversion.timeInNano=9ns

위 속성은 단위를 가질 수 있음을 알 수 있습니다. 선택적 단위는 ns, us, ms, s, m, h 및 d이며 각각 나노초, 마이크로초, 밀리초, 초, 분, 시간 및 일에 해당합니다. 기본 단위는 밀리초입니다. 주석에 단위를 지정할 수도 있습니다.

@DurationUnit(ChronoUnit.DAYS)private Duration timeInDays;

해당 구성 파일은 다음과 같습니다.

conversion.timeInDays=2

사용 방법을 살펴보겠습니다. DataSize:

private DataSize sizeInGB; @DataSizeUnit(DataUnit.TERABYTES)private DataSize sizeInTB;

해당 속성 파일:

conversion.sizeInDefaultUnit=300conversion.sizeInGB=2GBconversion.sizeInTB=4

Datasize는 B를 지원합니다. KB, MB, GB 및 TB.

사용자 정의 변환기

동일한 Spring Boot는 사용자 정의 속성 변환기도 지원합니다. 먼저 POJO 클래스를 정의합니다:

public class Employee { private String name; private double Salary;}

해당 속성 파일:

conversion.employee=john,2000

Converter의 변환 클래스를 구현해야 합니다. 인터페이스 자체:

@Component@ConfigurationPropertiesBindingpublic 클래스 EmployeeConverter는 Converter를 구현합니다. { @Override public Employee Convert(String from) { String[] data = from.split(",") return new Employee(data[0) ], Double.parseDouble(data[1])) }}

위 내용은 SpringBoot에서 @ConfigurationProperties를 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제