inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 부트 - 핵심 원리와 활용

@Value 검증 적용 관련 질문드립니다.

해결된 질문

197

이영주

작성한 질문수 2

0

@Value를 적용한 필드에 @Min(1) 과 같은 검증을 적용할 수는 없을까요?

아래 소스코드처럼 작성해 MyDataSourceValueConfig를 빈으로 등록하면 @Validated가 동작해 검증될 줄 알았는데 적용되지 않습니다. 원인이 무엇인지 궁금합니다...

(코드 내 $가 포함되면 이상하게 동작해,

$를 #로 변경하였습니다.)

package hello.datasource;

import hello.datasource.MyDataSource;
import jakarta.validation.constraints.Min;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.validation.annotation.Validated;

import java.time.Duration;
import java.util.List;

@Slf4j
@Configuration
@Validated
public class MyDataSourceValueConfig {

    @Value(“#{my.datasource.url}")
    private String url;
    @Value(“#{my.datasource.username}")
    private String username;
    @Value(“#{my.datasource.password}")
    private String password;
    @Value(“#{my.datasource.etc.max-connection}")
    @Min(1)
    private int maxConnection;
    @Value(“#{my.datasource.etc.timeout}")
    private Duration timeout;
    @Value(“#{my.datasource.etc.options}")
    private List<String> options;

    @Bean
    @Validated
    public MyDataSource myDataSource1() {
        return new MyDataSource(url, username, password, maxConnection, timeout, options);
    }

    @Bean
    public MyDataSource myDataSource2(
        @Value(“#{my.datasource.url}") String url,
        @Value(“#{my.datasource.username}") String username,
        @Value(“#{my.datasource.password}") String password,
        @Value(“#{my.datasource.etc.max-connection}") int maxConnection,
        @Value(“#{my.datasource.etc.timeout}") Duration timeout,
        @Value(“#{my.datasource.etc.options}") List<String> options
    ) {
        return new MyDataSource(url, username, password, maxConnection, timeout, options);
    }
}


spring spring-boot prometheus grafana

답변 1

0

김영한

안녕하세요. 이영주님

@Value를 사용한 필드는 검증되지 않습니다.

@ConfigurationProperties 를 사용하셔야 검증이 됩니다.

감사합니다.

 

0

이영주

아~ 그렇군요! @Value에 대해 더 공부해야겠네요 😅

답변 감사합니다! 🙇‍♀

추가로 @Value를 사용한 필드는 왜 검증이 안되는건지 궁금한데 어떤 식으로 찾아봐야할 지 힌트를 주실 수 있을까요...?

1

김영한

네 영주님

정확히는 필드 검증 자체를 @ConfigurationProperties에서만 지원합니다.

@Value가 과거부터 존재했고, 이후에 @ConfigurationProperties가 추가되면서 새로운 기능들이 이쪽에 많이 들어오게 되었습니다.

감사합니다.

1

이영주

아! 필드 검증 자체를 @ConfigurationProperties만 지원하는군요...!

몰랐습니다 ㅎㅎ 알려주셔서 정말 감사합니다!

보안이 엄격한 데이터

0

73

1

MyProperties 자체를 클라이언트 코드에서 사용

1

43

1

http://localhost:8080/actuator/prometheus

0

85

3

jar 추가에대한 질문드려도될까요?

0

64

1

build.gradle bom link 변경

0

65

2

@Counted 초기화

0

47

1

@Validated를 적용해도 빈 검증이 안되는 경우에 대한 조치 공유..

0

101

2

springboot에서 actuator없이 micrometer를 사용할수 있나요?

0

67

1

@Configuration 질문드립니다.

0

84

2

[공유] 터미널 말고 IDE 에서 jar 실행하기

0

101

1

localhost:8080/hello-servlet 404오류

0

123

2

내장톰캣2 서블릿 톰켓 실행이 안됩니다

1

154

2

최대 Tomcat 스레드 수를 확인하는 지표

0

160

1

mac m2에서 startup.sh 실행후 아무 반응이 없습니다.

0

94

2

내장 톰캣 실행 오류 관련 질문드립니다.

0

158

1

스프링 발전 과정들도 자세히 알아둬야하나요??

1

127

1

스프링부트 ioc 컨테이너 갯수

0

89

1

404 페이지

0

133

3

actuator 호출시 타임스탬프 질문

0

90

1

순수 라이브러리 사용하기 2 - memory-v1

0

125

1

외부설정 @ConfigurationProperties의 내부 클래스에서 static을 사용하는 이유를 알고 싶습니다.

0

105

1

서블릿 컨테이너 초기화1 강의 관련 질문입니다~

0

93

1

Thread Config Max 패널 설정 변경 질문

0

128

1

스프링 액츄에이터 shutdown 엔드포인트 활성화가 안됩니다.

0

107

1