[英]Spring Boot multi (maven) module project can't find its Repository -- how to fix this?
As my first step in mastering Java 9 modules, I'm first creating a Java program that resides in nested directories, all joined by a root-level Maven pom.xml. 也就是說,Java 模塊尚未涉及。
我的程序的源代碼是一個 Spring 引導程序,它已經可以工作了。 我將該程序分為 controller(訪問 Maven 模塊)和數據訪問(持久性 Maven 模塊)。 我的這個任務的導師是這個 Spring 站點: https://spring.io/guides/gs/multi-module/ 。
我通過 Visual Source Code 運行這個,在我的 JAVA_HOME 中使用 Java 11。 Spring 引導程序啟動,然后產生這種錯誤:
Parameter 0 of constructor in com.logicaltiger.persistence.service.LocationService required a bean of type 'com.logicaltiger.persistence.repository.LocationRepository' that could not be found.
該程序在我切片/切塊之前運行,所以我的問題是 Spring 配置。
我的請求? 是否可以修復我的配置以便 Spring Boot 找到它的所有部分?
AccessApplication 有這個:
@SpringBootApplication(scanBasePackages = "com.logicaltiger")
@ComponentScan("com.logicaltiger")
@EnableAutoConfiguration
public class AccessApplication {
public static void main(String[] args) {
SpringApplication.run(AccessApplication.class, args);
}
}
LocationService 有這個:
@Service
[snip]
private final LocationRepository locationRepository;
public LocationService(LocationRepository locationRepository) {
this.locationRepository = locationRepository;
}
LocationRepository 有這個:
@Repository
public interface LocationRepository extends CrudRepository<Location, Long> {
這是我的目錄結構,忽略.mvn等。
district-updater-modules
access
src
main
java
com
logicaltiger
access
controller
(various controller files, with @Controller annotation)
util
Utilities.java
AccessApplication.java
resources
static
templates
application.properties
pom.xml
persistence
main
java
com
logicaltiger
persistence
model
(various model files)
repository
LocationRepository.java
service
LocationService.java
util
Utilities.java
AccessApplication.java
resources
pom.xml
pom.xml
根 pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" [snip] >
<modelVersion>4.0.0</modelVersion>
<groupId>com.logicaltiger</groupId>
<artifactId>district-updater-modules</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>district-updater-modules</name>
<description>Wrapper for the modules of DistrictUpdater -- Java modules</description>
<packaging>pom</packaging>
<modules>
<module>access</module>
<module>persistence</module>
</modules>
</project>
訪問 pom.xml(省略一些依賴):
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" [snip] >
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.logicaltiger.access</groupId>
<artifactId>access</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>district-updater-modules-access</name>
<description>DistrictUpdater web API access module</description>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>com.logicaltiger</groupId>
<artifactId>persistence</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
持久化 pom.xml(省略了一些依賴):
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" [snip] >
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.logicaltiger</groupId>
<artifactId>persistence</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>district-updater-modules-persistence</name>
<description>DistrictUpdater persistence module</description>
<packaging>jar</packaging>
<properties>
<java.version>11</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
</project>
謝謝,
傑羅姆。
經過大量的沖浪和實驗,我終於在這里找到了解決方案。
除了@ComponentScan("com.logicaltiger")
你還需要
@EnableJpaRepositories(basePackages = "com.logicaltiger")
以查找所有存儲庫,@EntityScan("com.logicaltiger.*")
以查找所有實體。因此:
@SpringBootApplication(scanBasePackages = "com.logicaltiger")
@ComponentScan("com.logicaltiger")
@EnableJpaRepositories(basePackages = "com.logicaltiger")
@EntityScan("com.logicaltiger.*")
@EnableAutoConfiguration
public class AccessApplication {
public static void main(String[] args) {
SpringApplication.run(AccessApplication.class, args);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.