#java #spring #spring-boot
#java #spring #spring-boot
Вопрос:
Я пытаюсь следовать приведенному ниже руководству:
https://dzone.com/articles/spring-boot-jpa-hibernate-oracle
Структура моего проекта следующая:
Мой pom такой, как показано ниже:
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.nuril.work</groupId>
<artifactId>SpringBootHiberate</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.10.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Когда я запускаю класс приложения, как показано:
@SpringBootApplication
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
public class Application implements CommandLineRunner{
@Autowired
SoccerService soccerService;
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Override
public void run(String... arg0) throws Exception {
soccerService.addBarcelonaPlayer("Xavi Hernandez", "Midfielder", 6);
List<String> players = soccerService.getAllTeamPlayers(1);
for(String player : players)
{
System.out.println("Introducing Barca player => " player);
}
}
}
Я получаю приведенную ниже ошибку:
Description:
Field playerRepository in com.nuril.work.service.SoccerServiceImpl required a bean of type 'com.nuril.work.repository.PlayerRepository' that could not be found.
Action:
Consider defining a bean of type 'com.nuril.work.repository.PlayerRepository' in your configuration.
Я просмотрел другие ответы, и они предложили добавить аннотацию @ComponentScan.
Я добавил следующее
@SpringBootApplication
@ComponentScan("com.nuril.work.repository")
@ComponentScan("com.nuril.work.service")
Однако я все еще получаю ту же ошибку, что может быть причиной этого?
Комментарии:
1. Возможно, вам не хватает аннотации @Component в PlayerRepository
2. Почему вы исключили
DataSourceAutoConfiguration
иHibernateJpaAutoConfiguration
?3. потому что это избавило от ошибки: Описание: Не удается определить класс драйвера встроенной базы данных для типа базы данных NONE Действие: Если вам нужна встроенная база данных, пожалуйста, укажите поддерживаемую в classpath. Если у вас есть настройки базы данных, которые необходимо загрузить из определенного профиля, вам может потребоваться активировать его (в настоящее время ни один профиль не активен).
4. Это потому, что вы не определили свой источник данных.
5. Да, мой файл назывался app.properties вместо application.properties, после изменения имени файла я больше не получаю никаких ошибок.
Ответ №1:
Попробуйте добавить @EnableJpaRepositories(basePackages="com.nuril.work.repository")
в Application
класс.
Смотрите документы: https://docs.spring.io/spring-data/jpa/docs/current/api/org/springframework/data/jpa/repository/config/EnableJpaRepositories.html
Кроме того, проверьте, есть ли в ваших репозиториях @Repository
аннотации.