Я пытаюсь интегрировать кеш 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




У вас отсутствуют соответствующие изменения в библиотеке JHipster, которые еще не выпущены (находятся в этом пул реквест).
Мой совет (пока он не будет выпущен) — скопировать изменения (класс и значения Redis) из JhipsterProperties.java в ваш ApplicationProperties.java.
Затем, если вам нужно настроить значения на значения, отличные от значений по умолчанию, вы можете сделать это в файле application.yml под ключом application:.
Наконец, добавьте ApplicationProperties applicationProperties в конструктор в CacheConfiguration.java рядом с JhipsterProperties и ссылку getRedis() оттуда.
Я считаю, что зависимость reddison также необходима.
Все, что я хочу сделать, это интегрировать кэш Redis в github.com/jhipster/генератор-jhipster, чтобы я мог запускать его локально.
Я попытался обновить ответ, чтобы он был более ясным. У вас уже есть файл ApplicationProperties.java, скопируйте туда изменения в JHipsterProperties. Затем, если вам нужно настроить значения, вы можете сделать это в application.yml. Другим вариантом является просто жесткое кодирование значений конфигурации вместо их загрузки из класса свойств, но это менее настраиваемый
Что вы подразумеваете под «Тогда, если вам нужно настроить значения на значения, отличные от значений по умолчанию, вы можете сделать это в своем application.yml под ключом application:»? Что это делает?
Не могли бы вы посмотреть на мое решение, опубликованное выше, чтобы увидеть, не допустил ли я каких-либо ошибок, пожалуйста?
Вам не нужны методы @Test, и я думаю, вам нужно будет настроить значения, поскольку они установлены по умолчанию только для JHipsterProperties. В application.yml добавьте application.redis.server: redis://localhost:6379 и application.redis.expiration: 300
После того, как я установил «ApplicationProperties applicationProperties» в качестве дополнительного параметра для CacheConfiguration(), нужно ли изменить .setAddress(jHipsterProperties.getCache().getRedis().getServer()) -> .setAddress(applicationProperties.getRedis().getServer ());
^ У меня нет getCache() в ApplicationProperties?
Привет Джон, getRedis() исправлен. Но теперь он говорит, что Redis не может быть разрешен или не является fieldJava для переменных сервера и срока действия в ApplicationProperties. Есть предположения? :: private String server = JHipsterDefaults.Cache.Redis.server; частное истечение срока действия = JHipsterDefaults.Cache.Redis.expiration;
Замените туз JHipsterDefaults.Cache.Redis.server на redis://localhost:6379 и JHipsterDefaults.Cache.Redis.expiration на 300, это значения по умолчанию. Обновление JHipster Defaults еще не выпущено
Ok. Добейтесь успеха наконец. Но «Элементы [jhipster.cache.redis.expiration] остались несвязанными». Срок действия redis уже установлен на 3600 в application-dev.yml, почему он не привязан?
Можем ли мы продолжить наш разговор в этой теме: stackoverflow.com/questions/57066355/…, чтобы я мог отдать должное вашему ответу.
Здравствуйте, Джон, мне скопировать ApplicationProperties.java в папку конфигурации? Какие значения добавить в application.xml в application: key? «затем добавьте ApplicationProperties в конструктор рядом с JhipsterProperties и оттуда ссылайтесь на getRedis()». извините, я очень запутался.