如何使用环境变量从 application.properties 读取数据库端口
How can you read a database port from application.properties with environment variables
我是 Spring Boot 和 application.properties 的新手。我有一个问题,我需要非常灵活地使用我的数据库端口,因为我有两个不同的数据库。因此我想从环境变量中读取端口。我尝试了以下方法:
spring.data.mongodb.uri = mongodb://project1:${db-password}@abc:12345/project
如果我的数据库有端口 12345,此代码工作正常。但如果我现在尝试从环境变量读取端口,则会出现问题。
我试过这个:
spring.data.mongodb.uri = mongodb://project1:${db-password}@abc:${port}/project
问题如下:我正在使用 k8 和 Jenkins。环境变量 "port" 在我的 k8 中提供给我的程序,这对 "db-password" 工作正常,但不适用于端口。我的詹金斯说:
"The connection string contains an invalid host 'abd:${port}'. The port '${port}' is not a valid, it must be an integer between 0 and 65535"
现在回答我的问题:
我怎样才能将端口作为环境变量读取,而不会出现此错误?
提前致谢!
要将环境变量注入 pods,您可以执行以下操作:
配置图
您可以创建 ConfigMap
并配置您的 pods 以使用它。
所需步骤:
- 创建
ConfigMap
- Update/Create 使用 ConfigMap 的部署
- 测试一下
创建 ConfigMap
我在下面提供了简单的 ConfigMap
来存储您的变量:
apiVersion: v1
kind: ConfigMap
metadata:
name: example-config
data:
port: "12345"
要应用它并能够使用它调用以下命令:
$ kubectl create -f example-configmap.yaml
上面的 ConfigMap
将创建值为 12345
的环境变量 port
。
检查ConfigMap
是否创建成功:
$ kubectl get configmap
输出应该是这样的:
NAME DATA AGE
example-config 1 21m
要获取详细信息,您可以使用命令查看:
$ kubectl describe configmap example-config
输出:
Name: example-config
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
port:
----
12345
Events: <none>
Update/Create 使用 ConfigMap 的部署
我提供了包含 ConfigMap
的简单部署:
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 2 # tells deployment to run 2 pods matching the template
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
envFrom:
- configMapRef:
name: example-config
ports:
- containerPort: 80
负责使用 ConfigMap
的配置:
envFrom:
- configMapRef:
name: example-config
之后你需要运行你的部署命令:
$ kubectl create -f configmap-test.yaml
并检查它是否正常工作:
$ kubectl get pods
输出:
NAME READY STATUS RESTARTS AGE
nginx-deployment-84d6f58895-b4zvz 1/1 Running 0 23m
nginx-deployment-84d6f58895-dp4c7 1/1 Running 0 23m
测试一下
要测试环境变量是否正常工作,您需要进入 pod 并自行检查。
为此调用命令:
$ kubectl exec -it NAME_OF_POD -- /bin/bash
请提供适合您情况的变量 NAME_OF_POD。
成功进入容器后运行:
$ echo $port
它应该显示:
root@nginx-deployment-84d6f58895-b4zvz:/# echo $port
12345
现在您可以在 pods 中使用您的环境变量了。
我是 Spring Boot 和 application.properties 的新手。我有一个问题,我需要非常灵活地使用我的数据库端口,因为我有两个不同的数据库。因此我想从环境变量中读取端口。我尝试了以下方法:
spring.data.mongodb.uri = mongodb://project1:${db-password}@abc:12345/project
如果我的数据库有端口 12345,此代码工作正常。但如果我现在尝试从环境变量读取端口,则会出现问题。 我试过这个:
spring.data.mongodb.uri = mongodb://project1:${db-password}@abc:${port}/project
问题如下:我正在使用 k8 和 Jenkins。环境变量 "port" 在我的 k8 中提供给我的程序,这对 "db-password" 工作正常,但不适用于端口。我的詹金斯说: "The connection string contains an invalid host 'abd:${port}'. The port '${port}' is not a valid, it must be an integer between 0 and 65535"
现在回答我的问题: 我怎样才能将端口作为环境变量读取,而不会出现此错误?
提前致谢!
要将环境变量注入 pods,您可以执行以下操作:
配置图
您可以创建 ConfigMap
并配置您的 pods 以使用它。
所需步骤:
- 创建
ConfigMap
- Update/Create 使用 ConfigMap 的部署
- 测试一下
创建 ConfigMap
我在下面提供了简单的 ConfigMap
来存储您的变量:
apiVersion: v1
kind: ConfigMap
metadata:
name: example-config
data:
port: "12345"
要应用它并能够使用它调用以下命令:
$ kubectl create -f example-configmap.yaml
上面的 ConfigMap
将创建值为 12345
的环境变量 port
。
检查ConfigMap
是否创建成功:
$ kubectl get configmap
输出应该是这样的:
NAME DATA AGE
example-config 1 21m
要获取详细信息,您可以使用命令查看:
$ kubectl describe configmap example-config
输出:
Name: example-config
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
port:
----
12345
Events: <none>
Update/Create 使用 ConfigMap 的部署
我提供了包含 ConfigMap
的简单部署:
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 2 # tells deployment to run 2 pods matching the template
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
envFrom:
- configMapRef:
name: example-config
ports:
- containerPort: 80
负责使用 ConfigMap
的配置:
envFrom:
- configMapRef:
name: example-config
之后你需要运行你的部署命令:
$ kubectl create -f configmap-test.yaml
并检查它是否正常工作:
$ kubectl get pods
输出:
NAME READY STATUS RESTARTS AGE
nginx-deployment-84d6f58895-b4zvz 1/1 Running 0 23m
nginx-deployment-84d6f58895-dp4c7 1/1 Running 0 23m
测试一下
要测试环境变量是否正常工作,您需要进入 pod 并自行检查。
为此调用命令:
$ kubectl exec -it NAME_OF_POD -- /bin/bash
请提供适合您情况的变量 NAME_OF_POD。
成功进入容器后运行:
$ echo $port
它应该显示:
root@nginx-deployment-84d6f58895-b4zvz:/# echo $port
12345
现在您可以在 pods 中使用您的环境变量了。