2016-06-01 2 views
2

Мой контроллер имеет@value в моем весеннем контроллер не работает

@Value("${myProp}") 
private String myProp; 

@Bean 
public static PropertySourcesPlaceholderConfigurer propertyConfigInDev() { 
    return new PropertySourcesPlaceholderConfigurer(); 
} 

@RequestMapping(value = "myProp", method = RequestMethod.GET) 
public @ResponseBody String getMyProp(){ 
    return "The prop is:" + myProp; 
} 

мой applicationcontext.xml имеет

<bean id="appConfigProperties" class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer"> 
    <property name="location" value="classpath:MyApps-local.properties" /> 
</bean> 

я получаю следующее исключение:

причиненный: java.lang .IllegalArgumentException: Не удалось разрешить placeholder 'myProp' в строковом значении "$ {myProp}"

Примечание: Мои свойства файла MyApps-local.properties находится в classpath и содержит myProp=delightful

любая помощь будет здорово ....

+0

Как вы уверены, что 'MyApps-local.properties' находится в' classpath'? – dieend

+0

, когда вы сказали, что он не работает в контроллере, вы имели в виду, что он работает на другие бобы? –

ответ

2

В конфигурации на основе XML вам необходимо использовать PropertyPlaceholderConfigurer bean

<beans xmlns="http://www.springframework.org/schema/beans" . . . > 
    . . . 
    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
     <property name="location" value="classpath:database.properties" /> 
    </bean> 
    . . . 
</beans> 

, но вы можете использовать значение из database.properties в конфигурации XML только

<beans xmlns="http://www.springframework.org/schema/beans" . . > 
    . . . 
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
     <property name="driverClassName" value="${jdbc.driverClassName}" /> 
     <property name="url" value="${jdbc.url}" /> 
     <property name="username" value="${jdbc.username}" /> 
     <property name="password" value="${jdbc.password}" /> 
    </bean> 
    . . . 
</beans> 

Если вы хотите использовать значение из свойств файлов внутри @Value аннотации для полого бин, вам нужно добавить @Confuguration и @PropertySource аннотацию bean class. Нравится

@Configuration 
@PropertySource("classpath:database.properties") 
public class AppConfig { 

    @Value("${jdbc.url}") 
    private String url; 

    @Bean 
    public static PropertySourcesPlaceholderConfigurer propertyConfigInDev() { 
     return new PropertySourcesPlaceholderConfigurer(); 
    } 
} 
-1

Читай внимательно этот http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-application-property-files

Для Дев-режима использования профиля -специфические свойства

+0

так в чем проблема? И OP не сказал, что использует весенний ботинок. Я понятия не имею, как страница, описывающая поведение, связанное с весенней загрузкой, связана с вопросом –

1

В вашей конфигурации у вас есть два PropertySourcesPlaceholderConfigurer. Первый, определенный в DispatcherServlet с использованием Java @Configuration, использует стандартную среду для поиска свойств. Это означает свойства из системной среды и переменных среды, а также определенный источник @PropertySource.

Это не известно о файле MyApps-local.properties, указанном в applicationContext.xml. Второй PropertySourcesPlaceholderConfigurer в файле xml знает файл MyApps-local.properties, но он только заносится в место корневого приложения

Пост-процессоры фасоли обрабатываются в контексте приложения.

Изменение вам контекст веб-приложения, чтобы указать source.This собственности будет добавить свойства в файл в среде

@Configuration 
@PropertySource("classpath:MyApps-local.properties") 
public class WebConfig{ 
    @Autowired 
    private Environment env; 

    @RequestMapping(value = "myProp", method = RequestMethod.GET) 
    public @ResponseBody String getMyProp(){ 
     return "The prop is:" + env.getProperty("myProp"); 
    } 
} 

В этом случае вам не нужно в PropertySourcesPlacheholder, как вы можете запросить он свойств от Окружающая среда. Затем сохраните свой applicationContext.xml как есть

Он также будет работать с PropertySourcesPlaceholder @Bean, поскольку он также выбирает свойства из окружающей среды.Однако abover чист, чем ниже

@Configuration 
@PropertySource("classpath:MyApps-local.properties") 
public class WebConfig{ 

    @Value("${myProp}") 
    private String myProp; 

    @Bean 
    public static PropertySourcesPlaceholderConfigurer propertyConfigInDev() { 
    return new PropertySourcesPlaceholderConfigurer(); 
    } 

    @RequestMapping(value = "myProp", method = RequestMethod.GET) 
    public @ResponseBody String getMyProp(){ 
    return "The prop is:" + myProp; 
    } 
} 
0

Смотрите, если это помогает

  1. Вы можете пойти дальше и использовать этот UTIL тег в конфигурации XML

<util:properties id="appConfigProperties" location="location to your properties file" /> <context:property-placeholder properties-ref="appConfigProperties" />

  1. приходит из схемы http://www.springframework.org/schema/utilhttp://www.springframework.org/schema/util/spring-util-3.1.xsd

  2. Тогда в вас коде, где вы хотите, чтобы значение из файла свойств использовать его в качестве

@value ("$ {myPropl} ")
private String str;

работает для меня, дайте мне знать, если вы застряли где-либо :)

Смежные вопросы