如何设置由@PropertySource初始化的属性

时间:2013-11-01 19:17:45

标签: spring

我需要设置一些与管理界面相关的属性。 这是我初始化@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 个答案:

答案 0 :(得分:1)

Environment实现类以某种指定的顺序注册MutablePropertySources的实例。当需要从Environment解析属性时,它会(按顺序)迭代这些MutablePropertySources并使用它找到的第一个属性值。

获取所有MutablePropertySources个对象,迭代它们,找到与您的application.properties文件(或其他)对应的对象,获取其名称,并用新的{{1}替换它如果对象的值已更改,则无法执行此操作。

另请注意,Spring为PropertySource文件创建了一个PropertiesPropertySource对象,但它没有提供更改属性值的方法。