대부분의 구성 정보는 application.properties에 구성되어 있으므로 이 파일도 외부 파일일 수 있나요? 물론 이것은 가능합니다.
먼저 application.preperties에서 속성을 정의합니다:
demo.name = hello.01
컨트롤러에서 사용:
@Value("${demo.name}") private String demoName; @RequestMapping("/test") public String test(){ return this.demoName; }
프로젝트를 jar 패키지에 넣고 java -jar:
java -jar springboot-out-properties-0.0 .1을 사용하여 시작합니다. -SNAPSHOT.jar
이때 읽은 값은 hello.01 입니다.
프로젝트의 application.properties를 복사하여 jar 패키지와 동일한 경로에 넣습니다. 속성 값을 다음과 같이 수정합니다.
demo.name = hello.02
그런 다음 위 명령을 사용하여 다시 시작하고 읽은 값은 hello.02입니다. . 놀랍든 아니든, Spring Boot는 정말 훌륭합니다. jar 패키지는 동일한 경로에서 직접 읽을 수 있습니다.
jar 아래에 새 구성을 만들고 거기에 application.properties를 넣으면 위 명령을 사용하여 식별할 수 있나요? 대답은 '예'입니다.
SpringApplication은 다음 위치에 있는 application.properties 파일의 속성을 로드하고 이를 Spring 환경에 추가합니다.
/config 하위 디렉터리는 현재 디렉터리
classpath 루트 디렉터리
/config 디렉터리 in classpath
현재 디렉터리
conf와 같은 사용자 정의된 디렉터리가 이때 인식되지 않지만 --spring.config.location을 사용하여 경로를 지정할 수 있습니다. 실행 명령은 다음과 같습니다.
java -jar springboot-out-properties-0.0.1-SNAPSHOT.jar--spring.config.location=conf/application.properties
물론 절대 경로를 사용해도 됩니다. 지정하려면:
java - jar springboot-out-properties-0.0.1-SNAPSHOT.jar--spring.config.location=/Users/linxiangxian/Downloads/conf/application.properties
프로젝트에는 몇 가지 구성이 있습니다. 사용할 속성 파일을 사용자 정의합니다. 예를 들어, 데모.properties를 정의합니다.
demo.nickname = hello.10 demo.weixin = springboot
@PropertySource를 사용하여 구성 파일을 지정합니다.
/** * @PropertySource的例子 * <p> */ @Configuration @ConfigurationProperties(prefix = "demo") @PropertySource(value = {"classpath:demo.properties"}) public class DemoProperties { private String nickname; private String weixin; public String getNickname() { return nickname; } public void setNickname(String nickname) { this.nickname = nickname; } public String getWeixin() { return weixin; } public void setWeixin(String weixin) { this.weixin = weixin; } @Override public String toString() { return "DemoProperties{" + "nickname='" + nickname + '\'' + ", weixin='" + weixin + '\'' + '}'; } }
그러면 이제 이 구성 파일에 액세스할 수 있습니다. jar 패키지로 만들고 다음 명령을 실행합니다:
java -jar springboot-out-properties-0.0.1-SNAPSHOT.jar
이때 반환되는 값은 hello.10
demo.properties를 넣습니다. jar 패키지와 동일한 경로로 이동하고, deco.name 값을 hello.11로 수정하고, 위 명령인 Barbie Q를 실행합니다. 결과는 여전히 hello.10입니다. 이는 Spring Boot가 외부에서 사용자 정의 속성 파일을 찾을 수 없음을 나타냅니다. .
그렇다면 이 문제에 대해 우리는 무엇을 할 수 있을까요?
매우 간단합니다. @PropertySource는 다음과 같이 구성할 수 있는 여러 경로의 여러 구성을 지원합니다.
@PropertySource(value = {"classpath:demo.properties","file:./demo.properties"},ignoreResourceNotFound = true)
여러 경로를 구성하고 여러 경로에 구성 파일이 존재하면 SpringBoot는 해당 경로를 모두 로드하고 동일한 콘텐츠를 처리합니다. . 따라서 구성 정보가 외부 경로와 내부 경로만 구별하고 내용이 정확히 동일한 경우 끝에 파일 경로를 작성하면 됩니다. 로컬로 시작하면 파일 경로가 존재하지 않기 때문에 클래스 경로가 로드됩니다. jar가 시작되면 파일 경로가 클래스 경로 경로의 내용을 덮어쓰게 됩니다.
ignoreResourceNotFound = true를 추가해야 합니다. 그렇지 않으면 오류가 발생합니다. 찾을 수 없으면 보고됩니다. 추가 후 찾을 수 없는 구성 파일은 무시됩니다.
이때 구성 파일인 데모.속성(demo.properties)을 jar 패키지와 같은 레벨에 넣어주시면 됩니다.
위 내용은 SpringBoot 프로젝트를 jar로 만든 후 외부 구성 파일을 로드하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!