我正在尝试关注文章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>
答案 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>
中注入。