Redis 与 jHipster - 尚未指定默认配置

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:

应用程序-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 个常见框架

顺便说一句,项目已成功编译。

预先感谢您的帮助!

Hun*_*gnn 0

看起来和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
祝你好运,