Maven多模块Spring Boot项目

时间:2015-07-21 04:57:58

标签: java spring maven spring-boot

我正在尝试创建一个包含两个模块,核心和Web的多模块项目。它们都是我在Spring Initialzer上生成的Spring Boot项目。我设置了Maven POM文件,但是我在部署它时遇到了问题。但是我很困惑配置如何工作。

核心模块将包含域对象/实体,Spring Data JPA存储库,服务,并将打包为JAR。 Web模块将具有Spring Security,控制器和视图。它将打包为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);
      }
    }
    
  3. 以及我的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进行了大量的自动配置,它们是否会通过配置相互冲突,相互冲突或相互覆盖?
    2. 最好的方法是什么?如果可能的话,我想利用Spring Boot。

3 个答案:

答案 0 :(得分:2)

如果您的核心项目将拥有域实体,存储库等,那么您的设计稍有不正确,它不一定是BOOT应用程序。 正如你所说,这将是一个Jar。

现在,您将Web应用程序设置为依赖于核心模块jar的引导应用程序。您可以在引导应用程序中定义.properties或.yml,这样你就可以了。

Spring Initializer的问题是,它给你的印象是所有代码都需要驻留在一个项目或模块下。

这是我为我的应用程序遵循的典型项目

  • project-core-module(包装Jar - >域实体,存储库等)
  • 项目服务模块(启动 - >配置,休息接口,安全性等)
  • 项目系统测试(在编译时运行并验证构建)

现在将核心和系统模块与服务模块绑定为依赖。

答案 1 :(得分:1)

请查找问题的答案

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

它们不能都被命名为application.properties。请参阅此问题的答案here

2。我可以在core.jar中找到以下内容

是的,如果您按照链接中提到的步骤操作,则可以。

3。由于Spring Boot进行了大量的自动配置,他们是否会使用配置相互冲突,相互冲突或重叠?

您一次只能启动一个应用程序。假如您正在运行TimesheetWebApplication应用程序,则TimesheetCoreApplication将无法启动。时间TimesheetCoreApplication仅作为普通JAR包含在内。

此外,您还可以执行以下操作

  1. 按如下方式打包TimesheetCoreApplication。请参阅here。这将确保每次你进行maven安装时,将只包含类文件(没有tomcat嵌入式库)的jar将被安装到repo。

    <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <executions>
                      <execution>
                        <goals>
                          <goal>repackage</goal>
                        </goals>
                        <configuration>
                          <classifier>exec</classifier>
                        </configuration>
                      </execution>
                    </executions>
                </plugin>
            </plugins>
    

答案 2 :(得分:0)

简言之,

  1. 您不需要.properties,您可以使用yaml进行Spring启动,它更具可读性。单个yaml文件足以配置您的配置,因为yaml使用缩进,这样你就可以轻松区分参数了。

  2. 单个应用程序类很好,因为您不会只执行核心模块。

  3. 有很多starter个依赖项及其configurations,您可以在项目中加快速度。