原理:根据SpringBoot加载配置文件的顺序,可将外部的/config/自定义文件挂载到容器内的同jar路径下,启动docker时,读取外部自定义配置
方法:
1.读取jar包同目录下/config/sensorJson.json文件
public static String readJsonFile() {
//String filePath = "src/main/resources/sensorJson.json"; //读取jar包内的sensorJson.json文件
String filePath = "config/sensorJson.json"; //读取同jar包目录下/config/sensorJson.json文件
String jsonStr = "";
try {
File jsonFile = new File(filePath);
Reader reader = new InputStreamReader(new FileInputStream(jsonFile), StandardCharsets.UTF_8);
int ch = 0;
StringBuilder sb = new StringBuilder();
while ((ch = reader.read()) != -1) {
sb.append((char) ch);
}
reader.close();
jsonStr = sb.toString();
return jsonStr;
} catch (Exception ex) {
ex.printStackTrace();
return null;
}
}
2.打包成jar后,在同目录下创建/config/sensorJson.json,执行java -jar 项目.jar 测试读取外部文件是否生效
3.打成镜像运行
1)将项目.jar放在Docker服务器上
目录为:/home/docker/项目.jar
2)同目录创建文件夹: makir /home/docker/config
3)将sensorJson.json文件放到/home/docker/config下
4)编辑Dockerfile文件,并上传到服务/home/docker路径下
Dockerfile文件:
# 基础镜像
FROM openjdk:8-jre
# author 作者
MAINTAINER ZJH
# 挂载目录,宿主机目录,我这里是jar包目录
VOLUME /home/docker
# 指定路径,docker容器里jar包的目录
WORKDIR /home/docker
# 添加jar到镜像并命名为test.jar
ADD upDataServer-1.0-SNAPSHOT.jar upDataServer.jar
#在docker容器里创建和宿主机同样的配置文件的目录, jar包要和config目录同级
CMD mkdir /home/docker/config
# 启动服务
ENTRYPOINT ["java","-jar","upDataServer.jar"]
5)执行docker打包命令
docker build -t updataserver .
注意!镜像名称必须为小写
6)运行docker run -d -p 45803:45803 -v /home/docker/config:/home/docker/config --name updataserver --restart=always updataserver
-d : 后台运行
-p : 映射出去的端口 :容器启动jar包的端口
-v : 宿主机目录:docker容器里的目录
–name : 启动镜像时容器的名字
–restart : 开机重启
updataserver :镜像的名字
4.修改配置文件后,docker restart updataserver 重启镜像,读取了修改后的配置文件
补充:
保存镜像
docker save -o updataserver.tar updataserver
加载镜像
docker load -i updataserver.tar
Spring.jar加载配置文件的顺序
同一位置下,Properties 文件优先级高于 YAML 文件
1.Jar包同目录/config/自定义/appliction-{profile}.properties/yml
2.Jar包同目录/config/自定义/appliction.properties/yml
3.Jar包同目录/config/appliction-{profile}.properties/yml
4.Jar包同目录/config/appliction.properties/yml
5.Jar包同目录appliction-{profile}.properties/yml
6.Jar包同目录appliction.properties/yml
7.Jar包中的/resources/config/appliction-{profile}.properties/yml
8.Jar包中的/resources/config/appliction.properties/yml
9.Jar包中的/resources/appliction-{profile}.properties/yml
10.Jar包中的/resources/appliction.properties/yml
并且遵从以下原则:
1、先加载 JAR 包外的配置文件,再加载 JAR 包内的配置文件;
2、先加载 config 目录内的配置文件,再加载 config 目录外的配置文件;
3、先加载 config 子目录下的配置文件,再加载 config 目录下的配置文件;
4、先加载 appliction-{profile}.properties/yml,再加载application.properties/yml;
5、先加载 .properties 文件,再加载 .yml 文件。