SpringBoot 多模塊項目

Multi-Module項目

包含嵌套Maven項目的Spring Boot項目稱為 多模塊項目。在多模塊項目中,父項目充當(dāng)基礎(chǔ)Maven配置的容器。

換句話說, 多模塊項目是從管理一組子模塊的父pom構(gòu)建的?;?多模塊項目由父POM引用一個或多個子模塊來定義。

父maven項目必須包含 pom 的包裝類型使該項目成為聚合器。父項目的 pom.xml 文件包含子項目繼承的所有 模塊,公共依賴項屬性的列表。父pom位于項目的根目錄中。子模塊是實(shí)際的Spring Boot項目,它們從父項目繼承maven屬性。

當(dāng)我們運(yùn)行多模塊項目時,所有模塊都一起部署在嵌入式Tomcat Server中。我們也可以部署單個模塊。

父POM

父POM定義了 組ID,工件ID,版本,和 packaging。。在以前的Maven項目中,我們已經(jīng)看到父級POM定義了包裝 jar。。但是在多模塊項目中,父級 POM 定義包裝pom。打包pom引用了其他Maven項目。

為什么我們需要多模塊項目

將項目分為多個模塊是有用且易于維護(hù)的。我們還可以輕松編輯或刪除項目中的模塊,而不會影響其他模塊。當(dāng)我們需要分別部署模塊時,這很有用。

我們只需要在父pom中指定所有依賴項即可。所有其他模塊共享相同的pom,因此我們無需在每個模塊中分別指定相同的依賴項。

子模塊-ear,war和jar

子模塊可以是任何項目,并且可以有任何包裝。我們可以自由地在模塊和束之間創(chuàng)建任何類型的依賴關(guān)系。

例如,我們正在創(chuàng)建 EAR (企業(yè)歸檔), WAR (Web ARchive)和 JAR (Java ARchive)文件。 JAR文件捆綁到war文件中,而war文件捆綁到EAR文件中。 EAR文件是可以在應(yīng)用程序服務(wù)器上部署的最終軟件包。

EAR文件包含一個或多個WAR文件。每個WAR文件都包含服務(wù)項目,該項目對JAR中的所有WAR文件和打包類型具有通用代碼。

Spring Boot多模塊項目

Maven子項目/模塊

子模塊是獨(dú)立的maven項目,它們共享父項目的屬性。 所有子項目都可以用一個命令來構(gòu)建,因?yàn)樗挥诟疙椖恐小?/span> 定義項目之間的關(guān)系更容易。

多模塊項目目錄結(jié)構(gòu)

讓我們了解多模塊項目目錄結(jié)構(gòu)。

在下圖中,我們創(chuàng)建了一個名為 spring-boot-multi-module-project 的項目。它在目錄底部包含父 pom 。之后,我們創(chuàng)建了兩個 Maven模塊,分別命名為 module1 module2 。這兩個模塊包含自己的pom文件。

Spring Boot多模塊項目

讓我們打開父POM,并查看在項目中創(chuàng)建Maven模塊時其配置。

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.2.BUILD-SNAPSHOT</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.nhooo</groupId>
<artifactId>spring-boot-example</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>spring-boot-multi-module-project</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<packaging>pom</packaging>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency> 
<dependency>
 <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.1.RELEASE</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
</repository>
<repository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
</pluginRepository>
<pluginRepository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
<modules>
<module>module1</module>
<module>module2</module>
</modules>
</project>

上面的pom文件與前面的示例相同。但是在此 pom 文件中,需要注意兩件事: 包裝模塊。

當(dāng)我們創(chuàng)建多模塊時項目,我們需要在父pom文件中配置打包pom,而不是 jar。

<packaging>pom</packaging>

當(dāng)我們在項目中創(chuàng)建Maven模塊時,Spring Boot會在 module 標(biāo)簽內(nèi)的父pom中自動配置模塊,如下所示。

<modules>
<module>module1</module>
<module>module2</module>
</modules>

現(xiàn)在,我們將查看 module1的pom文件中的內(nèi)容。

pom.xml

