在spring mvc 3.x中存储自定义配置信息的好地方在哪里?如何通过任何控制器全局访问该信息?
是否有内置的配置管理器?
答案 0 :(得分:2)
我认为'自定义配置'是指代码读取/您/您的运营团队可以更新的配置文件?
一个简单的解决方案是使用spring beans xml配置文件并以爆炸方式部署你的战争。
创建配置java类:
// File: MyConfig.java ------------------------------------
public class MyConfig {
private String supportEmail;
private String websiteName;
// getters & setters..
}
将类配置为Spring bean并在spring beans xml文件上设置其属性(也可以创建新文件并使用<import resource="..."/>
):
// File: root-context.xml ----------------------------------------
<beans ...>
...
<bean class="com.mycompany.MyConfig">
<property name="supportEmail" value="support@mycompany.com"/>
<property name="websiteName" value="Hello Site"/>
</bean>
...
</beans>
注入配置类(例如:在控制器中)
// File: HelloController.java ------------------------------------
@Controller
@RequestMapping("/hello")
public class HelloController {
@Autowired MyConfig config;
// ...
}
但是,配置更新需要重新部署/重新启动服务器
答案 1 :(得分:2)
您也可以使用<context:property-placeholder>
。
看起来像这样。
myapp.properties:
foo=bar
spring beans xml:
<context:property-placeholder location="classpath:myapp.properties"/>
或者
<context:property-placeholder location="file:///path/to/myapp.properties"/>
控制器:
import org.springframework.beans.factory.annotation.Value;
...
@Controller
public class Controller {
@Value("${foo}")
private String foo;
如果您想以编程方式获取媒体资源,可以将Environment
与@PropertySource
一起使用。
配置:
@Configuration
@PropertySource("classpath:myapp.properties")
public class AppConfig {
@Bean
public PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
控制器:
@Controller
public class Controller {
@Value("${foo}")
private String foo;
@Autowired
private Environment env;
@RequestMapping(value = "dosomething")
public String doSomething() {
env.getProperty("foo");
...
}
希望这有帮助。