我正在尝试创建一个包含两个模块、核心模块和网络模块的多模块项目。它们都是我在 Spring Initialzer 上生成的 Spring Boot 项目。我设置了 Maven POM 文件,但在部署时遇到问题。但是,我对配置的工作方式感到困惑。
核心模块将包含域对象/实体、Spring Data JPA 存储库、服务,并将打包为 JAR。 Web 模块将包含 Spring Security、 Controller 和 View 。它将被打包为一个WAR。
Spring Boot 项目的正常结构如下所示
/
pom.xml
src/
..main/
....com/
......example/
........app/
..........Application.java
..resources/
....application.properites
我基本上有两个这样的类和两个 Spring Boot 应用程序/配置/初始化类。
我的问题是
属性是否必须存在于单个配置文件中,或者我可以有两个 application.properities,一个核心 jar,一个用于 WAR?
我的 core.jar 中可以包含以下内容吗
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class TimesheetCoreApplication { public static void main(String[] args) { SpringApplication.run(TimesheetCoreApplication.class, args); } }
以及我的 web.war 中的以下两个
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class TimesheetWebApplication {
public static void main(String[] args) {
SpringApplication.run(TimesheetWebApplication.class, args);
}
}
和
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.context.web.SpringBootServletInitializer;
public class ServletInitializer extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(TimesheetWebApplication.class);
}
}
- 由于 Spring Boot 进行了大量的自动配置,它们是否会通过配置相互跨越,或者相互冲突或相互覆盖?
解决这个问题的最佳方法是什么?如果可能,我想利用 Spring Boot。
最佳答案
您的设计有点不正确,如果您的核心项目将具有域实体、存储库等,则它不需要是 BOOT 应用程序。 如您所说,这将是一个 Jar。
现在,您可以将您的 Web 应用程序设置为依赖于核心模块 jar 的启动应用程序。您可以在引导应用程序中定义 .properties 或 .yml,一切顺利。
Spring Initializer 的问题在于,它给您的印象是所有代码都需要驻留在单个项目或模块下。
这是我在应用程序中遵循的典型项目
- 项目核心模块(打包 Jar -> 域实体、存储库等)
- project-service-module (boot -> configuration, rest interface, security etc)
- project-system-tests(在编译时运行并验证构建)
现在您将核心和系统模块与服务模块作为依赖项绑定(bind)。
关于java - Maven 多模块 Spring Boot 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31530690/