从springboot应用程序的领事中读取密钥值

问题描述 投票:3回答:1

我想从领事那里读取我的外部配置,例如数据库主机和端口。我想在我的Springboot应用程序中访问它。因此,我创建了一个springboot应用程序,并为领事配置添加了云配置。我创建了bootstrap.yml,在其中提供了领事主机和端口,并且可以连接。但是我无法从领事那里获取任何键值对。我已经在asd下方发布了bootstrap.yml。有人可以指导我怎么做吗

spring:
  cloud:
    consul:
      host: localhost
      port: 8500
      config:
              enabled: true
              data-key: config/application/datakey

TIA

spring-boot consul
1个回答
0
投票

您需要使用VaultTemplate从Vault中读取数据。

您可以在Spring Boot Application中,最好在Java Config中执行以下操作

@Autowired
private VaultTemplate vaultTemplate;

@Value(value = "${datasource.url}")
private String dataSourceUrl;

@Bean
public DataSource dataSource() {
    Map<String, Object> data = vaultTemplate.opsForKeyValue("secret/", KeyValueBackend.versioned()).get("db_config").getData();
    String username = data.get("username").toString();
    String password = data.get("password").toString();
    HikariConfig config = new HikariConfig();
    config.setJdbcUrl( dataSourceUrl );
    config.setUsername( username );
    config.setPassword( password );
    config.addDataSourceProperty( "cachePrepStmts" , "true" );
    config.addDataSourceProperty( "prepStmtCacheSize" , "250" );
    config.addDataSourceProperty( "prepStmtCacheSqlLimit" , "2048" );
    return new HikariDataSource(config);
}

您可以使用以下vault cli命令在secret/路径下写入数据库用户名,密码之类的数据。

$ vault kv put secret/db_config username=postgres password=database
© www.soinside.com 2019 - 2024. All rights reserved.