使用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
文献引用