Spring - $ \ {} не работает в @Value
Простой пример Spring@PropertySource
для чтения файла свойств.
db.properties
db.driver=oracle.jdbc.driver.OracleDriver
AppConfig.java
@Configuration @PropertySource("classpath:db.properties") public class AppConfig { @Value("${db.driver}") private String driver;
Но заполнитель свойства${}
не может разрешиться в@Value
, если распечатать переменнуюdriver
, он будет отображать строку${db.driver}
напрямую вместо «oracle.jdbc.driver» .OracleDriver ».
Решение
Чтобы разрешить${}
в Spring@Value
, вам необходимо вручную объявить bean-компонентSTATICPropertySourcesPlaceholderConfigurer
. Например :
AppConfig.java
import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; @Configuration @PropertySource("classpath:db.properties") public class AppConfig { @Value("${db.driver}") private String driver; @Bean public static PropertySourcesPlaceholderConfigurer propertyConfigInDev() { return new PropertySourcesPlaceholderConfigurer(); } }
Для конфигурации XML Spring поможет вам автоматически зарегистрироватьPropertySourcesPlaceholderConfigurer
.
Note
Прочтите эту Spring JIRASPR-8539
Note
Вас может заинтересовать этотSpring @PropertySource example