Chcę uzyskać wartość z aplikacji.yml, ale dostałem "Ta adnotacja nie ma zastosowania do celu" zmiennej lokalnej "dla tej części, jak rozwiązać ten problem?

@Value("\${aws.secretsManager.secretName}")
val secretName: String? = ""

@Configuration
@EnableConfigurationProperties
@ConfigurationProperties

fun getSecret() {

        @Value("\${aws.secretsManager.secretName}")
        val secretName: String? = ""


        val region = "us-west-2"
        val logger: Logger = LoggerFactory.getLogger(GetSecretConfig::class.java)

        // Create a Secrets Manager client
        val client = AWSSecretsManagerClientBuilder.standard().withRegion(region).build()
        val getSecretValueRequest = GetSecretValueRequest().withSecretId(secretName)

        var getSecretValueResult: GetSecretValueResult? = try {
            client.getSecretValue(getSecretValueRequest)
        } 
}

Application.yml

aws:
  secretsManager:
    secretName: "test-mvp"
    region: "us-west-2"
    user: "root"
    password: "root"
0
user15148368 13 marzec 2021, 03:08

1 odpowiedź

Najlepsza odpowiedź

Z @Value Javadoc:

Adnotacja używana na poziomie pola lub metoda / konstruktor parametrów , który wskazuje wyrażenie wartości domyślnej dla elementu adnotowanego.

Adnotacja @Value jest zdefiniowana zgodnie z następującymi:

@Target(value = {FIELD, METHOD, PARAMETER, ANNOTATION_TYPE})
@Retention(value = RUNTIME)
@Documented
public @interface Value

Jak widzisz przez @Target adnotacja @Value, nie ma być używane w LOCAL_VARIABLE.

Rozwiązaniem jest zdefiniowanie zmiennej secretName poza funkcją - jako pole klasy.

0
Matheus Cirillo 13 marzec 2021, 04:26