springboot/k8s configmap 配置热更新

一:java项目如何覆盖jar包内的配置文件
操作:
之前 >> 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启动参数
-Xbootclasspath/a:path
将指定路径的所有文件追加到默认bootstrap路径中;

类加载原理:
public class Launcher {
static class AppClassLoader extends URLClassLoader {}
static class ExtClassLoader extends URLClassLoader {}
private static class BootClassPathHolder {}
}

image.png

二:springboot加载配置文件的顺序
顺序:
主要有以下几个地方,优先级由高到低:
1.当前jar包同级文件夹config中;2.jar包同级的配置文件;3.jar包内部的配置文件;

image.png

源码分析:

三:nacos配置解析
issue:第二个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 通过文件创建和挂载到容器
configMap介绍
ConfigMap 是一种 API 对象,用来将非机密性的数据保存到键值对中。使用时, Pods 可以将其用作环境变量、命令行参数或者存储卷中的配置文件。

ConfigMap 将你的环境配置信息和 容器镜像 解耦,便于应用配置的修改。
利用yaml文件来创建

apiVersion: v1
kind: ConfigMap
metadata:
name: redis-config
data:
data.1: hello #以键值对的方式进行存储
data.2: world #以键值对的方式进行存储
redis.properties6666: | #以文件的形式进行存储,可以在下方直接写配置文件的内容
redis.host=127.0.0.1
redis.port=6379
redis.password=123456

通过文件挂载使用configMap
redis.properties6666 是映射到 容器的文件名字 /etc/config/redis.properties6666
/etc/config/下还有两个文件,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: #创建卷
- name: config-volume #创建的卷名称
configMap: #从configMap中挂载
name: redis-config #挂载configMap中redis-config
restartPolicy: Never

优化项:如何实现配置热更新?

五:configmap热更新
实现ConfigMap热更新的三种常用方法:使用sidecar、CI脚本和自定义Controller

https://blog.csdn.net/kingu_crimson/article/details/129933905

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容