我有一个需要使用属性文件的spring启动应用程序。此应用程序将在云端。因此,属性文件也将在coud上。
我正在使用云代工厂与云进行通信,并使用'cf push'推送我的spring-boot应用程序。
我的问题: 1.存储属性文件的位置和方式?它可以存储在云端吗?怎么样?或者它是否需要存储在git上并在您的应用程序中引用它? 2.如何使用位于外部位置的此属性文件?
答案 0 :(得分:3)
您无法在云代工厂中访问文件系统。您必须将配置文件保留在classpath本身并从classpath加载属性,这也是Spring启动的默认行为。 Spring引导的application.properties文件(位于src / main / resource中)进入你的jar并且spring加载它。因此,当你构建一个嵌入式jar / war时,它会进入classpath并直接工作。
云代工处理属性的方法是通过VCAP变量。您可以使用cf推送期间使用的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或其他几种类型的数据源(如文件系统/ Vault等)支持。它作为不同的配置服务运行。 您可以在应用程序属性文件中定义配置服务器,从而使应用程序从Config服务读取属性。
https://cloud.spring.io/spring-cloud-config/spring-cloud-config.html
当你需要在微服务架构中集中属性时,你可以采用配置服务方法。
答案 1 :(得分:1)
正如所指出的,它最适合使用Spring-Cloud Config服务。该服务将拥有获取Git Repo(主要是网址,用户名和密码)的凭据,然后您就可以获得这些属性。
通常会定义部署文件(包含配置文件的清单文件)。因此,如果您使用测试环境提供 Dspring.profiles.active = Test ,您的应用程序将使用它来加载。
故事的另一方面是在CloudConfigService中定义多个配置文件。您可以使用 spring.cloud.config.label = youLabel 在它们之间切换。使用ConfigService确实有帮助,因为它还提供了一种使用配置文件选择在配置之间切换的简便方法