【发布时间】:2020-06-30 23:30:05
【问题描述】:
我正在按照教程学习 maven 中的多模块,但所介绍的内容引发了一个问题:
是否有可能创建一个多模块项目,其中只有一个模块访问数据库,其他模块将此连接用于各自的控制器?
基本上我想要的是使用相同的存储库文件夹来扫描所有模块中的每个 datasourceconfig。
我设想甚至开始实施的结构是:
|--main
| |--moduleOne
| |--|--Java
| |-----|-DataSource
| |-----|-models
| |-----|-repositories
| |--|--Resources
| |-----|-application.properties
| |--moduleN
| |--|--Java
| |-----|-controller
| |-----|-service
| |--|--Resources
| |-----|-application.properties
第一个模块运行完美,另一个需要一个连接,我做到了,但是当我运行时,这个模块使用 h2 数据库或没有连接,因为 moduleOne 正在使用存储库文件夹。 我该如何解决该服务访问这些存储库的问题?
POM 模块一
<project>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.example</groupId>
<artifactId>sig</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../</relativePath> <!-- lookup parent from repository -->
</parent>
<artifactId>moduleOne</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>moduleOne</name>
<properties>
<java.version>11</java.version>
</properties>
<dependencies>
<!-- SQL DEPENDENCIES -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
<build>
<finalName>moduleOne</finalName>
</build>
</project>
POM 模块N
<project>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.example</groupId>
<artifactId>sig</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../</relativePath> <!-- lookup parent from repository -->
</parent>
<artifactId>moduleN</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>moduleN</name>
<properties>
<java.version>11</java.version>
</properties>
<dependencies>
<!-- MODULE ON WHICH IT DEPENDS -->
<dependency>
<groupId>com.example.sig</groupId>
<artifactId>moduleOne</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
<build>
<finalName>moduleN</finalName>
</build>
</project>
【问题讨论】:
-
我认为所有模块的 application.properties 命名相同的问题尝试为不同的模块使用不同的属性文件名称。
-
@IshikawaYoshi 我将所有属性重命名为 ModuleN.properties(ps。'N' 是一个变量)并且发生了这个错误:“在 br.example.sig.moduleone 中定义的 bean 'RepositoryX'。在 ServiceX 上声明的 EnableJpaRepositories 中定义的 repositories.RepositoryX,无法注册。具有该名称的 bean 已经在 br.example.sig.moduleone.repositories.RepositoryX 中定义,在 DatasourceConfig 上声明的 EnableJpaRepositories 中定义并且覆盖已禁用。考虑重命名一个bean 或通过设置 spring.main.allow-bean-definition-overriding=true" 启用覆盖
-
我将注解@Bean(name = "DataSource") 重命名为@Bean(name = "moduleNDataSource") 并在所有moduleN中写入spring.main.allow-bean-definition-overriding=true。属性,但继续显示。
-
我认为首先您需要使用 Configuration 注释创建类,添加 PropertySource 注释,并将属性文件的名称作为值。之后,您需要将 sping.factories 文件添加到 ../resources/META-INF/spring.factories,例如 org.springframework.boot.autoconfigure.EnableAutoConfiguration=
检查我如何在此处进行自动配置 @987654321 @ -
感谢您的帮助。我有一个带有注释“@EntityScan”和“@EnableJpaRepositories”的服务,它们指向与其中一个模块中的数据源相同的目录,我把它放在那里并忘记了它。我删除了注释,这是产生冲突的原因,而不是不同模块的使用。
标签: spring-boot repository pom.xml multi-module application.properties