2017-04-19 42 views
0

我有一个需要使用属性文件的春季启动应用程序。这个应用程序将在云端。所以,财产档案也将在乍一看。云与外部属性文件的春季启动应用程序

我正在使用云代工与云进行通信,并使用'cf push'推送我的spring-boot应用程序。我的问题: 1.何处以及如何存储属性文件?它可以存储在云端吗?怎么样?还是需要将其存储在git上并将其引用到应用程序中? 2.如何使用位于外部位置的这个属性文件?

回答

2

您无法在云代工中访问文件系统。您必须将配置文件保存在classpath本身中,并从classpath加载属性,这也是Spring引导的默认行为。 Spring引导的application.properties文件(位于src/main/resource中)进入你的jar并加载它。因此,当你构建一个嵌入式jar/war时,它会进入classpath并直接运行。

处理属性的云代工方式是通过VCAP变量。您可以使用cf push期间使用的deplyoment清单来外化这些属性。 在您的清单yml文件中定义如下的属性。

env: 
    myprop1: myvalue1 
    myprop2: myvalue2 

使用此方法,您的应用程序的所有属性将作为正常的系统属性提供。你可以在你的应用程序中以Java代码中的System.getProperties()方式访问它们。

https://docs.run.pivotal.io/devguide/deploy-apps/environment-variable.html#VCAP-APPLICATION 

https://docs.cloudfoundry.org/devguide/deploy-apps/manifest.html 

这两种方法的主要缺点是应用程序需要重建/重新推送到云代工厂。应用程序无法在应用程序启动并运行时动态读取属性中的更改。

为了克服这个问题,Spring-cloud有一个项目cloud-config。这可以通过GIT或像File System/Vault等少数其他类型的数据源来支持。这可以作为不同的配置服务运行。 您可以在您的应用程序属性文件中定义配置服务器,它使应用程序从配置服务读取属性。

https://cloud.spring.io/spring-cloud-config/spring-cloud-config.html 

大多数时候,u需要在微服务架构集中的属性,你可以去配置服务的方法。

+0

1.为什么云代工厂不提供文件系统访问? – Tiya

+0

2.我希望我的spring-boot应用程序仅在云上部署一次。但是,我希望能够在以后更改我的属性文件内容,而无需在云上重新部署我的spring-boot-application。这可以通过使用application.properties来实现吗?即使在部署spring-boot应用程序之后,我们是否可以重新加载应用程序.properties? – Tiya

+1

云代工在虚拟环境中运行。应用程序的每个实例都在其自己的独立容器中运行。因此文件系统只是暂时的。阅读此链接了解云代工厂的工作原理。 https://docs.cloudfoundry.org/devguide/deploy-apps/prepare-to-deploy.html#filesystem你无法实现重新加载应用程序属性。一旦你改变了一些属性,那么你需要重建和cf推送应用程序到云代工厂。您可能不得不考虑使用Spring云配置服务器作为您的用例。 –

0

正确地指出,它最适合使用Spring-Cloud Config服务。该服务将有凭据打Git回购(主要是网址,用户名和密码),然后你可以获得属性。

通常会定义部署文件(带有配置文件的清单文件)。因此,如果您使用的测试环境为Dspring.profiles.active = Test,那么您的应用程序将使用它来加载。

故事的另一方面是在CloudConfigService中定义多个配置文件。您可以通过使用spring.cloud.config.label = youLabel在这两者之间切换。使用ConfigService确实有帮助,因为它还提供了使用配置文件选择在配置之间切换的简单方法

相关问题