metrics-spring配置通过.properties文件

时间:2014-08-05 09:08:11

标签: java spring metrics jersey-2.0

我正在尝试配置metrics-spring via configuration file

在我的 spring.xml 中,我添加了

<bean id="propertyPlaceholderConfigurer"
      class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
        <list>
            <value>
                classpath:metrics.properties
            </value>
        </list>
    </property>
    <property name="systemPropertiesModeName"
              value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/>
    <property name="searchSystemEnvironment" value="true"/>
</bean>

充满了像

这样的东西
metrics.reporter.type=console

然后我在spring config中设置它,通过$ {metrics.reporter.type}访问该属性

<metrics:reporter metric-registry="metrics" type="${metrics.reporter.type}" period="1m"/>

在启动Web应用程序期间,由于上面的BeanDefinitionParsingException,spring会抛出unresolved variable

  

配置问题:找不到记者类型'$ {metrics.reporter.type}'的ReporterElementParser

我正在使用这种配置方法(通过属性文件)用于mongo主机和端口,它就像一个魅力。

我在Tomcat7,Spring 4.0.5.RELEASE,度量框架3.1.0-SNAPSHOT(我需要jersey 2支持)和metrics-spring 3.0.1中运行。我也试过自编译的指标 - 春季3.1.0-SNAPSHOT,但没有解决我的问题。

[编辑]

找到这个issue,它解释了ElementParser不支持SpEL。

1 个答案:

答案 0 :(得分:1)

我担心在type属性中使用属性占位符是不可能的。 Spring不会解析属性占位符或SpEL,直到metrics-spring之后的阶段读取type属性并解析reporter元素(这是允许在所有其他属性中使用占位符和bean引用所必需的)。

一种可能的解决方案是配置您可能想要使用的所有报告者,并在enabled属性中使用占位符:

<metrics:reporter metric-registry="metrics" type="console" period="1m"
                  enabled="${metrics.reporter.console.enabled}" />

<metrics:reporter metric-registry="metrics" type="slf4j" period="1m"
                  enabled="${metrics.reporter.slf4j.enabled}" />

属性文件:

metrics.reporter.console.enabled=true
metrics.reporter.slf4j.enabled=false

我希望这是有道理的,我已经度过了漫长的一周!