0%

SpringBoot集成Cache

pom.xml

1
2
3
4
5
6
7
8
9
10
<!-- cache -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<!-- ehcache -->
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache</artifactId>
</dependency>

修改Application类,加入启用缓存的注解@EnableCaching

1
2
3
4
5
6
7
8
9
10
11
@SpringBootApplication
@MapperScan("cn.joinhealth.mapper")
@ComponentScan(basePackages = {"cn.joinhealth.*"})
@EnableDubboConfiguration
@EnableCaching
public class SpringbootDemoApplication {

public static void main(String[] args) {
SpringApplication.run(SpringbootDemoApplication.class, args);
}
}

application.yml

1
2
3
4
5
spring:
cache:
type: ehcache
ehcache:
config: classpath:/ehcache.xml

ehcache.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<ehcache>
<!--
磁盘存储:将缓存中暂时不使用的对象,转移到硬盘,类似于Windows系统的虚拟内存
path:指定在硬盘上存储对象的路径
path可以配置的目录有:
user.home(用户的家目录)
user.dir(用户当前的工作目录)
java.io.tmpdir(默认的临时目录)
ehcache.disk.store.dir(ehcache的配置目录)
绝对路径(如:d:\\ehcache)
查看路径方法:String tmpDir = System.getProperty("java.io.tmpdir");
-->
<diskStore path="java.io.tmpdir" />

<!--
defaultCache:默认的缓存配置信息,如果不加特殊说明,则所有对象按照此配置项处理
maxElementsInMemory:设置了缓存的上限,最多存储多少个记录对象
eternal:代表对象是否永不过期 (指定true则下面两项配置需为0无限期)
timeToIdleSeconds:最大的发呆时间 /秒
timeToLiveSeconds:最大的存活时间 /秒
overflowToDisk:是否允许对象被写入到磁盘
说明:下列配置自缓存建立起600秒(10分钟)有效
在有效的600秒(10分钟)内,如果连续120秒(2分钟)未访问缓存,则缓存失效。
就算有访问,也只会存活600秒。
-->
<defaultCache maxElementsInMemory="10000" eternal="false"
timeToIdleSeconds="600" timeToLiveSeconds="600" overflowToDisk="true" />
<cache name="user" maxElementsInMemory="10000" eternal="false"
timeToIdleSeconds="120" timeToLiveSeconds="600" overflowToDisk="true" />
</ehcache>

UserServiceImpl.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
package cn.joinhealth.service.impl;

import cn.joinhealth.mapper.UserMapper;
import cn.joinhealth.model.User;
import cn.joinhealth.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;

import java.util.List;

/**
* UserServiceImpl
*
* @author linjian
* @date 2018/7/27 上午11:25
*/
@Service("userService")
@CacheConfig(cacheNames = {"user"})
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;

/**
* 新增用户
*
* @param user
*/
@Override
@CachePut(key = "#user.userId")
public User save(User user) {
userMapper.insert(user);
return user;
}

/**
* 分页获取用户
*
* @return
*/
@Override
public List<User> list() {
return userMapper.listUser();
}

/**
* 根据id获取用户
*
* @param id
* @return
*/
@Override
@Cacheable(key = "#id")
public User get(Integer id) {
return userMapper.selectByPrimaryKey(id);
}

/**
* 根据id删除用户
*
* @param id
*/
@Override
@CacheEvict(key = "#id")
public void delete(Integer id) {
userMapper.deleteByPrimaryKey(id);
}

/**
* 编辑用户
*
* @param user
*/
@Override
@CachePut(key = "#user.userId")
public User update(User user) {
userMapper.updateByPrimaryKey(user);
return user;
}
}