Работая над рабочим загрузочным проектом 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
.