jar 패키지는 jar 패키지의 내부 및 외부 구성 파일을 읽고 springboot가 외부 구성 파일을 읽는 방법을 읽습니다.
시스템 속성 System.getProperty ( "user.dir")를 사용하여 명령이 실행되는 디렉터리를 가져옵니다 ( 인터넷의 많은 사람들이 jar 패키지의 현재 디렉터리가 잘못되었다고 말합니다 ).
예제 소스 코드 :
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class TestConfigPath {
public static void main(String[] args) {
String path = System.getProperty("user.dir");
System.out.println(path);
Properties properties = TestConfigPath.getProperties("application.properties");
String activemqConnection = properties.getProperty("activemq.connection");
System.out.println(activemqConnection);
}
public static Properties getProperties(String fileName) {
try {
String outpath = System.getProperty("user.dir")+File.separator+"config"+File.separator;//先读取config目录的,没有再加载classpath的
System.out.println(outpath);
Properties properties = new Properties();
InputStream in = new FileInputStream(new File(outpath + fileName));
properties.load(in);
return properties;
} catch (IOException e) {
System.out.println(e.getMessage());
try {
Properties properties = new Properties();
InputStream in = TestConfigPath.class.getClassLoader().getResourceAsStream(fileName);//默认加载classpath的
properties.load(in);
return properties;
} catch (IOException es) {
System.out.println(es.getMessage());
return null;
}
}
}
}
참고 : docker에서 실행하고 jar와 동일한 디렉토리에 config 디렉토리를 넣으면 읽을 수 없습니다. Dockerfile에 ADD config / / config / 문장을 추가해야합니다.
읽은 경로는 //config/application.properties입니다.
/config/application.properties
/config/application.properties (해당 파일 또는 디렉토리 없음)
docker 구성의 구성 파일은 jar 패키지보다 우선 순위가 높으며 jar 패키지의 기본 구성을 재정의합니다. 다른 서버 환경에 배포 할 때 해당 구성 만 수정하면됩니다.
Dockerfile 구성은 다음을 추가해야합니다. ADD config / / config /
springboot가 외부 구성 파일을 읽는 방법은 다음과 같은 우선 순위가 있습니다. 첫
번째는 명령이 실행되는 디렉토리 아래에 구성 폴더를 만드는 것입니다. (jar 패키지와 동일한 디렉토리에 config 폴더를 생성하고 jar 패키지 디렉토리에서 명령을 실행합니다.)이 폴더에 구성 파일을 넣습니다.
두 번째는 구성 파일을 jar 패키지의 동일한 레벨 디렉토리에 직접 배치하는 것입니다.
세 번째는 클래스 경로 아래에 구성 폴더를 만든 다음 구성 파일을 여기에 넣는 것입니다.
네 번째는 구성 파일을 클래스 경로 바로 아래에 배치하는 것입니다.
기본적으로 springboot는 먼저 동일한 수준의 자체 디렉토리에서 config / application.properties 파일을 읽습니다.
src / main / resources 폴더에 생성 된 application.properties 파일의 우선 순위가 가장 낮습니다.
따라서 springboot가 외부 구성 파일을 읽기 시작하면 코드를 수정하지 않고 기본 구성 파일을 재정의하기 위해 구성 파일 계층 만 추가하면됩니다.