首页 > 编程 > Java > 正文

Spring Boot Hazelcast Caching 使用和配置详解

2019-11-26 09:40:23
字体:
来源:转载
供稿:网友

本文将展示spring boot 结合 Hazelcast 的缓存使用案例。

1. Project Structure

2. Maven Dependencies

<?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框架缓存注释的所有方法。
@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

@Configurationpublic 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 文件中, 例如下面所示:

<?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 文件显示

# application.ymlspring: hazelcast:  config: classpath:config/hazelcast.xml
# application.propertiesspring.hazelcast.config=classpath:config/hazelcast.xml

5. 访问controller

@Controllerpublic 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 开启缓存机制.

@EnableCaching@SpringBootApplicationpublic 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/

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表