Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot 具有外部属性文件的云上Spring boot应用程序_Spring Boot_Properties_External_Cloud Foundry - Fatal编程技术网

Spring boot 具有外部属性文件的云上Spring boot应用程序

Spring boot 具有外部属性文件的云上Spring boot应用程序,spring-boot,properties,external,cloud-foundry,Spring Boot,Properties,External,Cloud Foundry,我有一个spring启动应用程序,它需要使用属性文件。此应用程序将位于云端。因此,属性文件也将位于coud上 我正在使用CloudFoundry与云通信,并使用“cf push”来推送我的spring boot应用程序 我的问题: 1.在何处以及如何存储属性文件?它可以存储在云上吗?怎么用?或者它是否需要存储在git上并在应用程序中引用? 2.如何使用位于外部位置的此属性文件 您不能在cloud foundry中访问文件系统。您必须将配置文件保存在类路径本身中,并从类路径加载属性,这也是Spri

我有一个spring启动应用程序,它需要使用属性文件。此应用程序将位于云端。因此,属性文件也将位于coud上

我正在使用CloudFoundry与云通信,并使用“cf push”来推送我的spring boot应用程序

我的问题: 1.在何处以及如何存储属性文件?它可以存储在云上吗?怎么用?或者它是否需要存储在git上并在应用程序中引用?
2.如何使用位于外部位置的此属性文件

您不能在cloud foundry中访问文件系统。您必须将配置文件保存在类路径本身中,并从类路径加载属性,这也是Spring引导的默认行为。Spring boot application.properties文件(位于src/main/resource内)进入jar并由springs加载。因此,当您构建嵌入式jar/war时,它会进入类路径并直接工作

CloudFoundry处理属性的方法是通过VCAP变量。您可以使用cf推送期间使用的deployment清单将这些属性外部化。 在清单yml文件中定义属性,如下所示

env:
    myprop1: myvalue1
    myprop2: myvalue2
使用这种方法,应用程序的所有属性都可以作为正常系统属性使用。您可以在应用程序中以System.getProperties()的形式在Java代码中访问它们

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

https://docs.cloudfoundry.org/devguide/deploy-apps/manifest.html
这两种方法的主要缺点是需要将应用程序重新构建/重新发布到cloud foundry。一旦应用程序启动并运行,应用程序就无法动态读取属性中的更改

为了克服这个问题,Spring云有一个项目云配置。这可以由GIT或一些其他类型的数据源(如文件系统/Vault等)支持。这可以作为不同的配置服务运行。 您可以在应用程序属性文件中定义配置服务器,使应用程序从配置服务读取属性

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

大多数情况下,当你需要在微服务架构中集中属性时,你可以采用配置服务的方法。

你不能在CloudFoundry中访问文件系统。您必须将配置文件保存在类路径本身中,并从类路径加载属性,这也是Spring引导的默认行为。Spring boot application.properties文件(位于src/main/resource内)进入jar并由springs加载。因此,当您构建嵌入式jar/war时,它会进入类路径并直接工作

CloudFoundry处理属性的方法是通过VCAP变量。您可以使用cf推送期间使用的deployment清单将这些属性外部化。 在清单yml文件中定义属性,如下所示

env:
    myprop1: myvalue1
    myprop2: myvalue2
使用这种方法,应用程序的所有属性都可以作为正常系统属性使用。您可以在应用程序中以System.getProperties()的形式在Java代码中访问它们

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

https://docs.cloudfoundry.org/devguide/deploy-apps/manifest.html
这两种方法的主要缺点是需要将应用程序重新构建/重新发布到cloud foundry。一旦应用程序启动并运行,应用程序就无法动态读取属性中的更改

为了克服这个问题,Spring云有一个项目云配置。这可以由GIT或一些其他类型的数据源(如文件系统/Vault等)支持。这可以作为不同的配置服务运行。 您可以在应用程序属性文件中定义配置服务器,使应用程序从配置服务读取属性

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

大多数情况下,当您需要在微服务架构中集中属性时,您可以使用配置服务方法。

正如正确指出的,最适合使用Spring云配置服务。该服务将具有访问Git Repo的凭据(主要是url、用户名和密码),然后您就可以获得属性

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


故事的另一面是在CloudConfigService中定义多个概要文件。您可以使用spring.cloud.config.label=youLabel在这两个选项之间切换。使用ConfigService确实有帮助,因为它还提供了一种使用概要文件选择在配置之间切换的简单方法,正如正确指出的那样,它最适合使用Spring Cloud Config service。该服务将具有访问Git Repo的凭据(主要是url、用户名和密码),然后您就可以获得属性

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


故事的另一面是在CloudConfigService中定义多个概要文件。您可以使用spring.cloud.config.label=youLabel在这两个选项之间切换。使用ConfigService确实有帮助,因为它还提供了一种使用概要文件选择在配置之间切换的简便方法。为什么CloudFoundry不提供文件系统访问。我希望我的spring boot应用程序只在云上部署一次。不过,我希望以后能够更改属性文件内容,而无需在云上重新部署spring boot应用程序。这可以通过使用application.properties实现吗?只有在部署spring boot应用程序之后,我们才能重新加载应用程序属性吗?Cloud foundry在虚拟环境中运行。应用程序的每个实例都在自己的独立容器中运行。因此,文件系统只是暂时的。阅读此链接了解cloud foundry的工作原理。无法实现重新加载应用程序属性。一旦你改变了一些属性,你就需要重新构建并将应用推送到CloudFoundry。您可能需要考虑使用Spring云配置服务器来使用您的用例。