<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.nhooo</groupId>
<artifactId>spring-boot-multi-module-project</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<groupId>com.nhooo</groupId>
<artifactId>module1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>module1</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>

在此處,需要注意的是,上述pom文件不包含諸如 starter-web,web-mvc等之類的公共依賴項。它繼承了所有公共依賴項和屬性 父pom。

Spring Boot多模塊項目示例

讓我們創(chuàng)建一個多模塊應(yīng)用程序示例。

在以下示例中,我們創(chuàng)建了一個名為 spring-boot-multimodule的maven項目。這是主要應(yīng)用程序。在主應(yīng)用程序中,我們創(chuàng)建了五個模塊,如下所示: 應(yīng)用 模型 存儲庫 service-api service-impl

應(yīng)用程序模塊

應(yīng)用程序模塊是項目的主要模塊。它包含應(yīng)用程序類,在其中定義了運(yùn)行Spring Boot Application所需的main方法。它還包含 應(yīng)用程序配置屬性,控制器,視圖資源。

應(yīng)用程序模塊包括模型模塊,服務(wù)實(shí)現(xiàn)模塊作為包含模型的依賴項模塊,存儲庫模塊和服務(wù)API模塊。

模型模塊

模型模塊包含 實(shí)體和在項目中使用的 Visual Objects 。

存儲庫模塊

存儲庫模塊包含 <在項目中使用的strong>  存儲庫。它取決于模型模塊。

服務(wù)API模塊

服務(wù)API模塊包含所有項目 服務(wù)。這也取決于模型模塊。

服務(wù)實(shí)現(xiàn)模塊

服務(wù)實(shí)現(xiàn)模塊可以實(shí)現(xiàn)服務(wù)。它取決于存儲庫模塊和服務(wù)API模塊。

POM聚合器(父POM)

父pom包含所有應(yīng)用程序模塊。它還包括一個以上模塊所需的所有常見依賴關(guān)系和屬性。因?yàn)轫椖恳褜pring IO Platform定義為父級,所以沒有版本就定義了依賴項。

讓我們了解我們創(chuàng)建的多模塊應(yīng)用程序的結(jié)構(gòu)。

Spring-boot-multimodule  
├── pom.xml  
│   └── REDME.adoc  
├── application  
│   ├── pom.xml  
│   └── src  
│       └── main  
│           ├── java  
│           │   └── sample  
│           │       └── multimodule  
│           │           ├── SampleWebJspApplication.java  
│           │           └── web  
│           │               └── WelcomeController.java  
│           └── resources  
│               ├── application.properties  
│               └── templates  
│                   └── welcome  
│                       └── show.html  
├── model  
│   ├── pom.xml  
│   └── src  
│       └── main  
│           └── java  
│               └── sample  
│                   └── multimodule  
│                       └── domain  
│                           └── entity  
│                               └── Account.java  
|  
├── repository  
│   ├── pom.xml  
│   └── src  
│       └── main  
│           └── java  
│               └── sample  
│                   └── multimodule  
│                       └── repository  
│                           └── AccountRepository.java  
├── service-api  
│   ├── pom.xml  
│   └── src  
│       └── main  
│           └── java  
│               └── sample  
│                   └── multimodule  
│                       └── service  
│                           └── api  
│                               ├── AccountNotFoundException.java  
│                               └── AccountService.java  
└── service-impl  
    ├── pom.xml  
    └── src  
        └── main  
            └── java  
                └── sample  
                    └── multimodule  
                        └── service  
                            └── impl  
                                └── AccountServiceImpl.java

步驟1: 創(chuàng)建一個名為 spring-boot-multimodule的 Maven項目。

步驟2: 打開 pom.xml (父pom)文件,并將包裝類型 jar 更改為 pom。  

pom.xml(父pom)
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- Springio 平臺是生成的應(yīng)用程序的父應(yīng)用程序,能夠使用 Spring Boot 及其所有缺省配置 -->
<parent>
<groupId>io.spring.platform</groupId>
<artifactId>platform-bom</artifactId>
<version>2.0.1.RELEASE</version>
</parent>
<groupId>sample.multimodule</groupId>
<artifactId>sample.multimodule</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>Parent - Pom Aggregator</name>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!-- Spring Boot 依賴 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
 

