Java SpringMVC,如何读取和访问application.properties?
我正在使用SpringMVC(和Hibernate)开发一个应用程序,对配置问题感到有点困惑。有这么多设置和配置Spring应用程序的方法,这些方法有时甚至在整个教程中混合使用,这并没有使它变得更简单 我使用Spring4进行基于Java的纯配置,因此不需要XML配置文件。应用程序的入口点是AbstractAnnotationConfigDispatcherServletInitializer的子类:Java SpringMVC,如何读取和访问application.properties?,java,spring,spring-mvc,Java,Spring,Spring Mvc,我正在使用SpringMVC(和Hibernate)开发一个应用程序,对配置问题感到有点困惑。有这么多设置和配置Spring应用程序的方法,这些方法有时甚至在整个教程中混合使用,这并没有使它变得更简单 我使用Spring4进行基于Java的纯配置,因此不需要XML配置文件。应用程序的入口点是AbstractAnnotationConfigDispatcherServletInitializer的子类: public class MvcWebApplicationInitializer exten
public class MvcWebApplicationInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[] {
HibernateConfig.class,
ServiceConfig.class };
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[] {MvcConfig.class};
}
@Override
protected String[] getServletMappings() {
return new String[] {"/"};
}
}
如我们所见,这些属性在包含@PropertySource注释的配置文件中使用。
但很可能其他配置文件也需要访问application.properties。而且,我计划在这个文件中定义更多的属性,例如存储用户图像的目录。控制器方法中需要这些信息,因此我需要一种更全局的方式来访问application.properties
因此,我的问题是:
- 注入的环境是否只允许访问属性文件 如果@PropertyResource是在完全相同的配置中定义的 上课李>
- 当多个@Configuration类需要访问 application.properties,是否需要将@PropertyResources添加到 全部(强制我们重复属性文件的名称)
- 我们如何从控制器类访问属性文件而不使用 是否显式加载它,并重复其名称
- 否。
添加到您的配置后,您可以访问 从应用程序的任何bean访问此属性文件。豆子之前 创建时,Spring收集所有配置的所有属性源, 并将其放入应用程序上下文的单一环境中@PropertyResource
- 不,我们不需要将
添加到所有资源中。你 可以将属性源添加到一个配置中,并在 另一个。所以,不需要重复属性文件的名称。 声明一次,并在任何地方使用@PropertyResources
- 正如您在控制器中所猜测的那样,它与在其他bean中一样有效。你
只需在配置中声明
,将此配置添加到 您可以创建上下文,并在控制器中使用属性。当然,你可以 autowire@PropertyResources
,就像您在示例中所做的那样,并获取 属性。但是在我看来使用环境
注释 更方便一点:@Value
@Configuration @PropertySource(value= {"classpath:application.properties"}) public class MyConfig{ //spring will automatically bind value of property @Value("${my.property}") private String myProperty; //this bean needed to resolve ${property.name} syntax @Bean public static PropertySourcesPlaceholderConfigurer propertyConfigInDev() { return new PropertySourcesPlaceholderConfigurer(); } }
@Controller
public class MyController{
//spring will automatically bind value of property
@Value("${my.property}")
private String myProperty;
@RequestMapping("/mapping")
public String controllerMethod(){
...
}
}
环境如何不够全球化。所有@PropertySource
注释都被解析并放入其中。您可以在任何地方访问环境
,并访问加载的所有属性。简而言之,1。否,2否,3使用环境
。感谢您的回答,这是否意味着我可以仅用@PropertySource注释一个配置类,然后在任何其他配置类中注入环境?我认为使用额外的通用配置类也会更好,因为现在注释位于Hibernate配置类上,但当application.properties文件也将包含与Hibernate无关的属性时,不应将其加载到Hibernate专用配置类中…这取决于您,无论环境如何,注释的放置方式和位置都将包含所有注释。谢谢,这确实让您的注释更加清晰!太可怕了!我只是添加了:@PropertySource(value={“classpath:config.properties”})@RestController公共类XController{@RequestMapping(${upload.multiFile}”)公共响应属性uploadMulti(){}
@Controller
public class MyController{
//spring will automatically bind value of property
@Value("${my.property}")
private String myProperty;
@RequestMapping("/mapping")
public String controllerMethod(){
...
}
}