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で実行し、configディレクトリをjarと同じディレクトリに配置すると、それを読み取ることができません。Dockerfileに文を追加する必要があります:ADD config / / config /
次に、読み込まれるパスは//config/application.propertiesです。
/config/application.properties
/config/application.properties(そのようなファイルやディレクトリはありません)
docker configの構成ファイルはjarパッケージよりも優先度が高く、jarパッケージのデフォルト構成をオーバーライドします。他のサーバー環境にデプロイする場合は、対応する構成を変更するだけで
済みます。Dockerfile構成を追加する必要があります:ADD config / / config /
springbootが外部構成ファイルを読み取る方法には、次の優先順位があります。1つ
目は、コマンドが実行されるディレクトリの下にconfigフォルダーを作成することです。(jarパッケージと同じディレクトリーにconfigフォルダーを作成し、jarパッケージディレクトリーでコマンドを実行します)、次にこのフォルダーに構成ファイルを配置します。
2つ目は、構成ファイルをjarパッケージの同じレベルのディレクトリに直接配置することです。
3つ目は、クラスパスの下にconfigフォルダーを作成し、そこに構成ファイルを配置することです。
4番目は、構成ファイルをクラスパスの直下に置くことです。
デフォルトでは、springbootは最初に、同じレベルの独自のディレクトリにあるconfig / application.propertiesファイルを読み取ります。
src / main / resourcesフォルダーの下に作成されたapplication.propertiesファイルの優先度が最も低い
したがって、springbootが外部構成ファイルの読み取りを開始するとき、構成ファイルのレイヤーを追加するだけで、コードを変更せずにデフォルトのファイルをオーバーライドできます。