Shorn
Shorn

Reputation: 21554

What configuration enables the evaluation of @Value annotations?

I'm tying to do a very minimal programmatic/annotation based configuration of Spring, to do some command line stuff and I want to be able to inject value of some bean values from System properties.

I'm using the @Value like this:

@Value("${MigrateDb.task:default}")
private String task;

It's sort of working, but it's not evaluating the value definition, I'm just getting "${MigrateDb.task:default}" in the actual field, instead of Spring evaluating it and giving me the value of the Migrate.db.task system property (or default).

What do I need to add to my Configuration class to enable this behaviour?

Upvotes: 0

Views: 231

Answers (2)

Shorn
Shorn

Reputation: 21554

From ShadowRay's answer, the minimum code to enable the requested behaviour is:

  @Bean
  public static PropertyPlaceholderConfigurer propertyPlaceholderConfigurer(){
      return new PropertyPlaceholderConfigurer();
  }

Method should be static as per: https://stackoverflow.com/a/14943106/924597

Upvotes: 0

Rafik BELDI
Rafik BELDI

Reputation: 4158

try using it this way:

@Value("${MigrateDb.task:default}")
private String task;

XML Config:

<context:property-placeholder
        location="your.filelocation.properties" />`

Java Config :

@Bean
public static PropertyPlaceholderConfigurer propertyPlaceholderConfigurer() {

    PropertyPlaceholderConfigurer propertyPlaceholderConfigurer = new PropertyPlaceholderConfigurer();
    propertyPlaceholderConfigurer.setLocation(new ClassPathResource("file.properties"));

    return propertyPlaceholderConfigurer;
}

Upvotes: 1

Related Questions