如何使用 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 应用展示了这样做的原型方法。