如何使用 manifest.yml 存储 application.properites 值以包含密码?
How to store application.properites values using manifest.yml to contain passwords?
所以我的 application.properties 看起来像:
spring.datasource.url=jdbc:sqlserver://localhost:1433;databaseName=mydb
spring.datasource.username=user
spring.datasource.password=123456
spring.jpa.database-platform=org.hibernate.dialect.SQLServer2012Dialect
我不希望其他人在进入我的 application.properties 文件时能够看到我的用户名和密码。
是否有其他方法可以将价值推送到 Cloud Foundry?类似于 manifest.yml?
尝试创建manifest.yml
我试图制作一个清单文件,以便我可以将它与我在 Cloud Foundry 上的应用程序绑定。
VCAP_SERVICES =
{
"oraclesql": [
{
"name": "OrcaleDb",
"label": "oraclesql",
"tags": [
"oracledb",
"oracle",
"relational"
],
"plan": "free",
"credentials": {
"uri": "jdbc:sqlserver://localhost:1433;databaseName=mydb",
"username": "user",
"password": "123456"
}
}
]
}
已创建application.yml
//this works
spring:
application:
name: tester
datasource:
driverClassName: jdbc:sqlserver://localhost:1433;databaseName=mydb
username: user
password: 123456
initialize: false
jpa:
databasePlatform: org.hiberate.dialect.Oracle10gDialect
是也不是。不幸的是 manifest.yml
并不是那样工作的。该文件提供了将用于 cf push
的设置。它与应用程序无关,对 Spring、Java、您的编程语言或您选择的应用程序框架一无所知。因此它无法更改您的 application.properties 文件或其他特定于框架的配置。
幸运的是,有许多方法可以配置 Spring 引导(请参阅 here),其中之一是通过环境变量。幸运的是,您可以通过 manifest.yml
设置环境变量。因此,如果您在 manifest.yml
中设置了正确的环境变量,您就可以配置您的应用程序。
作为参考,这里是在 manifest.yml
.
中设置 env 变量的说明
https://docs.cloudfoundry.org/devguide/deploy-apps/manifest.html#env-block
大致是这样的:
---
...
env:
ENV_1: val_1
ENV_2: val_2
Spring 引导将使用解释的规则 here 将环境变量映射到属性。一个基本示例是 SPRING_DATASOURCE_USERNAME
映射到 application.properties 中的 spring.datasource.username
。
您在这里真正想要做的是将您的数据库连接作为云铸造厂 service 而不是在您的 application.properties
中定义。正如 Daniel 的回答所暗示的,Spring 可以获取 ENV 变量,但在清单中设置连接详细信息并不是执行此操作的惯用方法。
通过服务,当绑定到应用程序时,连接详细信息存储在 VCAP_SERVICES
变量中 - spring 可以从那里读取。 spring-music 应用展示了这样做的原型方法。
所以我的 application.properties 看起来像:
spring.datasource.url=jdbc:sqlserver://localhost:1433;databaseName=mydb
spring.datasource.username=user
spring.datasource.password=123456
spring.jpa.database-platform=org.hibernate.dialect.SQLServer2012Dialect
我不希望其他人在进入我的 application.properties 文件时能够看到我的用户名和密码。
是否有其他方法可以将价值推送到 Cloud Foundry?类似于 manifest.yml?
尝试创建manifest.yml
我试图制作一个清单文件,以便我可以将它与我在 Cloud Foundry 上的应用程序绑定。
VCAP_SERVICES =
{
"oraclesql": [
{
"name": "OrcaleDb",
"label": "oraclesql",
"tags": [
"oracledb",
"oracle",
"relational"
],
"plan": "free",
"credentials": {
"uri": "jdbc:sqlserver://localhost:1433;databaseName=mydb",
"username": "user",
"password": "123456"
}
}
]
}
已创建application.yml
//this works
spring:
application:
name: tester
datasource:
driverClassName: jdbc:sqlserver://localhost:1433;databaseName=mydb
username: user
password: 123456
initialize: false
jpa:
databasePlatform: org.hiberate.dialect.Oracle10gDialect
是也不是。不幸的是 manifest.yml
并不是那样工作的。该文件提供了将用于 cf push
的设置。它与应用程序无关,对 Spring、Java、您的编程语言或您选择的应用程序框架一无所知。因此它无法更改您的 application.properties 文件或其他特定于框架的配置。
幸运的是,有许多方法可以配置 Spring 引导(请参阅 here),其中之一是通过环境变量。幸运的是,您可以通过 manifest.yml
设置环境变量。因此,如果您在 manifest.yml
中设置了正确的环境变量,您就可以配置您的应用程序。
作为参考,这里是在 manifest.yml
.
https://docs.cloudfoundry.org/devguide/deploy-apps/manifest.html#env-block
大致是这样的:
---
...
env:
ENV_1: val_1
ENV_2: val_2
Spring 引导将使用解释的规则 here 将环境变量映射到属性。一个基本示例是 SPRING_DATASOURCE_USERNAME
映射到 application.properties 中的 spring.datasource.username
。
您在这里真正想要做的是将您的数据库连接作为云铸造厂 service 而不是在您的 application.properties
中定义。正如 Daniel 的回答所暗示的,Spring 可以获取 ENV 变量,但在清单中设置连接详细信息并不是执行此操作的惯用方法。
通过服务,当绑定到应用程序时,连接详细信息存储在 VCAP_SERVICES
变量中 - spring 可以从那里读取。 spring-music 应用展示了这样做的原型方法。