0

これらのバージョンを使用するspringbootアプリがあります:

SpringBoot: 2.3.1
SpringCloud: Hoxton.SR5 
SpringData: Neumann-SR1

ここで説明されているようにカスタム クラスを使用しました (@Arun からの回答): Spring Cloud Vault Config を構成して、/secret 以外の場所からプルする

ボールト構成を取得しているようには見えません。私はbootstrap.yml次のものを持っています:

spring:
  cloud:
    # Vault configurations
    vault:
      generic:
        enabled: false
      uri: https://${URI}
      authentication: TOKEN
      token: ${VAULT_TOKEN}

    config:
      discovery:
        enabled: true

私はそれをローカルに持ち込もうとしているのでapplication.yml、次のようにしています:

spring:
  datasource:
    url: jdbc:postgresql://localhost:8157/postgres

vaultこれは、値をDataSourceに注入しようとしている場所です。

@Profile(value = {"local", "dev", "stg", "prd"})
@Configuration
public class DatabaseConfig {

  @Autowired
  DatabaseCredentials config;

  @Bean
  @Primary
  public DataSource dataSource() {

    return DataSourceBuilder
        .create()
        .username(config.getUsername())
        .url(config.getUrl())
        .password(config.getPassword())
        .driverClassName("org.postgresql.Driver")
        .build();
  }
}

アプリの起動時DatabaseCredentialsは空です。

私が行った別の方法は次のとおりです。

public class DatabaseConfig {
  
  @Value("${ccm.database.username}")
  String username;

  @Value("${ccm.database.password}")
  String password;

  @Value("${spring.datasource.url}")
  String url;

  @Bean
  @Primary
  public DataSource dataSource() {
    
    return DataSourceBuilder
        .create()
        .username(username)
        .url(url)
        .password(password)
        .driverClassName("org.postgresql.Driver")
        .build();
  }
}

これも、 の値が見つからないと言って空になっていますccm.database.username

私は何を間違っていますか?

4

3 に答える 3

0

の注釈がありませんDatabaseConfig.java

これはこのようなものになります。

@Component
@ConfigurationProperties("ccm.database")

だからそれはなる

@ConfigurationProperties("ccm.database")
@Component
public class DatabaseCredentials {
  
  @Value("${ccm.database.username}")
  String username;

  @Value("${ccm.database.password}")
  String password;

  @Value("${spring.datasource.url}")
  String url;

  // Getters and setters for all properties go here
}

構成にアクセスするには

@Configuration
public class DatabaseConfig {

  @Autowired
  DatabaseCredentials config;

  @Bean
  @Primary
  public DataSource dataSource() {

    return DataSourceBuilder
        .create()
        .username(config.getUsername())
        .url(config.getUrl())
        .password(config.getPassword())
        .driverClassName("org.postgresql.Driver")
        .build();
  }
}
于 2020-07-06T22:01:23.107 に答える