如何使用manifest.yml存储application.properites值来包含密码?

时间:2017-02-20 16:48:37

标签: spring-boot cloudfoundry

所以我的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文件时能够看到我的用户名和密码。

是否有其他方法可以将价值推向云代工厂?像manifest.yml?

之类的东西

尝试创建manifest.yml

我尝试制作一个清单文件,以便将其与我在云代工厂的应用程序绑定。

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

2 个答案:

答案 0 :(得分:2)

是和否。不幸的是,manifest.yml并不像那样。该文件提供将用于cf push的设置。它与应用程序无关,对Spring,Java,您的编程语言或您选择的应用程序框架一无所知。因此,它无法更改application.properties文件或其他特定于框架的配置。

幸运的是,有许多方法可以配置Spring Boot(参见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 Boot将使用解释here的规则将环境变量映射到属性。一个基本示例是SPRING_DATASOURCE_USERNAME映射到application.properties中的spring.datasource.username

答案 1 :(得分:0)

您真正想要做的是将您的数据库连接作为云代工service,而不是在application.properties中定义。正如丹尼尔的回答所示,Spring可以获取ENV变量,但在清单中设置连接细节并不是惯用的方法。

通过提供服务,连接详细信息在绑定到应用程序时存储在VCAP_SERVICES变量中 - spring可以从那里读取。 spring-music应用程序显示了这样做的典型方式。