使用Spring Boot进行多项目配置

首先

我尝试使用SpringBoot进行多项目配置。

环境

Java: 17
SpringBoot: 3.1.1
Gradle: 8.1.1

Java:17
SpringBoot:3.1.1
Gradle:8.1.1

1. 整体形象

将子模块项目放置在根项目的下方,如下所示。
在根项目中配置build.gradle,并在两个子模块项目中共享。

multi-project(ルートプロジェクト)
├── multi-project-A(サブモジュールプロジェクト)
│   └── src/main
│       ├── java
│       │    └── パッケージ
│       │          └── SampleAController.java
│       └── resources
│            └── application.yml
│       
├── multi-project-B(サブモジュールプロジェクト)
│   └── src/main
│       ├── java
│       │    └── パッケージ
│       │          └── SampleBController.java
│       └── resources
│            └── application.yml
│
├── build.gradle
├── gradlew
├── gradlew.bat
└── settings.gradle

创建根项目

使用Spring Initializr创建项目。

在Root项目中,需要运行Gradle。
这次我们准备使用Spring Initializr创建一个Gradle项目。

在我们创建的项目中,需要以下四个文件:
1. build.gradle
2. gradlew
3. gradlew.bat
4. settings.gradle

他会删除。

设置 settings.gradle 文件

当使用Spring Initializr创建项目时,默认会设置根项目。此外,可以使用include()来指定模块项目。

rootProject.name = "multi-project"
include("multi-project-A")
include("multi-project-B")

修改build.gradle

将Root项目的build.gradle进行修改。
将要应用的插件、依赖关系和Junit的设置都放在subprojects内部进行描述。

仓库的设置在allprojects中进行了记录,但也可以在subprojects中进行操作。

plugins {
	id 'java'
	id 'org.springframework.boot' version '3.1.1'
	id 'io.spring.dependency-management' version '1.1.0'
}

allprojects {
	repositories {
		mavenCentral()
	}
}

subprojects {

	apply plugin: 'java'
	apply plugin: 'org.springframework.boot'
	apply plugin: 'io.spring.dependency-management'
	group = 'com.sample.multi-project'
	version = '0.0.1-SNAPSHOT'

	java {
		sourceCompatibility = '17'
	}

	configurations {
		compileOnly {
			extendsFrom annotationProcessor
		}
	}

	dependencies {
		implementation 'org.springframework.boot:spring-boot-starter-web'
		compileOnly 'org.projectlombok:lombok'
		annotationProcessor 'org.projectlombok:lombok'
		testImplementation 'org.springframework.boot:spring-boot-starter-test'
	}

	tasks.named('test') {
		useJUnitPlatform()
	}
}

创建模块项目

使用 Spring Initializr 创建项目

请按照 Root Project 的方式创建 Gradle 项目。

刪除或清空build.gradle檔案。

这个模块项目这边是不需要的。

4. 在模块项目中实施API。

为了确认动作,我们将在每个模块项目中实现一个控制器类,只需返回“Hello World”。

package com.sample.multiproject.A.multiprojectA;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class SampleAController {

    @GetMapping("sampleA")
    @ResponseBody
    public String index() {
        return "hello worldA";
    }
}
package com.sample.multiproject.B.multiprojectB;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class SampleBController {

    @GetMapping("sampleB")
    @ResponseBody
    public String index() {
        return "hello worldB";
    }
}

5. 模块项目的端口设置

模块项目会分别设置等待处理请求的端口。
端口的设置通过application.yml进行配置。

首先,将multi-project-A设置为在端口80上进行监听。

server:
  port: ${PORT:80}

接下来,将multi-project-B的设定配置为在70号接听。

server:
  port: ${PORT:70}

6. 确认动作

应用程序启动

使用Gradle任务bootRun来运行SpringBoot应用程序。

% ./gradlew :multi-project-A:bootRun
% ./gradlew :multi-project-B:bootRun

请求

当应用程序启动后,发出请求并确认各个操作。

% curl http://localhost:80/sampleA
hello worldA
% curl http://localhost:70/sampleB
hello worldB

文献引用

 

广告
将在 10 秒后关闭
bannerAds