【问题标题】:Integrate Redis to JHipster CacheConfiguration error将 Redis 集成到 JHipster CacheConfiguration 错误
【发布时间】:2019-07-17 05:42:24
【问题描述】:

在 Github 上的这个拉取请求之后,我正在尝试将 redis 缓存集成到 JHipster 生成器:https://github.com/jhipster/generator-jhipster/pull/10057/commits/cd2f2865d35dfd77624dd3a38ed32822e895539d#

我在构建项目时收到此错误:

[ERROR]   symbol:   method getRedis()
[ERROR]   location: class io.github.jhipster.config.JHipsterProperties.Cache
[ERROR] ../config/CacheConfiguration.java:[61,139] cannot find symbol

类型 JHipsterProperties.CacheJava(67108964) 的方法 getRedis() 未定义

getRedis() 定义在哪里?

CacheConfiguration.java中的CacheConfiguration方法:

private final javax.cache.configuration.Configuration<Object, Object> jcacheConfiguration;

            public CacheConfiguration(JHipsterProperties jHipsterProperties) {
                MutableConfiguration<Object, Object> jcacheConfig = new MutableConfiguration<>();
                Config config = new Config();
                config.useSingleServer()
                .setAddress(jHipsterProperties.getCache().getRedis().getServer())
                .setSubscriptionConnectionMinimumIdleSize(1)
                .setSubscriptionConnectionPoolSize(50)
                .setConnectionMinimumIdleSize(24)
                .setConnectionPoolSize(64)
                .setDnsMonitoringInterval(5000)
                .setIdleConnectionTimeout(10000)
                .setConnectTimeout(10000)
                .setTimeout(3000)
                .setRetryAttempts(3)
                .setRetryInterval(1500)
                .setDatabase(0)
                .setPassword(null)
                .setSubscriptionsPerConnection(5)
                .setClientName(null)
                .setSslEnableEndpointIdentification(true)
                .setSslProvider(SslProvider.JDK)
                .setSslTruststore(null)
                .setSslTruststorePassword(null)
                .setSslKeystore(null)
                .setSslKeystorePassword(null)
                .setPingConnectionInterval(0)
                .setKeepAlive(false)
                .setTcpNoDelay(false);
            jcacheConfig.setStatisticsEnabled(true);
            jcacheConfig.setExpiryPolicyFactory(CreatedExpiryPolicy.factoryOf(new Duration(TimeUnit.SECONDS, jHipsterProperties.getCache().getRedis().getExpiration())));
            jcacheConfiguration = RedissonConfiguration.fromInstance(Redisson.create(config), jcacheConfig);
        }

我是否缺少 getRedis() 的一些依赖项?

注意:我在 build.gradle.ejs 中省略了这个;这会导致问题吗?

  <%_ if (cacheProvider === 'redis') { _%>
    implementation "org.redisson:redisson"
        <%_ if (enableHibernateCache) { _%>
    implementation "org.hibernate:hibernate-jcache"
        <%_ } _%>
    <%_ } _%>

解决方案?:

ApplicationProperties.java:

@ConfigurationProperties(prefix = "application", ignoreUnknownFields = false)
public class ApplicationProperties {

     private final Redis redis = new Redis();

     public Redis getRedis() {
          return redis;
      }

      public static class Redis {
          private String server = JHipsterDefaults.Cache.Redis.server;
          private int expiration = JHipsterDefaults.Cache.Redis.expiration;

          public String getServer() {
              return server;
          }

          public void setServer(String server) {
              this.server = server;
          }

          public int getExpiration() {
              return expiration;
          }

          public void setExpiration(int expiration) {
              this.expiration = expiration;
          }
      }
}

CacheConfiguration.java

 <%_ if (cacheProvider === 'redis') { _%>
        private final javax.cache.configuration.Configuration<Object, Object> jcacheConfiguration;

            public CacheConfiguration(JHipsterProperties jHipsterProperties, ApplicationProperties applicationProperties) {

            MutableConfiguration<Object, Object> jcacheConfig = new MutableConfiguration<>();
            Config config = new Config();
            config.useSingleServer()
                .setAddress(applicationProperties.getRedis().getServer());
                .setSubscriptionConnectionMinimumIdleSize(1)
                .setSubscriptionConnectionPoolSize(50)
                .setConnectionMinimumIdleSize(24)
                .setConnectionPoolSize(64)
                .setDnsMonitoringInterval(5000)
                .setIdleConnectionTimeout(10000)
                .setConnectTimeout(10000)
                .setTimeout(3000)
                .setRetryAttempts(3)
                .setRetryInterval(1500)
                .setDatabase(0)
                .setPassword(null)
                .setSubscriptionsPerConnection(5)
                .setClientName(null)
                .setSslEnableEndpointIdentification(true)
                .setSslProvider(SslProvider.JDK)
                .setSslTruststore(null)
                .setSslTruststorePassword(null)
                .setSslKeystore(null)
                .setSslKeystorePassword(null)
                .setPingConnectionInterval(0)
                .setKeepAlive(false)
                .setTcpNoDelay(false);
            jcacheConfig.setStatisticsEnabled(true);
            jcacheConfig.setExpiryPolicyFactory(CreatedExpiryPolicy.factoryOf(new Duration(TimeUnit.SECONDS, applicationProperties.getRedis().getExpiration())));
            jcacheConfiguration = RedissonConfiguration.fromInstance(Redisson.create(config), jcacheConfig);
        }

application.yml.ejs

# ===================================================================
# Application specific properties
# Add your own application properties here, see the ApplicationProperties class
# to have type-safe configuration, like in the JHipsterProperties above
#
# More documentation is available at:
# https://www.jhipster.tech/common-application-properties/
# ===================================================================

# application:
    application.redis.server: redis://localhost:6379
    application.redis.expiration: 300

【问题讨论】:

    标签: java redis jhipster


    【解决方案1】:

    您缺少 JHipster 库中尚未发布的相应更改(位于此pull request)。

    我的建议(直到它发布)是将更改(Redis 类和值)从 JhipsterProperties.java 复制到您的 ApplicationProperties.java

    然后,如果您需要将值配置为非默认值,您可以在 application.yml under the application: key 中执行此操作。

    最后将ApplicationProperties applicationProperties 添加到JhipsterProperties 旁边CacheConfiguration.java 中的构造函数中,并从那里引用getRedis()

    我相信reddison 依赖也是需要的。

    【讨论】:

    • 您好 Jon,我是否将 ApplicationProperties.java 复制到配置文件夹中?我在 application.xml 下的 application: 键下添加什么值? “然后将 ApplicationProperties 添加到 JhipsterProperties 旁边的构造函数中,并从那里引用 getRedis() 。”对不起,我很困惑。
    • 我要做的就是将redis缓存集成到github.com/jhipster/generator-jhipster,这样我就可以在本地运行了。
    • 我试图更新答案以更清楚。您已经有一个 ApplicationProperties.java 文件,将更改复制到其中的 JHipsterProperties。然后,如果您需要自定义值,可以在 application.yml 中进行。另一种选择只是硬编码配置值,而不是从属性类中加载它们,但这是可配置性较低的
    • “那么如果你需要将值配置为非默认值,你可以在你的 application.yml 中的 application:key 下这样做”是什么意思?这是做什么的?
    • 您介意看看我上面发布的解决方案,看看我是否犯了任何错误吗?
    猜你喜欢
    • 2019-11-25
    • 1970-01-01
    • 1970-01-01
    • 2019-08-08
    • 1970-01-01
    • 1970-01-01
    • 2018-06-04
    • 2020-02-22
    • 1970-01-01
    相关资源
    最近更新 更多