使用Spring Boot和Hazelcast进行缓存


Spring Boot与Hazelcast很好地集成在一起。在类路径上提供Hazelcast配置就足够了,它将被自动使用。在这篇博客文章中,我将逐步解释如何启用Hazelcast作为Spring Boot应用程序的缓存管理器。

该博客的源代码发布在Github的Hazelcast指南存储库中。

Spring Boot应用程序 要在Spring Boot应用程序中使用缓存,您需要:

  • 添加org.springframework.boot:spring-boot-starter-cache依赖
  • @EnableCaching向您的主类添加注释 *@Cacheable("books")向要缓存的每个方法添加注释 有关Spring Boot缓存主题的更多说明,请查看带有Spring的官方缓存数据指南。

在我们的例子中,让我们有一个简单的Web服务,其中包含两个定义如下的类。

// BookController.java
@RestController
@RequestMapping("/books")
public class BookController {
    @Autowired
    private BookService bookService;

    @GetMapping("/{isbn}")
    public String getBookNameByIsbn(@PathVariable("isbn") String isbn) {
        return bookService.getBookNameByIsbn(isbn);
    }
}
// BookService.java
@Service
public class BookService {
    @Cacheable("books")
    public String getBookNameByIsbn(String isbn) {
        return findBookInSlowSource(isbn);
    }

    private String findBookInSlowSource(String isbn) {
        // some long processing
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return "Sample Book Name";
    }
}

如果我们启动该应用程序,则对端点的每次调用/books/<isbn>都将转到该方法findBookNameByIsbn(),该方法又将首先检查缓存。只有在缓存中找不到值时,该方法findBookInSlowSource()才会执行。

使用Hazelcast作为缓存管理器 我们想使用Hazelcast作为缓存管理器。好消息是,您要做的就是将Hazelcast添加到您的类路径中。

<!-- pom.xml -->
<dependency>
    <groupId>com.hazelcast</groupId>
    <artifactId>hazelcast-all</artifactId>
    <version>4.0.2</version>
</dependency>

然后,您需要通过以下方式之一添加Hazelcast配置:

  • 添加hazelcast.yaml配置或
  • 添加hazelcast.xml配置或
  • @Bean在源代码中使用Hazelcast配置进行定义 让我们使用第一个选项,然后将以下文件添加到中src/main/resources
# hazelcast.yaml
hazelcast:
  network:
    join:
      multicast:
        enabled: true

无需更多配置,Hazelcast已被用作项目中的缓存管理器!

Starting the Application 要启动该应用程序,请运行以下命令。

mvn spring-boot:run

您应该在日志中看到嵌入式Hazelcast已启动。

Members {size:1, ver:1} [

Member [172.30.63.9]:5701 - 75cd0b19-ee36-4e0a-9d9c-38c49f67f842 this ]

测试应用程序 您可以通过执行以下命令来测试应用程序。

curl locahost:8080/books/123

Sample Book Name

第一次执行此命令时,应该花费一些时间来获得响应。但是,当您再次尝试时,它是即时的。这意味着使用了缓存。

curl locahost:8080/books/123

Sample Book Name

更重要的是? Spring Boot与Hazelcast确实集成良好,反之亦然。如果要在客户端-服务器拓扑中使用Hazelcast,那么只要创建hazelcast-client.yaml文件而不是hazelcast.yaml在类路径上就足够了。就是这样!您配置了Hazelcast客户端。


原文链接:http://codingdict.com