简体   繁体   中英

java 8 Springboot How to use properties from application.yml file in annotations?


I am using java 8, Spring boot 2.2 and have a piece of code where I use `@Retryable`. The backoff, maxattempt fields as of now are hardcoded and I wish to make them configurable. But only constants are allowed in there; have to be final. Any idea on how to overcome this ? I remember seeing some code somewhere which makes me think its possible. I know I can do it via `RetryTemplate`. But I cant digest the idea that there is no other way. I want this.
 @Retryable( value = { SQLException.class },maxAttempts = 2,backoff = @Backoff(delay = 5000))

I to become something like this

@Retryable( value = { SQLException.class },maxAttempts = "${applicationyml['myproperty']}",backoff = @Backoff(delay = "${applicationyml['myproperty']}"))

Use maxAttemptsExpression etc;

They can get property placeholders ${some.property} where some.property is in the YAML, or SpEL expressions

#{@someBean.someProperty}

Example here .

@Retryable(exceptionExpression = "#{@exceptionChecker.${retryMethod}(#root)}",
        maxAttemptsExpression = "#{@integerFiveBean}", backoff = @Backoff(delayExpression = "#{${one}}",
                maxDelayExpression = "#{${five}}", multiplierExpression = "#{${onePointOne}}"))
public void service3() {
    ...
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM