当前位置: 首页 > 知识库问答 >
问题:

Spring Boot无法设置缓存

喻昀
2023-03-14

尝试在Spring Boot项目中设置Memcache,但它不起作用。我甚至尝试设置默认缓存(ConcurrentMapCacheManager),但效果并不理想。

我读过的每个教程(甚至是Spring官方)都说这种配置足以设置缓存

缓存配置:

@Configuration
@EnableCaching
public class CacheConfiguration {

    @Bean
    public CacheManager cacheManager() {
        return new ConcurrentMapCacheManager("test_cache");
    }

}

缓存使用:

@Service
@CacheConfig(cacheNames = "test_cache")
public class UserServiceImpl extends IUserService {
  ...
    @Cacheable
    public UserEntity getByEmail(String email) {
        UserEntity entity = repository.findByEmail(email);

        return entity;
    }
...
}

波姆。xml

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</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-web</artifactId>
            <version>1.5.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <version>1.5.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</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-validation</artifactId>
        </dependency>   
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>5.2.12.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>5.2.12.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hsqldb</groupId>
            <artifactId>hsqldb</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>commons-pool</groupId>
            <artifactId>commons-pool</artifactId>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
        </dependency>
        <dependency>
            <groupId>com.vladmihalcea</groupId>
            <artifactId>hibernate-types-52</artifactId>
            <version>1.1.1</version>
        </dependency>
        <dependency>
            <groupId>commons-collections</groupId>
            <artifactId>commons-collections</artifactId>
            <version>3.2.2</version>
        </dependency>
        <dependency>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
            <version>2.0.0.Final</version>
        </dependency>
        <dependency>
            <groupId>io.reactivex.rxjava2</groupId>
            <artifactId>rxjava</artifactId>
            <version>2.1.5</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-cache</artifactId>
        </dependency>
    </dependencies>

是否有可能某些依赖项与spring缓存依赖项冲突?

共有2个答案

孟凯泽
2023-03-14

我刚刚创建了一个演示项目来演示这个简单的缓存配置是如何工作的。

@Configuration
@EnableCaching
public class CachingConfig {

    @Bean
    public CacheManager cacheManager() {
        return new ConcurrentMapCacheManager("test_cache");
    }
}

服务的接口。

public interface TestDataService {
    String getEmail(String email);
}

相应的实现。

@Service
@CacheConfig(cacheNames={"test_cache"})
public class TestDataServiceImpl implements TestDataService {

    @Cacheable
    public String getEmail(String email) {
        return email;
    }
}

还有一个虚拟控制器。

@RestController
public class TestDataController {

    private TestDataService testDataService;

    @Autowired
    public TestDataController(TestDataService testDataService) {
        this.testDataService = testDataService;
    }

    @RequestMapping(value = "test")
    String getEmail() {
        return testDataService.getEmail("test.me");
    }
}

然后,当您调用http请求localhost:8080/test并在TestDataServiceImpl中放置一个断点时。getEmail()您可以看到,只有在第一次实际执行该方法时。

我已经在github中添加了代码,如果您愿意的话,可以查看一下。

乌翰学
2023-03-14

如果您使用的是Memcached,那么您的UserEntity应该被序列化(即UserEntity实现Serializable)。

您可以在此处查看使用Memcache的Spring Boot的小示例项目。

 类似资料:
  • 以下是错误消息 java.lang.IllegalStateException:无法加载ApplicationContext 一个使用elasticSearch、mysql、redis等的Spingboot项目,谷歌有很多,但他只是一个新的Spingboot。网上的东西不管用。我不知道怎么改。 application-local.yml 应与ES的配置相关 控制器

  • 我重新安装了我的android工作室,因为找不到sdk等等。重新安装java jdk和android工作室后,一切都很好,直到我收到一个错误,提示“无法初始化类org.codehaus.groovy.runtime.InvokerHelper”,我通过更改Gradle版本解决了这个问题。现在错误是“类型”Flutter任务“属性”资产“缺少输入或输出注释。” 失败:构建失败,但有例外。 出了什么问

  • set 设置普通类型的值 设置 set set(key: string, value: string expiryMode: string[ EX 秒 PX 分钟 ], time: number ) key: 键名称 value:存储的值 expiryMode:添加过期时间类型 EX 秒 PX 分钟 time:过期时间 // 存储一个key为gender,value 为 男人的数据,10秒后过期

  • 我试图设置本地DynamoDB实例与SpringBoot。我跟着这个,但是格拉德尔。 当我尝试运行我的应用程序时,会出现以下异常: 我知道这是由于歧义导致的依赖注入失败,但我的是一个无参数构造函数。不确定歧义在哪里。 以下是我的代码: 格雷德尔锉刀 发电机配置 代理(实体) @DynamoDBTable(tableName="Agent")公共类Agent{私有字符串代理号;私有整数id;私有企业

  • 本文向大家介绍C# Cache缓存读取的设置方法,包括了C# Cache缓存读取的设置方法的使用技巧和注意事项,需要的朋友参考一下 先创建一个CacheHelper.cs类,代码如下: 然后是调用:  测试结果: 首次加载进来是为null,然后读取数据库,添加进缓存,当前返回前台的是从数据库中取出的数据。 刷新页面,发现缓存中已经有了读出的30条数据, 然后接下来走,返回缓存中的数据: 以上就是C

  • JSON查询应该可以使用多个搜索参数。为此,服务器需要获取每个参数作为搜索对象,例如: 我们在swagger中使用下面的声明: 问题是,从swagger生成的PHP库创建的请求如下: 这是服务器无法使用的。为了解决这个问题,我发现可以通过将属性“collectionFormat”设置为csv而不是multi来影响这个行为。 我的问题是,声明取自示例页面https://swagger.io/docs