ehcache 3 无法与 Sprint Boot 1.5.22 配合使用

问题描述 投票:0回答:1

我是 Java 和 SpringBoot 新手。

resources

中的
ehcache.xml文件:

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://www.ehcache.org/v3"
        xmlns:jsr107="http://www.ehcache.org/v3/jsr107"
        xsi:schemaLocation="
            http://www.ehcache.org/v3 http://www.ehcache.org/schema/ehcache-core-3.0.xsd
            http://www.ehcache.org/v3/jsr107 http://www.ehcache.org/schema/ehcache-107-ext-3.0.xsd">

    <cache alias="configCache">
        <key-type>java.lang.Integer</key-type>
        <value-type>java.lang.Integer</value-type>
        <expiry>
            <ttl unit="minutes">60</ttl>
        </expiry>

        <listeners>
            <listener>
                <class>com.demo.example.ehcache.CacheEventLogger</class>
                <event-firing-mode>ASYNCHRONOUS</event-firing-mode>
                <event-ordering-mode>UNORDERED</event-ordering-mode>
                <events-to-fire-on>CREATED</events-to-fire-on>
                <events-to-fire-on>EXPIRED</events-to-fire-on>
            </listener>
        </listeners>

        <resources>
            <heap unit="entries">2</heap>
            <offheap unit="MB">10</offheap>
        </resources>
    </cache>

</config>

application.properties
中的以下行:

spring.cache.jcache.config=classpath:ehcache.xml

缓存事件记录器:

package com.demo.example.ehcache;

import com.github.structlog4j.ILogger;
import com.github.structlog4j.SLoggerFactory;
import org.ehcache.event.CacheEvent;
import org.ehcache.event.CacheEventListener;

public class CacheEventLogger implements CacheEventListener<Object, Object> {
    private final ILogger log = SLoggerFactory.getLogger(CacheEventLogger.class);

    @Override
    public void onEvent(CacheEvent<? extends Object, ? extends Object> cacheEvent) {
        log.info("Cache event {} for item with key {}. Old value = {}, New value = {}",
                cacheEvent.getType(),
                cacheEvent.getKey(),
                cacheEvent.getOldValue(),
                cacheEvent.getNewValue());
    }
}

ConfigManager.Java:

package com.demo.example.ehcache;

import org.springframework.cache.annotation.Cacheable;

public class ConfigManager {
    public ConfigManager() {
    }

    @Cacheable(value = "configCache", key="#number")
    public int getNumber(int number) {
        return number;
    }
}

CachingConfig.java:

package com.demo.example.configuration;

import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Configuration;


@Configuration
@EnableCaching
public class CachingConfig {

}

pom.xml 中的以下依赖项:

    <dependency>
        <groupId>org.ehcache</groupId>
        <artifactId>ehcache</artifactId>
        <version>3.8.1</version>
    </dependency>
    <dependency>
        <groupId>javax.cache</groupId>
        <artifactId>cache-api</artifactId>
        <version>1.1.1</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-cache</artifactId>
    </dependency>

ServiceFacadeImpl.java:

@Component
public class ServiceFacadeImpl { 
  private final ConfigManager ConfigManager;

  ServiceFacadeImpl()
  {
    this.ConfigManager = new ConfigManager();
  }
 
  @Override
  public Integer getNumber() throws UpfrontException {
    configManager.getNumber(1); //hard coded 1 here
  }
}

我总是在 getNumber 中传递固定的整数值 1,但它总是执行该函数。为什么缓存不起作用?

java spring spring-boot ehcache ehcache-3
1个回答
-1
投票

您似乎遇到了 Ehcache 3 无法与 Spring Boot 1.5.22 配合使用的问题。以下是 Stack Overflow1 上发布的类似问题的一些详细信息:

用户在资源中有一个 ehcache.xml 文件,其缓存别名为“configCache”,监听器类为 com.demo.example.ehcache.CacheEventLogger。 application.properties 文件具有 spring.cache.jcache.config=classpath:ehcache.xml 行。 CacheEventLogger 类实现了 CacheEventListener。 ConfigManager 类有一个方法 getNumber(int number),并用 @Cacheable(value = "configCache", key="#number") 注释。 CachingConfig 类使用@Configuration 和@EnableCaching 进行注释。 pom.xml 文件具有 ehcache 版本 3.8.1、cache-api 版本 1.1.1、spring-boot-starter-web 和 spring-boot-starter-cache 的依赖项。 如果您的设置类似并且仍然遇到问题,检查以下内容可能会有所帮助:

确保您的 ehcache.xml 已正确配置并位于正确的位置。 确保您的 CacheEventLogger 和 ConfigManager 类已正确实现。 检查您的 pom.xml 是否具有正确的依赖项和版本。 验证您的 application.properties 文件是否具有正确的配置。

© www.soinside.com 2019 - 2024. All rights reserved.