kar*_*yan 5 second-level-cache spring-data-jpa spring-boot
我使用 Spring Boot 配置作为我的主表的二级缓存。我没有在 Spring Boot 中配置二级缓存。需要了解缓存是如何完成的以及检索是如何完成的。
这是我的 Application.java 类(SpringBootServletinitializer)。我添加了一个测试方法 allCodeValues() 只是为了验证我是否只触发一次休眠查询。但我看到查询被触发了两次,因此表明存储库调用未缓存在休眠中。请帮助我为 EhCaching 进行 SpringBoot 的准确配置...
public class Application extends SpringBootServletInitializer {
public static void main(String[] args) throws Exception{
SpringApplication.run(Application.class, args);
}
@Autowired
WorkflowListRepository wflListRepo;
@Bean(name="getAllCodeValue")
public List<WorkFlowList> allcodeValues(){
List<WorkFlowList> wflList= wflListRepo.getAllDocuments();
wflList= wflListRepo.getAllDocuments();
return wflList;
}
Run Code Online (Sandbox Code Playgroud)
}
下面是JPA持久化的配置
@Bean(name = "entityManagerFactory")
@Primary
public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean() {
LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean();
entityManagerFactoryBean.setJpaVendorAdapter(vendorAdaptor());
entityManagerFactoryBean.setDataSource(dataSource());
entityManagerFactoryBean.setPersistenceProviderClass(HibernatePersistenceProvider.class);
entityManagerFactoryBean.setJpaProperties(jpaHibernateProperties());
return entityManagerFactoryBean;
}
private Properties jpaHibernateProperties() {
Properties properties = new Properties();
properties.put(PROPERTY_NAME_HIBERNATE_SHOW_SQL, env.getProperty(PROPERTY_NAME_HIBERNATE_SHOW_SQL));
properties.put(PROPERTY_NAME_HIBERNATE_DIALECT,env.getProperty(PROPERTY_NAME_HIBERNATE_DIALECT));
properties.put(PROPERTY_NAME_HIBERNATE_HBM_AUTO,env.getProperty(PROPERTY_NAME_HIBERNATE_HBM_AUTO));
properties.put("spring.jpa.properties.hibernate.cache.use_second_level_cache", "true");
properties.put("hibernate.cache.region.factory_class", "org.hibernate.cache.ehcache.EhCacheRegionFactory");
properties.put("hibernate.cache.default_cache_concurrency_strategy", "NONSTRICT_READ_WRITE");
properties.put("hibernate.cache.region_prefix", "valCache");
properties.put("javax.persistence.sharedCache.mode", "ALL");
}
Run Code Online (Sandbox Code Playgroud)
我使用 JPARepository 与实体进行通信...这里我使用 WorklfowRepository 来获取二级缓存中的数据..
@Repository
public interface WorkflowListRepository extends JpaRepository<WorkFlowList, String>{
public List<WorkFlowList> getAllDocuments();
}
Run Code Online (Sandbox Code Playgroud)
在实体中,我添加了注释 @Cacheable 和 @Cache ,如下所示
@Entity
@Cacheable
@Cache(usage=CacheConcurrencyStrategy.READ_ONLY)
@Table(name = "WORKFLOW_LIST")
@Access(AccessType.FIELD)
@NamedQuery(name="WorkFlowList.getAllDocuments",query = "from WorkFlowList work")
public class WorkFlowList implements in.vit.leasing.generic.entity.Entity<WorkFlowList>{
.......
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5311 次 |
| 最近记录: |