Spring boot 如何在Spring Boot中注册对EhCache的JMX支持?
我正在尝试为JMX配置EhCache。看起来我只需要使用EhCacheManager并为mBeanServer注册它 这是我的配置:Spring boot 如何在Spring Boot中注册对EhCache的JMX支持?,spring-boot,configuration,ehcache,jmx,Spring Boot,Configuration,Ehcache,Jmx,我正在尝试为JMX配置EhCache。看起来我只需要使用EhCacheManager并为mBeanServer注册它 这是我的配置: @Configuration public class EhcacheConf { @Bean public CacheManager getEhCacheManager() { return getEhCacheFactory().getObject(); } public EhCacheManagerFact
@Configuration
public class EhcacheConf {
@Bean
public CacheManager getEhCacheManager() {
return getEhCacheFactory().getObject();
}
public EhCacheManagerFactoryBean getEhCacheFactory() {
EhCacheManagerFactoryBean factoryBean = new EhCacheManagerFactoryBean();
factoryBean.setConfigLocation(new ClassPathResource("ehcache.xml"));
factoryBean.setShared(true);
return factoryBean;
}
@Bean
public ManagementService managementService() {
return new ManagementService(getEhCacheManager(),
mbeanServer(),
true,
true,
true,
true,
true);
}
@Bean
public MBeanServer mbeanServer() {
MBeanServerFactoryBean mBeanServerFactoryBean = new MBeanServerFactoryBean();
mBeanServerFactoryBean.setLocateExistingServerIfPossible(true);
return mBeanServerFactoryBean.getObject();
}
}
应用程序.yaml
spring:
datasource:
url: "jdbc:h2:file:~/testdb"
username: sa
password: sa
driver-class-name: org.h2.Driver
jpa:
hibernate:
ddl-auto: create-drop
cache:
type: ehcache
ehcache:
config: classpath:ehcache.xml
endpoints:
jmx:
domain: quiz
unique-names: true
ehcache.xml
<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"
updateCheck="false"
monitoring="autodetect"
dynamicConfig="true">
<cache name="Folder"
maxEntriesLocalHeap="10000"
maxEntriesLocalDisk="1000"
eternal="false"
diskSpoolBufferSizeMB="20"
timeToIdleSeconds="300" timeToLiveSeconds="600"
memoryStoreEvictionPolicy="LFU"
transactionalMode="off">
<persistence strategy="localTempSwap"/>
</cache>
</ehcache>
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
<!-- Caching -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
4.0.0
com.example
演示
0.0.1-快照
罐子
演示
SpringBoot的演示项目
org.springframework.boot
spring启动程序父级
1.4.3.1发布
UTF-8
UTF-8
1.8
org.springframework.boot
弹簧靴起动器执行器
org.springframework.boot
弹簧启动启动器数据rest
org.springframework.boot
spring引导启动器数据jpa
org.springframework.boot
弹簧启动安全
org.springframework.boot
SpringBootStarterWeb
com.h2数据库
氢
org.springframework.boot
springbootstarter缓存
net.sf.ehcache
ehcache
org.projectlombok
龙目
真的
org.springframework.boot
springbootmaven插件
有人知道怎么回事吗
首先,使用Spring Boot配置Ehcache2.x不需要这些东西。您真正需要的是
@EnableCaching
ehcache依赖项和位于通常位置的ehcache.xml
配置文件
您的配置还覆盖了MBeanServer
,它关闭了Spring Boot为您提供的功能
无论如何,一个样本抵得上千言万语,所以
编辑:感谢Timur Milovanov提到此示例不会在关机时注销MBean,我已更新此示例以修复此问题。感谢您的帮助!样品太棒了!Nicoll中的示例不会在上下文停止时注销mbean。一个静态方法javadoc:一个方便的静态方法,它创建。。。这是为了向后兼容而提供的。最好定义bean并使用
ManagementService
的构造函数。在bean定义中,您应该定义init/destroy方法:@bean(initMethod=“init”,destromethod=“dispose”)
。此ManagementService#dispose
方法从MBeanServer注销与缓存相关的实例。PS:如果您在容器(tomcat、jetty)中部署/取消部署应用程序而不重新启动该容器,则取消注册可能很重要。非常感谢@TimurMilovanov,我已经更新了示例。