如何从S3加载spring application.yml

问题描述

我在用于不同环境的S3存储桶中有一堆spring application.yml属性文件。我想从S3存储桶中加载属性文件,以确保无状态配置。

// Config Object
@Configuration
@ConfigurationProperties(prefix = "yaml")
public class YamlFooProperties {
    private String name;
    private List<String> aliases;
    // standard getter and setters
}

// foo.yml file located in S3 bucket
yaml:
  name: foo
  aliases:
    - abc
    - xyz

如何让我的spring-boot应用程序加载这些属性,并在应用程序启动时使其可用?

我正在使用spring-boot版本2.2.6.RELEASE和Java 11。

解决方法

方法1:编写一些非常简单的启动脚本,这些脚本首先从S3中获取(例如curl)到本地文件(例如s3-config.yaml),然后正常启动您的应用。

方法2:如果您使用Kubernetes(部署系统是个好主意),则可以使用ConfigMapHelm之类的其他方式来部署应用程序,以满足您对“确保无状态配置”。

方法3:如果只想要Java(没有脚本,没有k8等),则可以记下一些简单的Java代码,该代码从S3中获取文件,然后使用这些数据调用SpringBootApplication的开头。

,

您不必将配置存储在s3中。 Spring Cloud提供的默认选项是git支持的存储,这对我来说似乎更有利。但是,也有S3支持。

https://cloud.spring.io/spring-cloud-config/reference/html/#_aws_s3_backend

通过这种方式,您的配置服务器将EnvironmentRepository配置为使用S3存储桶作为底层存储。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...