在上面的pom文件中要注意的一件事是,由于尚未創(chuàng)建Maven模塊,因此未配置?,F(xiàn)在,我們將如上所述創(chuàng)建一個Maven模塊。

步驟3: 創(chuàng)建一個名為   application的 Maven模塊 。

步驟4: 打開應(yīng)用程序模塊的   pom.xml 文件,并確保打包類型為   jar。

pom.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>sample.multimodule</groupId>
        <artifactId>sample.multimodule</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <artifactId>sample.multimodule.application</artifactId>
    <packaging>jar</packaging>
    <name>Project Module - Application</name>
    <dependencies>
      <!-- Project modules -->
      <dependency>
        <groupId>sample.multimodule</groupId>
        <artifactId>sample.multimodule.service.impl</artifactId>
        <version>${project.version}</version>
      </dependency>
      <!-- Spring Boot dependencies -->
          <dependency>
              <groupId>org.apache.tomcat.embed</groupId>
              <artifactId>tomcat-embed-jasper</artifactId>
              <scope>provided</scope>
          </dependency>
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
      </dependency>
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
      </dependency>
    
    </dependencies>
    
    <build>
        <plugins>
            <!-- Spring Boot plugins -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>
 

步驟5: 創(chuàng)建  主要類。這是要運(yùn)行的類。

SampleWebJspApplication.java

package sample.multimodule;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.orm.jpa.EntityScan;
@SpringBootApplication
public class SampleWebJspApplication 
{
    public static void main(String[] args) throws Exception 
    {
        SpringApplication.run(SampleWebJspApplication.class, args);
    }
}
 

步驟6: 在包   smaple.multimodule.web。

下創(chuàng)建一個名稱為   WelocameController 的Controller類。  
  WelcomeController.java

package sample.multimodule.web;
import java.util.Date;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import sample.multimodule.domain.entity.Account;
import sample.multimodule.service.api.AccountService;
@Controller
public class WelcomeController 
{
    @Value("${application.message:Hello World}")
    private String message = "Hello World";
    @Autowired
    protected AccountService accountService;
    @RequestMapping("/")
    public String welcome(Map<String, Object> model) 
    {
        //試圖獲得23號帳戶
        Account account = accountService.findOne("23");
        if(account == null){
            //如果創(chuàng)建帳戶時出現(xiàn)問題,請返回顯示錯誤狀態(tài)的視圖
            model.put("message", "Error getting account!");
            model.put("account", "");
            return "welcome/show";
        }  
        //返回顯示23個帳戶信息的視圖
        String accountInfo = "Your account number is ".concat(account.getNumber());
        model.put("message", this.message);
        model.put("account", accountInfo);
        return "welcome/show";
    }
    @RequestMapping("foo")
    public String foo(Map<String, Object> model) {
        throw new RuntimeException("Foo");
    }
}
 

第7步: : 在文件夾   src/main/resource下創(chuàng)建一個名為 show.html HTML templates ->welcome。

show.html

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Spring Boot Multimodule</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
    <div>
      <b>Message: </b>
      <span th:text="${message}" />
    </div>
    <div>
      <b>Your account: </b>
      <span th:text="${account}" />
    </div>
</body>
</html>
 

步驟8: 打開   application.properties 文件,將  application message和  thymeleaf緩存配置為  否。

application.properties

#應(yīng)用程序信息
application.message = Hello User!
dummy.type = type-inside-the-war

#Spring Thymeleaf 配置
spring.thymeleaf.cache = false
 

創(chuàng)建上述所有文件后,應(yīng)用程序模塊目錄如下所示:

 Spring Boot Multi-Module Project

讓我們創(chuàng)建第二個模塊,即   model。

步驟9: 創(chuàng)建一個   Maven Module,名稱為   model。

步驟10: 打開模型的   pom.xml 文件模塊,并確保包裝類型為   jar。

pom.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>sample.multimodule</groupId>
        <artifactId>sample.multimodule</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <artifactId>sample.multimodule.model</artifactId>
    <packaging>jar</packaging>
    <name>Project Module - Model</name>
    <description>Module that contains all Entities and Visual Objects to be used in the project. It doesn't have any dependencies. 
    </description>
