使用HazelCast进行休眠缓存:基本配置
以前,我們對JPA緩存,機制以及hibernate提供的內容進行了介紹 。
接下來是一個使用Hazelcast作為二級緩存的休眠項目。
為此,我們將在JPA中使用一個基本的spring boot項目。 Spring Boot使用休眠作為默認的JPA提供程序。
我們的設置將非常接近上一篇文章 。
我們將docker與postgresql一起用于我們的sql數據庫。
通過仔細檢查依賴關系,我們可以看到hikari池,postgresql驅動程序,spring數據jpa,當然還有hazelcast。
我們將通過利用Spring boot的數據庫初始化功能來自動化數據庫,而不是手動創建數據庫。
我們將在resources文件夾下創建一個名為schema.sql的文件。
create schema spring_data_jpa_example;create table spring_data_jpa_example.employee(id SERIAL PRIMARY KEY,firstname TEXT NOT NULL,lastname TEXT NOT NULL, email TEXT not null,age INT NOT NULL,salary real,unique(email) );insert into spring_data_jpa_example.employee (firstname,lastname,email,age,salary) values ('Test','Me','test@me.com',18,3000.23);為了簡單起見,避免進行任何其他配置,我們將把數據源,jpa和緩存的配置放在application.yml文件中。
spring:datasource:continue-on-error: truetype: com.zaxxer.hikari.HikariDataSourceurl: jdbc:postgresql://172.17.0.2:5432/postgresdriver-class-name: org.postgresql.Driverusername: postgrespassword: postgreshikari:idle-timeout: 10000jpa:properties:hibernate:cache:use_second_level_cache: trueuse_query_cache: trueregion:factory_class: com.hazelcast.hibernate.HazelcastCacheRegionFactoryshow-sql: true配置spring.datasource.continue-on-error至關重要,因為一旦應用程序重新啟動,就應該再次嘗試創建數據庫,因此崩潰是不可避免的。
任何休眠特定的屬性都駐留在spring.jpa.properties路徑中。 我們啟用了二級緩存和查詢緩存。
同樣,我們將show-sql設置為true。 這意味著,一旦查詢命中數據庫,就應通過控制臺對其進行記錄。
然后創建我們的員工實體。
package com.gkatzioura.hibernate.enitites;import javax.persistence.*;/*** Created by gkatzioura on 2/6/17.*/ @Entity @Table(name = "employee", schema="spring_data_jpa_example") public class Employee {@Id@Column(name = "id")@GeneratedValue(strategy = GenerationType.SEQUENCE)private Long id;@Column(name = "firstname")private String firstName;@Column(name = "lastname")private String lastname;@Column(name = "email")private String email;@Column(name = "age")private Integer age;@Column(name = "salary")private Integer salary;public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getFirstName() {return firstName;}public void setFirstName(String firstName) {this.firstName = firstName;}public String getLastname() {return lastname;}public void setLastname(String lastname) {this.lastname = lastname;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public Integer getSalary() {return salary;}public void setSalary(Integer salary) {this.salary = salary;} }一切都已設置。 Spring Boot將檢測到該實體并自行創建一個EntityManagerFactory。 接下來是員工的存儲庫類。
package com.gkatzioura.hibernate.repository;import com.gkatzioura.hibernate.enitites.Employee; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.repository.CrudRepository;/*** Created by gkatzioura on 2/11/17.*/ public interface EmployeeRepository extends JpaRepository<Employee,Long> { }最后一個是控制器
package com.gkatzioura.hibernate.controller;import com.gkatzioura.hibernate.enitites.Employee; import com.gkatzioura.hibernate.repository.EmployeeRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController;import java.util.List;/*** Created by gkatzioura on 2/6/17.*/ @RestController public class EmployeeController {@Autowiredprivate EmployeeRepository employeeRepository;@RequestMapping("/employee")public List<Employee> testIt() {return employeeRepository.findAll();}@RequestMapping("/employee/{employeeId}")public Employee getEmployee(@PathVariable Long employeeId) {return employeeRepository.findOne(employeeId);}}一旦我們在http:// localhost:8080 / employee / 1發出請求
控制臺將顯示在數據庫發出的查詢
Hibernate: select employee0_.id as id1_0_0_, employee0_.age as age2_0_0_, employee0_.email as email3_0_0_, employee0_.firstname as firstnam4_0_0_, employee0_.lastname as lastname5_0_0_, employee0_.salary as salary6_0_0_ from spring_data_jpa_example.employee employee0_ where employee0_.id=?第二次發出請求時,由于啟用了第二個緩存,因此不會在數據庫上發出查詢。 相反,應從二級緩存中獲取實體。
您可以從github下載該項目。
翻譯自: https://www.javacodegeeks.com/2017/02/hibernate-caching-hazelcast-basic-configuration.html
總結
以上是生活随笔為你收集整理的使用HazelCast进行休眠缓存:基本配置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java中无法推断类型参数_Java中的
- 下一篇: linux内核源码目录在哪(linux内