Spring Boot application.yml and @Value is not working

Viewed 581

My Properties class:

@Data
@Configuration
@ConfigurationProperties(prefix = "application.keys")
public class MyProperties {

    private Duration duration;
    private String cronValue;

}

In application.yml file:

application:
  keys:
    duration: PT1H
    cron-value: "* 0/1 * * * *"

My Scheduler class:

@Service
@RequiredArgsConstructor
public class MyScheduler {

    private final MyProperties myProperties;

    @Scheduled(cron = "#{myProperties.cronValue}")
    public void run() {
        System.out.println(OffsetDateTime.now().plus(myProperties.getDuration()));
    }

}

It is not working as well:

@Scheduled(cron = "${application.keys.cron-value}")

“Could not resolve placeholder application.cron-value”

1 Answers

In application.yml file:

application:
  keys:
    duration: PT1H
    cron-value: "* 0/1 * * * *"

Create the AppProperties

@Configuration
@ConfigurationProperties(prefix = "application")
@EnableConfigurationProperties
public class AppProperties {

    private Map<String, String> keys = new HashMap<>();

    public Map<String, String> getKeys() {
        return keys;
    }

    public void setKeys(Map<String, String> keys) {
        this.keys = keys;
    }
}

Then Create Appconstants

public class AppConstant {

    public static final String DURATION = "duration";

    public static final String CRONVALUE = "cron-value";

}

Test class

@Autowired
    private AppProperties appProps;
public void getMsg() {
            Map<String, String> msgs = appProps.getKeys();
            System.out.println(msgs.get(AppConstant.DURATION));
            System.out.println(msgs.get(AppConstant.CRONVALUE));
        }

it will print the value from the application properties

Related