本文将展示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
查看更多关于Spring Boot Hazelcast Caching 使用和配置详解的详细内容...