</project>
 

步驟11: 在包   sample.multimodule.domain.entity。

下創(chuàng)建一個名稱為 Account 的類。

Account.java

package sample.multimodule.domain.entity;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
@Entity
public class Account 
{
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;
    private String number;
    private String type;
    private String creditCardNumber;
    /**
     * 創(chuàng)建一個空帳戶。
     */
    public Account() {
    }
    
    /**
     * 創(chuàng)建新帳戶。
     * 
     * @param number
     *            the account number
     * @param id
     *            the account id
     */
    public Account(long id, String number) {
        this.number = number;
        this.id = id;
    }
    public long getId() {
        return id;
    }
    public void setId(long id) {
        this.id = id;
    }
    public String getNumber() {
        return number;
    }
    public void setNumber(String number) {
        this.number = number;
    }
    public String getType() {
        return type;
    }
    public void setType(String type) {
        this.type = type;
    }
    public String getCreditCardNumber() {
        return creditCardNumber;
    }
    public void setCreditCardNumber(String creditCardNumber) {
        this.creditCardNumber = creditCardNumber;
    }
}
 

創(chuàng)建所有上述文件后,模型模塊目錄如下:

 Spring Boot Multi-Module Project

讓我們創(chuàng)建   third 模塊

步驟12: 創(chuàng)建一個名為   repository的 Maven模塊。 strong>

步驟13: 打開應(yīng)用程序模塊的   pom.xml 文件,并確保打包類型為   jar。

pom.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>sample.multimodule</groupId>
        <artifactId>sample.multimodule</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <artifactId>sample.multimodule.repository</artifactId>
    <packaging>jar</packaging>
    <name>Project Module - Repository</name>
    <description>Module that contains all repositories to be used in the project. Depends of Model Module.</description>
    <dependencies>
      <!-- Project modules -->
      <dependency>
        <groupId>sample.multimodule</groupId>
        <artifactId>sample.multimodule.model</artifactId>
        <version>${project.version}</version>
      </dependency>
      <!-- Spring Boot dependencies -->
      <dependency>
        <groupId>org.hsqldb</groupId>
        <artifactId>hsqldb</artifactId>
        <scope>runtime</scope>
      </dependency>
    </dependencies>
    
</project>
 

步驟14: 在包   sample.multimodule.repository

創(chuàng)建一個名稱為   AccountRepository 的類。  
  AccountRepository.java

package sample.multimodule.repository;
import org.springframework.data.domain.*;
import org.springframework.data.repository.*;
import org.springframework.stereotype.Repository;
import sample.multimodule.domain.entity.Account;
@Repository
public interface AccountRepository extends CrudRepository<Account, Long> 
{
    Account findByNumber(String number);
}
 

創(chuàng)建上述所有文件后,存儲庫模塊目錄如下所示:

 Spring Boot Multi-Module Project

讓我們創(chuàng)建  第四模塊,它是   service-api。

步驟15: 創(chuàng)建一個名為   service-api的 Maven模塊。

步驟16 : 打開  <strong應(yīng)用程序service-api 的> pom.xml 文件,并確保打包類型為   jar。  

pom.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>sample.multimodule</groupId>
        <artifactId>sample.multimodule</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <artifactId>sample.multimodule.service.api</artifactId>
    <packaging>jar</packaging>
    <name>Project Module - Service API</name>
    <description>Module that contains API of all project services. Depends of Model Module.</description>
    <dependencies>
      <!-- Project Modules -->
      <dependency>
        <groupId>sample.multimodule</groupId>
        <artifactId>sample.multimodule.model</artifactId>
        <version>${project.version}</version>
      </dependency>
    </dependencies> 
</project>
 

步驟17: 創(chuàng)建名稱為   sample.multimodule.service.api的軟件包。

步驟18: 創(chuàng)建一個名稱為   AccountNotFoundException的類。如果未找到該帳戶,它將處理異常。

AccountNotFoundException.java

package sample.multimodule.service.api;
public class AccountNotFoundException extends RuntimeException 
{
    private static final long serialVersionUID = -3891534644498426670L;
    public AccountNotFoundException(String accountId) 
    {
        super("No such account with id: " + accountId);
    }
}
 

