【问题标题】:Configure JMX with Spring implementation of ehcache?使用 ehcache 的 Spring 实现配置 JMX?
【发布时间】:2017-06-14 15:45:30
【问题描述】:

我正在尝试按照文章herehere 为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] 为必需 类型 [net.sf.ehcache.CacheManager]:没有匹配的编辑器或转换 找到策略

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

注意,“managementService”和“mbeanServer”bean 是我添加的,用于尝试让 ehcache 注册到 jmx。 “myCacheManager”已经存在于我的 spring 配置中并且似乎工作正常,就 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>

【问题讨论】:

    标签: spring ehcache jmx


    【解决方案1】:

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

    你不想在managementService 中使用myCacheManager,你真的想使用作为cacheManagercacheManagermyCacheManager 返回并传递的bean。

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

    <bean class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
        <property name="configLocation" value="classpath:ehcache.xml"/>
    </bean>
    

    到顶级 bean,以便可以将其注入 managementService

    【讨论】:

      猜你喜欢
      • 2015-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-25
      • 2015-01-25
      • 2019-05-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多