[英]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.