Luk*_*uka 5 java hibernate redis spring-boot jhipster
我使用 jhipster 版本 7.6.0,这是我的 CacheConfiguration 类。
@Configuration
@EnableCaching
public class CacheConfiguration {
private GitProperties gitProperties;
private BuildProperties buildProperties;
@Bean
public javax.cache.configuration.Configuration<Object, Object> jcacheConfiguration(JHipsterProperties jHipsterProperties) {
MutableConfiguration<Object, Object> jcacheConfig = new MutableConfiguration<>();
URI redisUri = URI.create(jHipsterProperties.getCache().getRedis().getServer()[0]);
Config config = new Config();
if (jHipsterProperties.getCache().getRedis().isCluster()) {
ClusterServersConfig clusterServersConfig = config
.useClusterServers()
.setMasterConnectionPoolSize(jHipsterProperties.getCache().getRedis().getConnectionPoolSize())
.setMasterConnectionMinimumIdleSize(jHipsterProperties.getCache().getRedis().getConnectionMinimumIdleSize())
.setSubscriptionConnectionPoolSize(jHipsterProperties.getCache().getRedis().getSubscriptionConnectionPoolSize())
.addNodeAddress(jHipsterProperties.getCache().getRedis().getServer());
if (redisUri.getUserInfo() != null) {
clusterServersConfig.setPassword(redisUri.getUserInfo().substring(redisUri.getUserInfo().indexOf(':') + 1));
}
} else {
SingleServerConfig singleServerConfig = config
.useSingleServer()
.setConnectionPoolSize(jHipsterProperties.getCache().getRedis().getConnectionPoolSize())
.setConnectionMinimumIdleSize(jHipsterProperties.getCache().getRedis().getConnectionMinimumIdleSize())
.setSubscriptionConnectionPoolSize(jHipsterProperties.getCache().getRedis().getSubscriptionConnectionPoolSize())
.setAddress(jHipsterProperties.getCache().getRedis().getServer()[0]);
if (redisUri.getUserInfo() != null) {
singleServerConfig.setPassword(redisUri.getUserInfo().substring(redisUri.getUserInfo().indexOf(':') + 1));
}
}
jcacheConfig.setStatisticsEnabled(true);
jcacheConfig.setExpiryPolicyFactory(
CreatedExpiryPolicy.factoryOf(new Duration(TimeUnit.SECONDS, jHipsterProperties.getCache().getRedis().getExpiration()))
);
return RedissonConfiguration.fromInstance(Redisson.create(config), jcacheConfig);
}
Run Code Online (Sandbox Code Playgroud)
这是 redisson 的依赖项:
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)
这是我的 application-dev.yml:
一切都是由 jHipster 生成的,安装 redis 版本 3.2.100 后,我收到此异常:
org.springframework.beans.factory.BeanCreationException:创建在类路径资源[org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]中定义的名为“entityManagerFactory”的bean时出错:调用init方法失败;嵌套异常是 javax.persistence.PersistenceException: [PersistenceUnit: default] 无法构建 Hibernate SessionFactory;嵌套异常是 java.lang.IllegalStateException: 尚未指定默认配置!在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1786) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:602) 在 org.springframework.beans.factory .support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524) 在 org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) 在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry。 getSingleton(DefaultSingletonBeanRegistry.java:234) 在 org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) 在 org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)在 org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1154) 在 org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:908) 在 org.springframework.context.support.AbstractApplicationContext.refresh (AbstractApplicationContext.java:583)在org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:144)在org.springframework.boot.SpringApplication.refresh(SpringApplication.java:769)在org。 springframework.boot.SpringApplication.refresh(SpringApplication.java:761) 在 org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:426) 在 org.springframework.boot.SpringApplication.run(SpringApplication.java:326) 在 com .eig.EigApp.main(EigApp.java:69) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl .java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 在 org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) 引起:javax.persistence。 PersistenceException:[PersistenceUnit:默认]无法构建Hibernate SessionFactory;嵌套异常是java.lang.IllegalStateException:尚未指定默认配置! 在 org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:421) 在 org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) 在 org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPro属性集(LocalContainerEntityManagerFactoryBean.java:341) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1845) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:17) 82)。 .. 省略了 20 个常见框架 原因:java.lang.IllegalStateException:未指定默认配置! 在 org.redisson.jcache.JCacheManager.createCache(JCacheManager.java:118) 在 org.hibernate.cache.jcache.internal.JCacheRegionFactory.createCache(JCacheRegionFactory.java:112) 在 org.hibernate.cache.jcache.internal.JCacheRegionFactory .getOrCreateCache(JCacheRegionFactory.java:99) 在 org.hibernate.cache.jcache.internal.JCacheRegionFactory.createDomainDataStorageAccess(JCacheRegionFactory.java:83) 在 org.hibernate.cache.jcache.internal.JCacheRegionFactory.buildDomainDataRegion(JCacheRegionFactory.java:72) )在org.hibernate.cache.internal.EnabledCaching.prime(EnabledCaching.java:113)在org.hibernate.metamodel.internal.MetamodelImpl.primeSecondLevelCacheRegions(MetamodelImpl.java:331)在org.hibernate.metamodel.internal.MetamodelImpl。初始化(MetamodelImpl.java:160)在org.hibernate.internal.SessionFactoryImpl。(SessionFactoryImpl.java:303)在org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:468)在org.hibernate.jpa。 boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1259)在org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:58)在org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerF actoryBean。 java:365) at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) ... 省略 24 个常见框架
顺便说一句,项目已成功编译。
预先感谢您的帮助!
看起来和Redis的工作有关。您可以查看文档: https: //www.baeldung.com/hibernate-second-level-cache移至“什么是二级缓存”。
首先,在 CacheConfiguration.java 中启用 bean“hibernatePropertiesCustomizer”:
import org.hibernate.cache.jcache.ConfigSettings;
@Bean
public HibernatePropertiesCustomizer hibernatePropertiesCustomizer(CacheManager cm) {
return hibernateProperties -> hibernateProperties.put(ConfigSettings.CACHE_MANAGER, cm);
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,Jhipster 中的 Redis 不会为每个实体模型初始化缓存,因此您必须为域包中的每个模型初始化缓存,例如:
@Bean
public JCacheManagerCustomizer cacheManagerCustomizer(javax.cache.configuration.Configuration<Object, Object> jcacheConfiguration) {
return cm -> {
// jhipster-needle-redis-add-entry
createCache(cm, com.project.model.YourModel1.class.getName(), jcacheConfiguration);
createCache(cm, com.project.model.YourModel2.class.getName(), jcacheConfiguration);
};
}
Run Code Online (Sandbox Code Playgroud)
请使用注释添加所有模型(实体类)@Cache。
祝你好运,
| 归档时间: |
|
| 查看次数: |
1161 次 |
| 最近记录: |