해결된 질문
작성
·
148
·
수정됨
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);
}
}
답변 1
0
아~ 그렇군요! @Value에 대해 더 공부해야겠네요 😅
답변 감사합니다! 🙇♀
추가로 @Value를 사용한 필드는 왜 검증이 안되는건지 궁금한데 어떤 식으로 찾아봐야할 지 힌트를 주실 수 있을까요...?