2013-11-01 4 views
0

Мне нужно установить некоторые свойства в отношении интерфейса администратора. Это, как я инициализирован @PropertySource:Как установить свойство, инициализированное @PropertySource

@Configuration 
@PropertySource("classpath:application.properties") 
public class MainConfig 

Теперь в моем администраторе контроллера мне нужно установить некоторые свойства из application.properties:

public @Controller @RequestMapping("admin") class AdminController { 
    private @Autowired Environment env; 

    public @RequestMapping(value = "settings.html", method = RequestMethod.POST) String processSettings(@Valid SettingsForm settingsForm, BindingResult result, Model model) { 
     if (result.hasErrors()) { 
      return settings(model); 
     } 

     // env.setProperty("foo.bar", settingsForm.getFooBar()); 
     return "redirect:settings.html"; 
    } 
} 

Но нет setProperty метода org.springframework.core.env.Environment. Что мне нужно сделать, чтобы установить эти свойства? Нужно ли создавать еще @Bean? Как должно выглядеть @Bean (без упоминания application.properties)?

ответ

1

Environment классы реализации регистрируют экземпляры MutablePropertySources в определенном порядке. Когда свойство должно быть разрешено с Environment, оно выполняет итерацию (в порядке) через эти MutablePropertySources и использует первое найденное значение свойства.

Короткие получать все MutablePropertySources объекты, перебирая их, находя тот, что соответствует вашему application.properties файл (или другой), получая свое имя и заменить его новым PropertySource объекта с измененным значением, нет никакого способа, сделать это.

Обратите внимание, что Spring создает объект PropertiesPropertySource для файлов .properties и не предоставляет способ изменения значений свойств.

+0

Тогда мне нужно использовать другой способ в моем бэкэнд и «Среда» в моем интерфейсе. – dtrunk

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