java - Maven 多模块 Spring Boot 项目

标签 java spring maven spring-boot

我正在尝试创建一个包含两个模块、核心模块和网络模块的多模块项目。它们都是我在 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 应用程序/配置/初始化类。

我的问题是

  1. 属性是否必须存在于单个配置文件中,或者我可以有两个 application.properities,一个核心 jar,一个用于 WAR?

  2. 我的 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);
    }

}
  1. 由于 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/

相关文章:

java - Spring依赖注入(inject)解决什么问题?

java - 创建参数化 Spring bean 配置

java - 子类化一个开源库

Eclipse m2e 内容帮助 POM 无法超越顶级元素

java - 构造函数中的异常

java - 在 Java try block 中找不到符号

java计算重复的键值对?

java - 将来抛出异常时如何回滚事务?

java - 我是否必须为连接查询创建单独的 @Entity 类才能提取结果? Jpa存储库

java - 模块化项目的属性(property)置换