当前位置: 首页 > 知识库问答 >
问题:

在Spring中,Cloud Server将其他属性添加到现有环境中

米迪
2023-03-14

我们正在使用带有支持git存储库的Spring云配置服务器来为测试配置文件提供属性。我们收到了将密钥移动到vault(hashicorp)并像往常一样在属性文件中保留常规属性的要求。

在拥有vault之前,我们通过系统属性(使用-Dxxx=yyy)传递密钥,该属性作为常规属性源加载,应用程序按预期工作。

现在我必须有一个复合属性源来同时从属性文件和vault中获取。我不确定如何同时从vault和git中提取属性并将它们提供给Spring Cloud config客户端。

我一直在挖掘留档,发现我们可以有复合环境存储库,但是我不能让vault和git同时工作。

我尝试过多种方法,比如放置这样的属性:

spring.cloud.config.server.git.uri=file:///E:/Project/git/myappdata

spring.cloud.config.server.vault.host=127.0.0.1
spring.cloud.config.server.vault.port=8200
spring.cloud.config.server.vault.scheme=http
spring.cloud.config.server.vault.backend=secret
spring.cloud.config.server.vault.defaultKey=myapp

还使用spring cloud vault进行了测试,我可以获取这些秘密,但它们并没有提供给我的客户。

我尝试使用实现一个环境存储库接口,但这是为了创建一个新的存储库(我只想在现有的基于git的存储库中添加一个vault属性)。

将使用spring事件ApplicationEnvironmentPreparedEvent并尝试动态附加vault属性。

我想我忽略了什么。您知道读取vault机密并将其作为常规属性文件的属性附加的正确方法吗?

共有1个答案

单于亮
2023-03-14

这是可能的。您应该为Spring云配置服务使用一些配置文件。

    spring:
      profiles:
        active: vault, git
      cloud:
        config:
          server:
            vault:
              order: 1
            git:
              order: 2  
              uri: https://some-git-repo.com/
              username: user 
              password: pass

有了这样的配置,Vault和Git将协同工作。您还需要实现对Vault令牌的支持,并将其包含在每个配置客户端中。对于Vault,它的工作方式有所不同。它不会像Git那样获得所有属性。当客户要求一些带有令牌的财产时,它会去保险库取回。如果它不存在,它将在git repo中搜索。您可以在配置中指定顺序。

Spring递归解析属性,所以您可以拥有属性文件,该文件将属性占位符存储在git中,并由配置服务器(application.yml)提供服务:

database:
  password: ${database.secure.password}

和存储在Vault中的敏感属性,例如。

vault write secret/clientAppName database.secure.password=SuperSecurePassword

Spring Cloud将自动解析您的${database.password}属性。

 类似资料:
  • 我有一个包,它使用一个配置文件具有一个属性: 我使用ConfigAdmin的蓝图如下所示: 只要我可以更改属性的值并且包自动更新属性,这就很好。 我想知道是否有任何方法可以在不更改蓝图的情况下将新属性添加到我的配置文件中(这涉及再次编译/打包)。当然,我的包应该准备好处理新属性。 不确定这在OSGi是否有意义。谁能给我一点提示,告诉我如何向现有配置文件动态添加新属性,并使它们在ConfigAdmi

  • 我编写了一个PropertySource,它为spring启用类路径前缀。Kafka。属性。ssl。信任库。位置(不支持开箱即用)。本质上,这让我可以放置一个信任库。我的Spring Boot应用程序的src/main/resources文件夹中的jks,并从中引用它。jar文件。 这对于纯SpringKafka配置非常有效,如下所示: 当在Spring Cloud Stream活页夹的上下文中给

  • 问题内容: 我有两个实体,消息和用户。用户与消息有一个ManyToMany关系(一个用户可以有多个消息),而消息(现在,为了使其不那么复杂)与用户有一个ManyToMany关系(可以将一条消息发送给多个用户)。 我正在使用@JoinTable加入这两个实体,但是,我想在连接表中添加一个“状态”列,以告知该消息是否是新消息,已读消息等。我当时正在考虑将该列放入Message实体中,但是,我认为这可能

  • 我想把我存储在会话中的一个对象传递给每个模板。我正在使用Spring Boot和FreeMarker。将对象保存到限定范围的组件中并在HandlerInterceptor实现中访问它可以很好地工作。为了向模板公开属性,我使用ModelandView#AddObject(name,obj),它也使用简单的值,如字符串或ints。但是就像我在上面提到的那样,我不能从我用这种方式公开的对象访问模板中的字

  • 问题内容: 我想将背景图像添加到我的JFrame中,但是当我使用下面的代码进行操作时,我无法添加其他元素,例如JLabel或JTextField。 您能否告诉我是否还有另一种方法可以将JTabbedPane添加到具有背景的JFrame中? 谢谢。 问题答案: 像这样? 附录:“通常您会先调用,但是由于图像将覆盖整个背景,因此无需这样做。” — [camickr] 如果仅创建自定义UI来添加背景图像

  • 我正在spring boot中构建一个可重用的库,它可以调用Rest API并进行一些验证。这将构建为JAR,目标是通过添加pom将此库用作maven依赖项。其他spring boot项目中的xml。 问题是库如何知道要加载哪些环境属性。因为它没有在任何服务器上运行。例如:调用应用程序将包含为依赖项,并部署在dit环境中。我希望库能够获取dit属性,如url、令牌等,以及关于如何实现这一点的任何建