0

我需要设置一些与管理界面相关的属性。这就是我初始化的方式@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)?

4

1 回答 1

1

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

如果没有获取所有MutablePropertySources对象,遍历它们,找到与您的application.properties文件(或其他)相对应的对象,获取其名称,并将其替换为具有PropertySource更改值的新对象,则无法做到这一点。

另请注意,SpringPropertiesPropertySource为文件创建了一个对象.properties,但它不提供更改属性值的方法。

于 2013-11-01T21:37:29.990 回答