IT

다른 특성에 의존하는 스프링 특성

itgroup 2023. 10. 10. 20:15
반응형

다른 특성에 의존하는 스프링 특성

봄콩의 @Value를 통해 참조할 수 있는 속성을 가지고 싶습니다. 다른 속성에 따라서만 생성할 수 있습니다.특히 저는 디렉토리의 파일 시스템 위치를 설명하는 속성을 가지고 있습니다.

myDir=/path/to/mydir

그리고 관례적으로 그 디렉토리에는 항상 내 파일이라고 불리는 파일이 있습니다.txt.

이제 저는 제 원두 안에 @Value 주석을 통해 디렉토리와 파일 모두에 액세스하고 싶습니다.때로는 Strings로, 때로는 java.io 으로 액세스하고 싶습니다.파일 및 때로는 org.springframework.core.io 으로 사용하기도 합니다.파일 시스템 리소스(그런데 이 리소스는 처음부터 매우 잘 작동합니다!).그러나 요구에 따라 Strings를 연결하는 것은 선택 사항이 아닙니다.

그래서 제가 당연히 할 수 있는 일은 둘 다 선언하는 것이지만 결국엔

myDir=/path/to/mydir
myFile/path/to/mydir/myfile.txt

난 그걸 피하고 싶습니다.

그래서 속성을 가져와 새로운 PropertySource로 추가하는 @Configuration 클래스를 고안했습니다.

@Autowired
private ConfigurableEnvironment environment;

@Value("${myDir}")
private void addCompleteFilenameAsProperty(Path myDir) {
    Path absoluteFilePath = myDir.resolve("myfile.txt");

    Map<String, Object> props = new HashMap<>();
    props.put("myFile, absoluteFilePath.toString());
    environment.getPropertySources().addFirst(new MapPropertySource("additional", props));
}

보시다시피, 저는 java.nio.file로 변환할 수 있는 Property Editor를 만들기도 했습니다..

문제는, 어떤 이유에서인지, 이것이 (IDE에서) "내 기계에서 작동하지만, 의도된 대상 환경에서 실행되지 않는다는 것입니다.자, 알겠습니다.

java.lang.IllegalArgumentException: Could not resolve placeholder 'myFile' in string value "${myFile}"

스프링은 특성을 조합할 수 있습니다.

myDir=/path/to/mydir 
myFile=${myDir}/myfile.txt

기본값을 사용할 수도 있습니다.myFile처음에 속성에 저장합니다.

속성 파일

myDir=/path/to/mydir

수업 중:

@Value("#{myFile:${myDir}/myfile.txt}")
private String myFileName;

스프링 식을 사용하여 속성을 참조할 수 있습니다.

예를 들어, 그것은.

query-parm=QueryParam1=
query-value=MyParamaterValue

이제 스프링빈에 묶으면서.

 @Configuration
    public class MyConfig {
    @Value("${query-param}${query-value}")
    private String queryString;
 }

위의 코드는 변수 queryString에 QueryParam1=MyParamaterValue를 주입합니다.

언급URL : https://stackoverflow.com/questions/36136874/spring-properties-that-depend-on-other-properties

반응형