봄에 application.properties에서 상대 경로 지정
아래 지정된 대로 Spring boot application의 application.properties 파일에서 상대 경로를 사용하여 파일 리소스를 조회할 수 있는 방법이 있습니까?
spring.datasource.url=jdbc:hsqldb:file:${project.basedir}/db/init
Spring boot을 사용하여 업로드 샘플을 빌드하고 있는데 동일한 문제가 발생하면 프로젝트 루트 경로만 가져오려고 합니다. (예: /sring-boot-upload)
아래 코드가 작동한다는 것을 알게 되었습니다.
upload.dir.location=${user.dir}\\uploadFolder
@membersound 답변은 하드코드된 경로를 두 부분으로 나누는 것일 뿐 속성을 동적으로 해결하는 것은 아닙니다.당신이 원하는 것을 달성하는 방법을 알려줄 수 있지만, 당신은 이해해야 합니다. project.basedir
응용프로그램을 병 또는 전쟁으로 실행할 때.로컬 작업 영역 외부에 소스 코드 구조가 없습니다.
만약 당신이 여전히 테스트를 위해 이것을 하고 싶다면, 그것은 실현 가능하며 당신이 필요로 하는 것은 조작하는 것입니다.PropertySource
가장 간단한 옵션은 다음과 같습니다.
정의ApplicationContextInitializer
그리고 거기에 재산을 설정합니다.다음과 같은 것이 있습니다.
public class MyApplicationContextInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
@Override
public void initialize(ConfigurableApplicationContext appCtx) {
try {
// should be /<path-to-projectBasedir>/build/classes/main/
File pwd = new File(getClass().getResource("/").toURI());
String projectDir = pwd.getParentFile().getParentFile().getParent();
String conf = new File(projectDir, "db/init").getAbsolutePath();
Map<String, Object> props = new HashMap<>();
props.put("spring.datasource.url", conf);
MapPropertySource mapPropertySource = new MapPropertySource("db-props", props);
appCtx.getEnvironment().getPropertySources().addFirst(mapPropertySource);
} catch (URISyntaxException e) {
throw new RuntimeException(e);
}
}}
부팅을 사용 중인 것 같으니 그냥 선언하면 됩니다.context.initializer.classes=com.example.MyApplicationContextInitializer
당신의application.properties
부팅은 시작할 때 이 클래스를 실행합니다.
다시 한 번 주의할 사항:
소스 코드 구조에 따라 다르므로 로컬 작업 공간 외부에서는 작동하지 않습니다.
저는 여기서 Gradle 프로젝트 구조를 가정했습니다.
/build/classes/main
필요한 경우 빌드 도구에 따라 조정합니다.한다면
MyApplicationContextInitializer
에 있습니다.src/test/java
,pwd
될 것이다<projectBasedir>/build/classes/test/
,것은 아니다.<projectBasedir>/build/classes/main/
.
your.basedir=${project.basedir}/db/init
spring.datasource.url=jdbc:hsqldb:file:${your.basedir}
@Value("${your.basedir}")
private String file;
new ClassPathResource(file).getURI().toString()
언급URL : https://stackoverflow.com/questions/36940458/specifying-relative-path-in-application-properties-in-spring
'programing' 카테고리의 다른 글
루비: 보석을 어떻게 쓰나요? (0) | 2023.06.22 |
---|---|
matplotlib를 사용하여 범례 프레임의 테두리 제거 또는 조정 (0) | 2023.06.22 |
Spring Application Builder는 언제 사용합니까? (0) | 2023.06.22 |
.NET에서 소수점, 부동소수점 및 이중점의 차이는 무엇입니까? (0) | 2023.06.02 |
Ruby를 사용하여 문자열이 기본적으로 따옴표의 정수인지 테스트하는 방법 (0) | 2023.06.02 |