Spring HazelCast我无法从缓存中获取数据
我在我的Spring Boot应用程序中使用HazelCast,我认为缓存有问题,因为应用程序仍然向DB请求select。我假定它不从缓存中读取。请找到我的配置和我的类。另外,我在BaseEntity之后实现了继承,并嵌入了对象。我的最后一个实体看起来:Spring HazelCast我无法从缓存中获取数据,spring,hazelcast,Spring,Hazelcast,我在我的Spring Boot应用程序中使用HazelCast,我认为缓存有问题,因为应用程序仍然向DB请求select。我假定它不从缓存中读取。请找到我的配置和我的类。另外,我在BaseEntity之后实现了继承,并嵌入了对象。我的最后一个实体看起来: @Transient private Long age; private boolean agreedWithPolicy; @EqualsAndHashCode.Exclude @ToString.Exclude @OneToMany(m
@Transient
private Long age;
private boolean agreedWithPolicy;
@EqualsAndHashCode.Exclude
@ToString.Exclude
@OneToMany(mappedBy = "customer")
private Set<Ticket> tickets = new HashSet<>();
@EqualsAndHashCode.Exclude
@ToString.Exclude
@OneToMany(mappedBy = "customer")
private Set<LoyaltyCard> loyaltyCard;
@Override
public int getFactoryId() {
return 1;
}
@Override
public int getClassId() {
return 1;
}
@Override
public void writeData(ObjectDataOutput out) throws IOException {
out.writeLong(getId());
out.writeUTF(name);
out.writeUTF(surname);
out.writeUTF(password);
out.writeUTF(email);
out.writeObject(birthDate);
}
@Override
public void readData(ObjectDataInput in) throws IOException {
setId(in.readLong());
name = in.readUTF();
surname = in.readUTF();
password = in.readUTF();
email = in.readUTF();
birthDate = in.readObject();
}
}项目中的每个实体在BaseEntity之后插入:
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedBy;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.*;
import java.time.LocalDateTime;
@Data
@NoArgsConstructor
@AllArgsConstructor
@SuperBuilder
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public class BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private boolean deleted;
@CreatedDate
private LocalDateTime createdDate;
@LastModifiedDate
private LocalDateTime lastModifiedDate;
@LastModifiedBy
private String lasModifiedBy;
}
import lombok.*;
import lombok.experimental.SuperBuilder;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.*;
import java.time.LocalDate;
import java.util.HashSet;
import java.util.Set;
User是我嵌入的一个类:
@资料
@诺尔格构装师
@AllArgsConstructor
@超级建筑商
@实体
@ToStringcallSuper=true
@EqualsAndHashCodecallSuper=true
@EntityListenerSauditingTityListener.class
public class User extends BaseEntity {
protected String name;
protected String surname;
protected String password;
protected String email;
protected LocalDate birthDate;
private boolean blocked;
protected String activationCode;
@ManyToMany(fetch = FetchType.EAGER, cascade = {CascadeType.PERSIST, CascadeType.DETACH, CascadeType.MERGE, CascadeType.REFRESH})
private Set<Role> roles = new HashSet<>();
@EqualsAndHashCode.Exclude
@ToString.Exclude
@ManyToMany(mappedBy = "users")
private Set<Address> addresses = new HashSet<>();
}
import com.hazelcast.nio.ObjectDataInput;
import com.hazelcast.nio.ObjectDataOutput;
import com.hazelcast.nio.serialization.IdentifiedDataSerializable;
import lombok.*;
import lombok.experimental.SuperBuilder;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.*;
import java.io.IOException;
import java.util.HashSet;
import java.util.Set;
public class Customer extends User implements IdentifiedDataSerializable {
@Transient
private Long age;
private boolean agreedWithPolicy;
@EqualsAndHashCode.Exclude
@ToString.Exclude
@OneToMany(mappedBy = "customer")
private Set<Ticket> tickets = new HashSet<>();
@EqualsAndHashCode.Exclude
@ToString.Exclude
@OneToMany(mappedBy = "customer")
private Set<LoyaltyCard> loyaltyCard;
@Override
public int getFactoryId() {
return 1;
}
@Override
public int getClassId() {
return 1;
}
@Override
public void writeData(ObjectDataOutput out) throws IOException {
out.writeLong(getId());
out.writeUTF(name);
out.writeUTF(surname);
out.writeUTF(password);
out.writeUTF(email);
out.writeObject(birthDate);
}
@Override
public void readData(ObjectDataInput in) throws IOException {
setId(in.readLong());
name = in.readUTF();
surname = in.readUTF();
password = in.readUTF();
email = in.readUTF();
birthDate = in.readObject();
}
}
仅供参考,你发布了完整的代码作为答案 您仍然错过了Hibernate的Spring配置。这是配置二级缓存的地方。目前,Hibernate不会缓存,因为您没有指示它这样做 请检查是否有这种情况 为您的利益复制粘贴到此处: 春天: jpa: 特性: 冬眠: 隐藏物: 使用第二级缓存:true region.factory\u类别:com.hazelcast.hibernate.hazelcastchecacheRegionFactory hazelcast.instance_名称:hazelcast实例 javax.persistence.sharedCache.mode:启用 您还需要使用@org.hibernate.annotations.Cache为要缓存的实体添加注释 请查看其他文档:
从你发布的内容来看,我没有看到任何与缓存相关的内容。请共享整个repo,以及Spring配置、Hazelcast配置等。另外,您的最终代码没有完成类声明。
import com.hazelcast.config.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import pl.gut.mateusz.domain.dao.Customer;
@Configuration
public class HazelCastConfig {
@Bean
public Config config() {
Config config = new Config().setInstanceName("HAZELCAST-1")
.addMapConfig(
new MapConfig().setName("movie")
.setEvictionConfig(new EvictionConfig()
.setEvictionPolicy(EvictionPolicy.LRU)
.setSize(10000)
.setMaxSizePolicy(MaxSizePolicy.FREE_HEAP_SIZE))
.setTimeToLiveSeconds(60 * 60 * 60 * 24))
.addMapConfig(
new MapConfig().setName("repertoire")
.setEvictionConfig(new EvictionConfig()
.setEvictionPolicy(EvictionPolicy.LRU)
.setSize(10000)
.setMaxSizePolicy(MaxSizePolicy.FREE_HEAP_SIZE))
.setTimeToLiveSeconds(60 * 60 * 60 * 24))
.addMapConfig(new MapConfig().setName("customer")
.setEvictionConfig(new EvictionConfig()
.setEvictionPolicy(EvictionPolicy.LRU)
.setSize(10000)
.setMaxSizePolicy(MaxSizePolicy.FREE_HEAP_SIZE))
.setTimeToLiveSeconds(60 * 60 * 60 * 24));
config.getSerializationConfig().addDataSerializableFactory(1, id -> id == 1 ? new Customer() : null);
return config;
}
}