我需要设置一些与管理界面相关的属性。
这是我初始化@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
)?
答案 0 :(得分:1)
Environment
实现类以某种指定的顺序注册MutablePropertySources
的实例。当需要从Environment
解析属性时,它会(按顺序)迭代这些MutablePropertySources
并使用它找到的第一个属性值。
获取所有MutablePropertySources
个对象,迭代它们,找到与您的application.properties
文件(或其他)对应的对象,获取其名称,并用新的{{1}替换它如果对象的值已更改,则无法执行此操作。
另请注意,Spring为PropertySource
文件创建了一个PropertiesPropertySource
对象,但它没有提供更改属性值的方法。