14

我对基于 spring mvc 3 注释的应用程序非常陌生。我有两个属性文件 - WEB-INF\resources\general.properties,WEB-INF\resources\jdbc_config.properties

现在我想通过 spring-servlet.xml 配置它们。我怎样才能做到这一点?

在general.properties,

label.username = User Name:
label.password = Password:
label.address = Address:

...等 jdbc_config.properties,

app.jdbc.driverClassName=com.mysql.jdbc.Driver
app.jdbc.url=jdbc:mysql://localhost:[port_number]/
app.jdbc.username=root
app.jdbc.password=pass

- -ETC

如果我想在我的 jsp 页面中获取 label.username 和 app.jdbc.driverClassName,我该如何为它们编写代码?

我还想从我的服务中访问这些属性值。如何使用服务类或控制器类的方法级别中的相应键获取这些属性值?

4

3 回答 3

17

您需要区分应用程序属性(配置)和本地化消息。两者都使用 JAVA 属性文件,但它们的用途不同,处理方式也不同。

注意:我在下面的示例中使用基于 Java 的 Spring 配置。配置也可以很容易地用 XML 进行。只需检查 Spring 的JavaDoc参考文档


应用程序属性

应用程序属性应作为应用程序上下文中的属性源加载。这可以通过类上@PropertySource的注释来完成@Configuration

@Configuration
@PropertySource("classpath:default-config.properties")
public class MyConfig  {

    @Bean
    public static PropertySourcesPlaceholderConfigurer propertyPlaceholderConfigurer() {
        return new PropertySourcesPlaceholderConfigurer();
    }

}

@Value然后你可以使用注解注入属性:

@Value("${my.config.property}")
private String myProperty;

本地化消息

本地化消息有点不同。消息作为资源包加载,并且有一个特殊的解析过程来获取指定语言环境的正确翻译消息。

在 Spring 中,这些消息由MessageSources处理。例如,您可以通过以下方式定义自己的ReloadableResourceBundleMessageSource

@Bean
public MessageSource messageSource() {
    ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
    messageSource.setBasename("/WEB-INF/messages/messages");
    return messageSource;
}

如果让 Spring 注入,则可以从 bean 访问这些消息MessageSource

@Autowired
private MessageSource messageSource;

public void myMethod() {
    messageSource.getMessage("my.translation.code", null, LocaleContextHolder.getLocale());
}

您可以使用<spring:message>标记翻译 JSP 中的消息:

<spring:message code="my.translation.code" />
于 2013-07-01T20:20:40.233 回答
4

我最终使用了环境

将这些行添加到配置

@PropertySource("classpath:/configs/env.properties")
public class WebConfig extends WebMvcConfigurerAdapter{...}

您可以使用自动装配环境从控制器获取属性

public class BaseController {
    protected final Logger LOG = LoggerFactory.getLogger(this.getClass());

    @Autowired
    public Environment env;

    @RequestMapping("/")
    public String rootPage(ModelAndView modelAndView, HttpServletRequest request, HttpServletResponse response) {
        LOG.debug(env.getProperty("download.path"));
        return "main";
    }
}
于 2014-04-29T08:22:59.157 回答
4

首先导入spring标签库:

<%@ taglib prefix="security" uri="http://www.springframework.org/security/tags" %>  

比从您的 application.properties 导入属性

<spring:eval var="registration_url" expression="@environment.getProperty('service.registration.url')"/>  

比使用你的变量

<a href="<c:out value="${registration_url}"/>" class="btn btn-primary btn-block"> test </a>
于 2019-06-11T07:49:08.067 回答