一:java項(xiàng)目如何覆蓋jar包內(nèi)的配置文件
操作:
之前 >> java -noverify -Xbootclasspath/p: JDK8
之后>> java -noverify -Xbootclasspath/a: JDK11
C:\Users\xx.jdks\corretto-11.0.22\bin\java -Xbootclasspath/a:/config/application.yml -jar xxx-runtime-0.0.1-SNAPSHOT.jar
原理:JVM啟動(dòng)參數(shù)
-Xbootclasspath/a:path
將指定路徑的所有文件追加到默認(rèn)bootstrap路徑中米奸;
類(lèi)加載原理:
public class Launcher {
static class AppClassLoader extends URLClassLoader {}
static class ExtClassLoader extends URLClassLoader {}
private static class BootClassPathHolder {}
}
二:springboot加載配置文件的順序
順序:
主要有以下幾個(gè)地方报辱,優(yōu)先級(jí)由高到低:
1.當(dāng)前jar包同級(jí)文件夾config中睛藻;2.jar包同級(jí)的配置文件巴帮;3.jar包內(nèi)部的配置文件别凤;
源碼分析:
三:nacos配置解析
issue:第二個(gè)server-addr配置不生效。
nacos:
config:
server-addr: localhost:31492
data-id: xx.local.properties
bootstrap.enable: false
auto-refresh: false
discovery:
server-addr: localhost:31492
auto-register: true
四:k8s configMap 通過(guò)文件創(chuàng)建和掛載到容器
configMap介紹
ConfigMap 是一種 API 對(duì)象漓滔,用來(lái)將非機(jī)密性的數(shù)據(jù)保存到鍵值對(duì)中锈津。使用時(shí), Pods 可以將其用作環(huán)境變量隆箩、命令行參數(shù)或者存儲(chǔ)卷中的配置文件该贾。
ConfigMap 將你的環(huán)境配置信息和 容器鏡像 解耦,便于應(yīng)用配置的修改摘仅。
利用yaml文件來(lái)創(chuàng)建
apiVersion: v1
kind: ConfigMap
metadata:
name: redis-config
data:
data.1: hello #以鍵值對(duì)的方式進(jìn)行存儲(chǔ)
data.2: world #以鍵值對(duì)的方式進(jìn)行存儲(chǔ)
redis.properties6666: | #以文件的形式進(jìn)行存儲(chǔ)靶庙,可以在下方直接寫(xiě)配置文件的內(nèi)容
redis.host=127.0.0.1
redis.port=6379
redis.password=123456
通過(guò)文件掛載使用configMap
redis.properties6666 是映射到 容器的文件名字 /etc/config/redis.properties6666
/etc/config/下還有兩個(gè)文件,data.1和data.2
| 豎線文本保留格式
apiVersion: v1
kind: Pod
metadata:
name: mypod2
spec:
containers:
- name: busybox
image: busybox
command: [ "/bin/sh","-c","cat /etc/config/redis.properties;sleep 1d" ]
volumeMounts: #卷掛載
- name: config-volume #掛載卷的名稱
mountPath: /etc/config #掛載到容器中的位置
volumes: #創(chuàng)建卷
- name: config-volume #創(chuàng)建的卷名稱
configMap: #從configMap中掛載
name: redis-config #掛載configMap中redis-config
restartPolicy: Never
優(yōu)化項(xiàng):如何實(shí)現(xiàn)配置熱更新娃属?
五:configmap熱更新
實(shí)現(xiàn)ConfigMap熱更新的三種常用方法:使用sidecar六荒、CI腳本和自定義Controller
https://blog.csdn.net/kingu_crimson/article/details/129933905