使用Spring实现ehcache配置JMX?

时间:2017-06-14 15:45:30

标签: spring ehcache jmx

我正在尝试关注文章here& here为ehCache实现JMX。我的应用程序使用Spring实现然而&下面的配置条目会出现此异常:

  

org.springframework.beans.factory.UnsatisfiedDependencyException:   在类中定义名为'managementService'的bean时出错   路径资源[trs.application.finance.businessactivites.xml]:   通过构造函数参数表示不满意的依赖关系   类型为[net.sf.ehcache.CacheManager]的索引0:无法转换   构造函数的类型参数值   [org.springframework.cache.ehcache.EhCacheCacheManager]要求   type [net.sf.ehcache.CacheManager]:无法转换类型的值   'org.springframework.cache.ehcache.EhCacheCacheManager'到必需   输入'net.sf.ehcache.CacheManager';嵌套异常是   java.lang.IllegalStateException:无法转换类型的值   [org.springframework.cache.ehcache.EhCacheCacheManager]要求   type [net.sf.ehcache.CacheManager]:没有匹配的编辑器或转换   战略发现

spring是否有net.sf.ehcache.management.ManagementService的实现我可以使用吗?如果是这样我如何配置它,以便我可以在我的应用程序中为ehcache提供JMX支持。

注意,“managementService”& “mbeanServer”bean是我添加的尝试&让ehcache注册jmx。 “myCacheManager”已存在于我的spring config&似乎工作得很好,就像单独的ehcache一样。

 <bean id="managementService" class="net.sf.ehcache.management.ManagementService"
      init-method="init"
      destroy-method="dispose">
    <constructor-arg ref="myCacheManager"/>
    <constructor-arg ref="mbeanServer"/>
    <constructor-arg index="2" value="true"/>
    <constructor-arg index="3" value="true"/>
    <constructor-arg index="4" value="true"/>
    <constructor-arg index="5" value="true"/>
</bean>
<bean id="mbeanServer" class="org.springframework.jmx.support.MBeanServerFactoryBean">
      <property name="locateExistingServerIfPossible" value="true"/>
</bean>
<bean id="myCacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager">
    <property name="cacheManager">
        <bean class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
            <property name="configLocation" value="classpath:ehcache.xml"/>
        </bean>
    </property>
</bean>

1 个答案:

答案 0 :(得分:1)

问题在于你连接bean的方式。

您不想在myCacheManager中使用managementService,您真的想要使用返回的bean并将其作为cacheManager的{​​{1}}传递。

所以我建议移动以下内容:

myCacheManager

到顶级bean,以便可以在<bean class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"> <property name="configLocation" value="classpath:ehcache.xml"/> </bean> 中注入。