Ошибка интеграции Redis с JHipster CacheConfiguration

Я пытаюсь интегрировать кеш Redis в генератор JHipster после этого запроса на включение в Github: 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

Метод getRedis() не определен для типа JHipsterProperties.CacheJava(67108964)

Где определено getRedis()?

Метод CacheConfiguration в CacheConfiguration.java:

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);
        }

приложение.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
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
747
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

У вас отсутствуют соответствующие изменения в библиотеке JHipster, которые еще не выпущены (находятся в этом пул реквест).

Мой совет (пока он не будет выпущен) — скопировать изменения (класс и значения Redis) из JhipsterProperties.java в ваш ApplicationProperties.java.

Затем, если вам нужно настроить значения на значения, отличные от значений по умолчанию, вы можете сделать это в файле application.yml под ключом application:.

Наконец, добавьте ApplicationProperties applicationProperties в конструктор в CacheConfiguration.java рядом с JhipsterProperties и ссылку getRedis() оттуда.

Я считаю, что зависимость reddison также необходима.

Здравствуйте, Джон, мне скопировать ApplicationProperties.java в папку конфигурации? Какие значения добавить в application.xml в application: key? «затем добавьте ApplicationProperties в конструктор рядом с JhipsterProperties и оттуда ссылайтесь на getRedis()». извините, я очень запутался.

jche 16.07.2019 21:34

Все, что я хочу сделать, это интегрировать кэш Redis в github.com/jhipster/генератор-jhipster, чтобы я мог запускать его локально.

jche 16.07.2019 21:37

Я попытался обновить ответ, чтобы он был более ясным. У вас уже есть файл ApplicationProperties.java, скопируйте туда изменения в JHipsterProperties. Затем, если вам нужно настроить значения, вы можете сделать это в application.yml. Другим вариантом является просто жесткое кодирование значений конфигурации вместо их загрузки из класса свойств, но это менее настраиваемый

Jon Ruddell 16.07.2019 21:49

Что вы подразумеваете под «Тогда, если вам нужно настроить значения на значения, отличные от значений по умолчанию, вы можете сделать это в своем application.yml под ключом application:»? Что это делает?

jche 16.07.2019 21:58

Не могли бы вы посмотреть на мое решение, опубликованное выше, чтобы увидеть, не допустил ли я каких-либо ошибок, пожалуйста?

jche 16.07.2019 22:04

Вам не нужны методы @Test, и я думаю, вам нужно будет настроить значения, поскольку они установлены по умолчанию только для JHipsterProperties. В application.yml добавьте application.redis.server: redis://localhost:6379 и application.redis.expiration: 300

Jon Ruddell 16.07.2019 22:11

После того, как я установил «ApplicationProperties applicationProperties» в качестве дополнительного параметра для CacheConfiguration(), нужно ли изменить .setAddress(jHipsterProperties.getCache().getRedis().getServ‌​er()) -> .setAddress(applicationProperties.getRedis().getServer ());

jche 16.07.2019 23:39

^ У меня нет getCache() в ApplicationProperties?

jche 16.07.2019 23:40

Привет Джон, getRedis() исправлен. Но теперь он говорит, что Redis не может быть разрешен или не является fieldJava для переменных сервера и срока действия в ApplicationProperties. Есть предположения? :: private String server = JHipsterDefaults.Cache.Redis.server; частное истечение срока действия = JHipsterDefaults.Cache.Redis.expiration;

jche 17.07.2019 00:24

Замените туз JHipsterDefaults.Cache.Redis.server на redis://localhost:6379 и JHipsterDefaults.Cache.Redis.expiration на 300, это значения по умолчанию. Обновление JHipster Defaults еще не выпущено

Jon Ruddell 17.07.2019 00:43

Ok. Добейтесь успеха наконец. Но «Элементы [jhipster.cache.redis.expiration] остались несвязанными». Срок действия redis уже установлен на 3600 в application-dev.yml, почему он не привязан?

jche 17.07.2019 00:49

Можем ли мы продолжить наш разговор в этой теме: stackoverflow.com/questions/57066355/…, чтобы я мог отдать должное вашему ответу.

jche 17.07.2019 00:50

Другие вопросы по теме