Java Spring Boot无法设置缓存

Java Spring Boot无法设置缓存,java,spring,maven,caching,spring-boot,Java,Spring,Maven,Caching,Spring Boot,尝试在Spring引导项目中设置Memcache,但它不起作用。我甚至尝试设置默认缓存(ConcurrentMapCacheManager),但效果并不理想 我读过的每个教程(甚至是Spring官方)都说这种配置足以设置缓存 缓存配置: @Configuration @EnableCaching public class CacheConfiguration { @Bean public CacheManager cacheManager() { return

尝试在Spring引导项目中设置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;
    }
...
}
pom.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>

org.springframework.boot
弹簧启动机aop
org.springframework.boot
spring引导启动器数据jpa
org.springframework.boot
SpringBootStarterWeb
1.5.2.1发布
org.springframework.boot
弹簧靴开发工具
1.5.2.1发布
org.springframework.boot
弹簧靴启动器jdbc
org.springframework.boot
弹簧启动安全
org.springframework.boot
弹簧启动启动器验证
org.postgresql
postgresql
运行时
org.hibernate
休眠实体管理器
5.2.12.最终版本
org.hibernate
冬眠核心
5.2.12.最终版本
org.hsqldb
hsqldb
运行时
共用池
共用池
org.hibernate
休眠验证器
Vladmichalcea网站
hibernate-types-52
1.1.1
公地收藏
公地收藏
3.2.2
javax.validation
验证api
2.0.0.1决赛
io.reactivex.rxjava2
rxjava
2.1.5
org.springframework.boot
springbootstarter缓存

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

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

@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 request
localhost:8080/test
并在
testdataservicecimpl.getEmail()
中放置一个断点时,您可以看到只有第一次实际执行该方法


如果您愿意,我添加了代码以便查看。

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

@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 request
localhost:8080/test
并在
testdataservicecimpl.getEmail()
中放置一个断点时,您可以看到只有第一次实际执行该方法


如果您愿意,我添加了代码以便查看。

如果您使用Memcached,您的UserEntity应该序列化(即UserEntity实现可序列化)


您可以查看一个使用Memcached的Spring Boot的小示例项目。

如果您使用Memcached,您的用户实体应该是序列化的(即,用户实体实现可序列化)


您可以查看一个使用Memcached的Spring Boot的小示例项目。

您能详细说明一下“它不起作用”吗?是否存在异常?@RobertFarley,每次都会执行同一个email参数的getByEmail方法,但它应该在第一次从另一个bean调用method
getByEmail
后缓存结果,例如从控制器调用?@Izagkaretos,是的,从另一个bean调用的方法可以详细说明“它不起作用”?是否存在异常?@RobertFarley,每次都会执行相同email参数的getByEmail方法,但它应该在第一次从另一个bean调用method
getByEmail
后缓存结果,例如从控制器调用?@Izagkaretos,是的,从另一个bean调用方法