#java #spring #spring-data-jpa
#java #весна #spring-data-jpa
Вопрос:
Я переделывал свой код, чтобы использовать Spring data JPA. И когда я запускаю свой код, возвращает эту ошибку:
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:212)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:207)
at org.springframework.context.event.AbstractApplicationEventMulticaster.retrieveApplicationListeners(AbstractApplicationEventMulticaster.java:245)
at org.springframework.context.event.AbstractApplicationEventMulticaster.getApplicationListeners(AbstractApplicationEventMulticaster.java:197)
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:134)
at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:404)
at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:361)
at org.springframework.boot.autoconfigure.orm.jpa.DataSourceInitializedPublisher.publishEventIfRequired(DataSourceInitializedPublisher.java:99)
at org.springframework.boot.autoconfigure.orm.jpa.DataSourceInitializedPublisher.access$100(DataSourceInitializedPublisher.java:50)
at org.springframework.boot.autoconfigure.orm.jpa.DataSourceInitializedPublisher$DataSourceSchemaCreatedPublisher.lambda$postProcessEntityManagerFactory$0(DataSourceInitializedPublisher.java:200)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
at java.base/java.lang.Thread.run(Thread.java:832)
2020-09-24 21:25:35.043 INFO 13900 --- [ restartedMain] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed.
2020-09-24 21:25:35.044 INFO 13900 --- [ restartedMain] o.apache.catalina.core.StandardService : Stopping service [Tomcat]
2020-09-24 21:25:35.052 INFO 13900 --- [ restartedMain] ConditionEvaluationReportLoggingListener :
Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2020-09-24 21:25:35.142 ERROR 13900 --- [ restartedMain] o.s.b.d.LoggingFailureAnalysisReporter :
***************************
APPLICATION FAILED TO START
***************************
Description:
Field cozinhaRepository in com.agls.algafood.algafood.api.controller.CozinhaController required a bean of type 'com.agls.algafood.algafooddomain.repository.CozinhaRepository' 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.agls.algafood.algafooddomain.repository.CozinhaRepository' in your configuration.
Класс cozinharrepository:
package com.agls.algafood.algafooddomain.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import com.agls.algafood.algafood.domain.model.Cozinha;
@Repository
public interface CozinhaRepository extends JpaRepository<Cozinha, Long> {
// List<Cozinha> consultarPorNome(String nome);
}
Класс CozinhaController:
package com.agls.algafood.algafood.api.controller;
import java.util.List;
import java.util.Optional;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestController;
import com.agls.algafood.algafood.domain.exception.EntidadeEmUsoException;
import com.agls.algafood.algafood.domain.exception.EntidadeNaoEncontradaException;
import com.agls.algafood.algafood.domain.model.Cozinha;
import com.agls.algafood.algafood.domain.service.CadastroCozinhaService;
import com.agls.algafood.algafooddomain.repository.CozinhaRepository;
@RestController
@RequestMapping(value = "/cozinhas", produces = MediaType.APPLICATION_JSON_VALUE)
public class CozinhaController {
@Autowired
private CozinhaRepository cozinhaRepository;
@Autowired
private CadastroCozinhaService cadastroCozinha;
@GetMapping
public List<Cozinha> listar() {
return cozinhaRepository.findAll();
}
@GetMapping("/{cozinhaId}")
public ResponseEntity<Cozinha> buscar(@PathVariable Long cozinhaId) {
Optional<Cozinha> cozinha = cozinhaRepository.findById(cozinhaId);
if (cozinha.isPresent()) {
return ResponseEntity.ok(cozinha.get());
}
return ResponseEntity.notFound().build();
}
@PostMapping
@ResponseStatus(HttpStatus.CREATED)
public Cozinha adicionar(@RequestBody Cozinha cozinha) {
return cadastroCozinha.salvar(cozinha);
}
@PutMapping("/{cozinhaId}")
public ResponseEntity<Cozinha> atualizar(@PathVariable Long cozinhaId, @RequestBody Cozinha cozinha) {
Optional<Cozinha> cozinhaAtual = cozinhaRepository.findById(cozinhaId);
if (cozinhaAtual.isPresent()) {
BeanUtils.copyProperties(cozinha, cozinhaAtual.get(), "id");
Cozinha cozinhaSalva = cadastroCozinha.salvar(cozinhaAtual.get());
return ResponseEntity.ok(cozinhaSalva);
}
return ResponseEntity.notFound().build();
}
@DeleteMapping("/{cozinhaId}")
public ResponseEntity<Cozinha> remover(@PathVariable Long cozinhaId) {
try {
cadastroCozinha.excluir(cozinhaId);
return ResponseEntity.noContent().build();
} catch (EntidadeEmUsoException e) {
return ResponseEntity.status(HttpStatus.CONFLICT).build();
} catch (EntidadeNaoEncontradaException e) {
return ResponseEntity.notFound().build();
}
}
}
Я выполнил внедрение зависимостей с помощью @Autowired в поле cozinhaRepository в классе CozinhaController, строка 32. И класс CozinhaRepository отмечен с помощью @Repository, но ошибка остается
ответственный за проект: https://github.com/andreleao1/algaFood
Ответ №1:
Ваш импорт неверен
import com.agls.algafood.algafooddomain.repository.CozinhaRepository;
Это должно быть
import com.agls.algafood.algafood.infrastructure.repository.CozinhaRepository;
Имейте в виду, что в этой папке Spring будет искать компоненты, которые вы аннотировали.
Аннотация @SpringBootApplication использует конфигурацию @ComponentScan по умолчанию. Вы можете проверить более подробную информацию об этом здесь
Вы пытаетесь получить компоненты из другой папки, я не знаю, почему у вас есть две подобные реализации.
Ответ №2:
Я исправляю это, меняю свой импорт.
неправильный импорт:
import com.agls.algafood.algafooddomain.repository.CozinhaRepository;
Я изменил импорт в классе на:
import com.agls.algafood.algafood.domain.repository.CozinhaRepository;
Спасибо!