Зависимости Redis не разрешаются, поэтому, кажется, происходит сбой автоматического подключения - PullRequest
0 голосов
/ 12 ноября 2018

Работая над рабочим загрузочным проектом Spring почти год, мне все еще трудно разрешить зависимости в загрузочном проекте Spring.

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

Ниже следует pom рабочего модуля (где определен @Component) -

Модуль 1 -

<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.someproject.dependencies</groupId>
                <artifactId>someproject-spring-dependencies</artifactId>
                <version>1.0-SNAPSHOT</version>
                <scope>import</scope>
                <type>pom</type>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
    <dependency>
            <groupId>${project.groupId}</groupId>
            <artifactId>someproject-common</artifactId>
            <version>${project.version}</version>
            <exclusions>
    </dependency>
</dependencies>

В некоторой зависимости проекта-пружины -

<redis.clients.jedis.version>2.7.3</redis.clients.jedis.version>
<dependency>
                <groupId>redis.clients</groupId>
                <artifactId>jedis</artifactId>
                <version>${jedis.version}</version>
            </dependency>

И в чем-то общего проекта -

<dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <type>jar</type>
            <scope>compile</scope>
        </dependency>

Я не уверен, какое из этих определений джедаев действительно работает.

POM модуля 2 аналогичен модулю 1. Однако, когда я пытаюсь сделать следующее, в аннотированном классе @Component модуля 2 я получаю значение NULL для объекта Autowired RedisDao, который выглядит как обертка реализация вокруг пакета redis.clients. Попытка дать представление о том же -

  • RedisDAOImpl реализует RedisDAO. RedisDAOImpl имеет @Autowired RedisTemplate.
  • RedisTemplate, другая оболочка расширяет RedisBase. RedisBase реализует DisposableBean и имеет автоматически подключенный JedisPool, который находится в пакете redis.clients.jedis. RedisTemplate имеет следующий вызов -

    Jedis jedis = this.jedisPool.getResource ();

  • Джедис находится в пакете redis.clients.jedis.

  • jedisPool относится к типу JedisPool, аннотированному как автоматическое подключение.
  • JedisPool находится в пакете redis.clients.jedis.

Ниже приведен код в компоненте модуля 2, для которого автоматическое подключение, по-видимому, выходит из строя -

import com.citruspay.prepaid.common.cache.settings.RedisDAO;

@Component
public class CachedWithdrawalTxnRepository implements CachedWithdrawalTxnDao {
    private static final Logger logger = LoggerFactory.getLogger(CachedWithdrawalTxnRepository.class);

    @Autowired RedisDAO redis;

@Override
public void create(String uuid) {
    // TODO Auto-generated method stub
    try
    {
        redis.setex("withdrawal:"+uuid, 300, "true");
    }
    catch(Exception ex)
    {
        logger.error(ex.getMessage());
    }
}

Объект redis показывает ноль, и я получаю исключение нулевого указателя. Я не уверен, как отлаживать дальше.

Обновление

Отвечая @Grinish Непал -

Родительский пакет проверяется компонентом в классе App.java, который аннотируется @SpringBootApplication -

@ComponentScan("com.someproject")

Класс, в котором я работаю с Autowiring RedisDAO, находится в упаковке com.someproject.prepaid.common.cache.redis и RedisDAO находится в пакете com.someproject.prepaid.common.cache.settings.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...