步驟19: 創(chuàng)建一個名為   AccountService的類。它提供與帳戶相關(guān)的服務(wù),例如  查找和  創(chuàng)建帳戶。

AccountService.java

package sample.multimodule.service.api;
import java.util.List;
import sample.multimodule.domain.entity.Account;
public interface AccountService 
{
    /**
     * 使用提供的帳號查找?guī)簟?
     * 
     * @param number The account number
     * @return The account
     * @throws AccountNotFoundException if no such account exists.
     */
    Account findOne(String number) throws AccountNotFoundException;
    /**
     * Creates a new account.
     * @param number
     * @return created account
     */
    Account createAccountByNumber(String number);
}
 

創(chuàng)建上述所有文件之后,service-api模塊目錄如下所示:

Spring Boot Multi-Module Project

步驟20: 創(chuàng)建一個名為   service-impl的 Maven模塊

步驟21: : 打開應(yīng)用程序   service-impl 的   pom.xml 文件,并確保包裝類型為jar。

pom.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>sample.multimodule</groupId>
        <artifactId>sample.multimodule</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <artifactId>sample.multimodule.service.impl</artifactId>
    <packaging>jar</packaging>
    <name>Project Module - Service Implementation</name>
    <description>Module that contains services implementation defined on Service API module. Depends of Repository Module and Service API Module.</description>    
    <dependencies>
      <!-- Project Modules -->
      <dependency>
        <groupId>sample.multimodule</groupId>
        <artifactId>sample.multimodule.repository</artifactId>
        <version>${project.version}</version>
      </dependency>
      <dependency>
        <groupId>sample.multimodule</groupId>
        <artifactId>sample.multimodule.service.api</artifactId>
        <version>${project.version}</version>
      </dependency>
    </dependencies>
</project>
 

步驟22: 在包   sample.multimodule.service.impl。

下創(chuàng)建一個名稱為 AccountServiceImpl 的類。

AccountServiceImpl.java

package sample.multimodule.service.impl;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import sample.multimodule.domain.entity.Account;
import sample.multimodule.repository.AccountRepository;
import sample.multimodule.service.api.AccountService;
import sample.multimodule.service.api.AccountNotFoundException;
@Service
public class AccountServiceImpl implements AccountService 
{
@Value("${dummy.type}")
private String dummyType;
@Autowired
    private AccountRepository accountRepository;
    /**
     * {@inheritDoc}
     * <p/>
     * Dummy method for testing purposes.
     * 
     * @param number The account number. Set 0000 to get an {@link AccountNotFoundException} 
     */
    @Override
    public Account findOne(String number) throws AccountNotFoundException {
        if(number.equals("0000")) {
            throw new AccountNotFoundException("0000");
        }
        Account account = accountRepository.findByNumber(number);
        if(account == null){
          account = createAccountByNumber(number);
        }
        return account;
    }
    @Override
    public Account createAccountByNumber(String number) {
        Account account = new Account();
        account.setNumber(number);
        return accountRepository.save(account);
    }
    public String getDummyType() {
        return dummyType;
    }
    public void setDummyType(String dummyType) {
        this.dummyType = dummyType;
    }
}
 

創(chuàng)建上述所有文件后,   service-impl 模塊目錄如下所示:

Spring Boot Multi-Module Project

現(xiàn)在打開  父pom 文件,我們看到已創(chuàng)建的所有Maven模塊都在  中的父pom標(biāo)簽。我們不需要手動配置它。

Spring Boot多模塊項目

現(xiàn)在確保所有五個模塊都已安裝創(chuàng)建,如下所示:

Spring Boot Multi-Module Project

創(chuàng)建后所有模塊,主項目目錄如下所示:

Spring Boot多模塊項目

步驟23: 現(xiàn)在,將   SampleWebJspApplication.java 文件作為Java應(yīng)用程序運(yùn)行。

步驟24: 打開瀏覽器并調(diào)用URL http: //localhost: 8080。它返回  消息和帳號為   23。

Spring Boot多模塊項目
丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清