本文将展示spring boot 结合 hazelcast 的缓存使用案例。
1. project structure
2. maven dependencies
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
|
<?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.zzf</groupid> <artifactid>spring-boot-hazelcast</artifactid> <version> 1.0 -snapshot</version> <parent> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-parent</artifactid> <version> 2.0 . 1 .release</version> </parent> <dependencies> <!-- spring boot --> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-cache</artifactid> </dependency> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-actuator</artifactid> </dependency> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-web</artifactid> </dependency> <!-- hazelcast jar --> <dependency> <groupid>com.hazelcast</groupid> <artifactid>hazelcast-all</artifactid> <version> 3.10 . 1 </version> </dependency> </dependencies> <build> <plugins> <plugin> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-maven-plugin</artifactid> </plugin> </plugins> </build> </project> |
3. hazelcast caching service
通过使用
- @cachable注释来注释play方法,将缓存后续调用的结果。
- @cacheevict(allentries=true)清除缓存中的所有条目。
- @cacheconfig(cachenames=”instruments”)注册了带有指定缓存的spring框架缓存注释的所有方法。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
@service @cacheconfig (cachenames = "instruments" ) public class musicservice { private static logger log = loggerfactory.getlogger(musicservice. class ); @cacheevict (allentries = true ) public void clearcache(){} // 表示的是属性为 trombone 就进行缓存 @cacheable (condition = "#instrument.equals('trombone')" ) public string play(string instrument){ log.info( "executing: " + this .getclass().getsimplename() + ".play(\"" + instrument + "\");" ); return "playing " + instrument + "!" ; } } |
4. hazelcast caching configuration
如果类路径下存在hazelcast, spring boot 将会自动创建hazelcast 的实例。
下面将介绍两种加载的方式:
- 使用java 配置的方式
- 使用hazelcast.xml xml 的配置
4.1 hazelcast java configuration
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
@configuration public class hazelcastconfiguration { @bean public config hazelcastconfig(){ return new config().setinstancename( "hazelcast-instance" ) .addmapconfig( new mapconfig() .setname( "instruments" ) .setmaxsizeconfig( new maxsizeconfig( 200 , maxsizeconfig.maxsizepolicy.free_heap_size)) .setevictionpolicy(evictionpolicy.lru) .settimetoliveseconds( 20 ) ); } } |
4.2 hazelcast xml configuration
可以使用xml 配置 hazelcast , 在src/main/resources 添加一个文件hazelcast.xml
spring boot 将会自动注入配置文件, 当然也可以指定路径路径, 使用属性spring.hazelcast.config 配置在yml 或者properties 文件中, 例如下面所示:
1
2
3
4
5
6
7
8
9
10
11
12
|
<?xml version= "1.0" encoding= "utf-8" ?> <hazelcast xsi:schemalocation= "http://www.hazelcast.com/schema/config http://www.hazelcast.com/schema/config/hazelcast-config.xsd" xmlns= "http://www.hazelcast.com/schema/config" xmlns:xsi= "http://www.w3.org/2001/xmlschema-instance" > <map name= "instruments" > <max-size> 200 </max-size> <eviction-policy>lfu</eviction-policy> <time-to-live-seconds> 20 </time-to-live-seconds> </map> </hazelcast> |
具体的application.properties 和 application.yml 文件显示
1
2
3
4
|
# application.yml spring: hazelcast: config: classpath:config/hazelcast.xml |
1
2
|
# application.properties spring.hazelcast.config=classpath:config/hazelcast.xml |
5. 访问controller
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
|
@controller public class hazelcastcontroller { private logger logger = loggerfactory.getlogger(hazelcastcontroller. class ); @autowired private musicservice musicservice; @autowired private cachemanager cachemanager; @requestmapping ( "/hezelcast" ) @responsebody public void gethazelcast(){ logger.info( "spring boot hazelcast caching example configuration" ); logger.info( "using cache manager: " + cachemanager.getclass().getname()); // 清空缓存 musicservice.clearcache(); // 调用方法 play( "trombone" ); play( "guitar" ); play( "trombone" ); play( "guitar" ); play( "bass" ); play( "trombone" ); } private void play(string instrument){ logger.info( "calling: " + musicservice. class .getsimplename() + ".play(\"" + instrument + "\");" ); musicservice.play(instrument); } } |
6. bootstrap hazelcast caching application
使用注解@enablecaching 开启缓存机制.
1
2
3
4
5
6
7
8
9
10
|
@enablecaching @springbootapplication public class hazelcastapplication{ private logger logger = loggerfactory.getlogger(hazelcastapplication. class ); public static void main(string[] args) { springapplication.run(hazelcastapplication. class , args); } } |
7. 访问和解释
2018-06-02 22:15:18.488 info 41728 --- [nio-8080-exec-4] c.h.i.p.impl.partitionstatemanager : [192.168.1.1]:5701 [dev] [3.10.1] initializing cluster partition table arrangement...
2018-06-02 22:15:18.521 info 41728 --- [nio-8080-exec-4] c.z.s.h.controller.hazelcastcontroller : calling: musicservice.play("trombone");
2018-06-02 22:15:18.558 info 41728 --- [nio-8080-exec-4] c.z.s.hazelcast.service.musicservice : executing: musicservice.play("trombone");
2018-06-02 22:15:18.563 info 41728 --- [nio-8080-exec-4] c.z.s.h.controller.hazelcastcontroller : calling: musicservice.play("guitar");
2018-06-02 22:15:18.563 info 41728 --- [nio-8080-exec-4] c.z.s.hazelcast.service.musicservice : executing: musicservice.play("guitar");
2018-06-02 22:15:18.563 info 41728 --- [nio-8080-exec-4] c.z.s.h.controller.hazelcastcontroller : calling: musicservice.play("trombone");
2018-06-02 22:15:18.564 info 41728 --- [nio-8080-exec-4] c.z.s.h.controller.hazelcastcontroller : calling: musicservice.play("guitar");
2018-06-02 22:15:18.565 info 41728 --- [nio-8080-exec-4] c.z.s.hazelcast.service.musicservice : executing: musicservice.play("guitar");
2018-06-02 22:15:18.565 info 41728 --- [nio-8080-exec-4] c.z.s.h.controller.hazelcastcontroller : calling: musicservice.play("bass");
2018-06-02 22:15:18.565 info 41728 --- [nio-8080-exec-4] c.z.s.hazelcast.service.musicservice : executing: musicservice.play("bass");
2018-06-02 22:15:18.566 info 41728 --- [nio-8080-exec-4] c.z.s.h.controller.hazelcastcontroller : calling: musicservice.play("trombone");
从上面的可以看到 只有trombone , 才会直接访问缓存信息, 正是在musicservice 类中的方法play 上时候注解进行过滤:
@cacheable(condition = “#instrument.equals(‘trombone')”)
本文参考地址: https://memorynotfound.com/spring-boot-hazelcast-caching-example-configuration/
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/zhongzunfa/article/details/80551753