Я создаю базовое приложение для весенней загрузки с Redis в качестве хранилища данных.Я следовал всем основным урокам Spring-Data-Redit и делал все в точности как здесь.https://github.com/eugenp/tutorials/tree/master/persistence-modules/spring-data-redis
Но когда я запускаю приложение, я сталкиваюсь с этой ошибкой.
APPLICATION FAILED TO START
***************************
Description:
Field taskRepository in com.test.project.services.TaskService required a bean of type 'com.test.project.repositories.TaskRepository' that could not be found.
The injection point has the following annotations:
- @org.springframework.beans.factory.annotation.Autowired(required=true)
Action:
Consider defining a bean of type 'com.test.project.repositories.TaskRepository' in your configuration.
Process finished with exit code 1
Я искал решение в течение нескольких часов.Я пробовал компонентное сканирование всего пакета.
IntelliJ может найти компонент из аннотации @EnableRedisRepositories.Вы знаете зеленую кнопку слева.Но когда приложение запускается, это не так.
Я использую данные весенней загрузки и весенней загрузки. 2.1.3.RELEASE
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
Фактический объект
@RedisHash("KnapsackTask")
@Data
@Log
public class KnapsackTask extends Task implements Serializable {
Problem problem;
Solution solution;
public KnapsackTask(Problem problem) {
this.problem = problem;
this.timestamps = new Timestamps();
this.timestamps .setSubmitted((System.currentTimeMillis() / 1000L));
}
public KnapsackTask(String taskId) {
this.taskId = taskId;
}
public KnapsackTask submit() {
log.info(problem.getCapacity().toString());
problem.getValues().forEach(p -> log.info(p.toString()));
problem.getWeights().forEach(p -> log.info(p.toString()));
log.info(this.taskId);
log.info(this.getStatus().toString());
return this;
}
public KnapsackTask process() {
return this;
}
public KnapsackTask complete() {
return this;
}
}
Класс обслуживания, который выполняет автоматическое подключение хранилища
@Service
public class TaskService {
@Autowired
TaskRepository taskRepository;
public Task submitTask(Task task) {
task.submit();
task.generateNewTaskId();
task.setStatus(Task.Status.SUBMITTED);
taskRepository.save(task);
return task;
}
public Task processTask(Task task) {
task.process();
task.setStatus(Task.Status.STARTED);
taskRepository.save(task);
return task;
}
public Task completeTask(Task task) {
task.complete();
task.setStatus(Task.Status.COMPLETED);
taskRepository.save(task);
return task;
}
public Task getTask(String taskId) {
return taskRepository.findById(taskId).get();
}
public class TaskNotFound extends RuntimeException {
}
}
Репозиторий
@Repository
public interface TaskRepository extends CrudRepository<Task, String> {
}
Файл конфигурации Redis
@Configuration
@EnableRedisRepositories(basePackages = "com.test.project.repositories")
@PropertySource("classpath:application.properties")
public class RedisConfig {
@Bean
JedisConnectionFactory jedisConnectionFactory() {
return new JedisConnectionFactory();
}
@Bean
public RedisTemplate<String, Object> redisTemplate() {
final RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
template.setConnectionFactory(jedisConnectionFactory());
template.setValueSerializer(new GenericToStringSerializer<>(Object.class));
return template;
}
}