2016-12-28 10 views
0

JMX用にEhCacheを設定しようとしています。私はEhCacheManagerを使用してmBeanServerに登録する必要があるように見えます。ここでSpringブートでEhCacheのJMXサポートを登録するにはどうすればよいですか?

は私のconfigsです:

@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(); 
    } 

} 

application.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> 

誰かが間違っていることを知っていますか?

おかげで、すべての

答えて

5

まず、あなたが春ブーツとEhcacheの2.xのを構成するためにすべてのものを必要としません。実際に必要なのは、@EnableCachingのehcache依存関係と、通常の場所にあるehcache.xml設定ファイルです。

あなたの設定では、MBeanServerも無効になっています。これは、Spring Bootの機能を無効にします。

とにかく1000語のサンプルがありますので、I've created one for youです。

編集:このサンプルはシャットダウン時にMBeanの登録を解除しないことに言及してくれたTimur Milovanovに感謝します。修正するためにサンプルを更新しました。

+0

ありがとうございました!サンプルは素晴らしいです! –

+0

Nicollのサンプルはコンテキスト停止時にmbeanの登録を解除しません。 静的メソッドjavadoc:_A便利な静的メソッド...これは下位互換性のために提供されています_ Beanを定義し、 'ManagementService'のコンストラクタを使用するほうが良いかもしれません。 Beanの定義では、init/destroyメソッドを定義する必要があります: '@Bean(initMethod =" init "、destroyMethod =" dispose ")'。この 'ManagementService#dispose'メソッドは、MBeanServerからキャッシュ関連のインスタンスを登録解除します。 PS:コンテナ(tomcat、jetty)にアプリケーションをデプロイ/アンデプロイする場合、そのコンテナを再起動しなくても登録解除が重要になる可能性があります。 –

+1

@TimurMilovanovありがとうございます。サンプルを更新しました。 –

関連する問題