在使用Spring Boot Gradle插件执行bootRun任务时设置Spring配置文件的选项
途径
只需在build.gradle文件的bootRun任务设置的jvmArgs中,指定系统属性值spring.profiles.active来指定配置文件就可以了。
// bootRun タスクの設定を追加する
bootRun {
// foobar プロファイルを指定する
jvmArgs = ['-Dspring.profiles.active=foobar']
}
資料來源:
-
- Spring Boot Gradle Plugin Reference Guide
- BootRun (Spring Boot Gradle Plugin 2.2.2.RELEASE API)
确认行动
我使用Spring Initializr生成了源代码,并根据需要进行了添加、删除和编辑。
这次的环境
-
- Java 11 (OpenJDK 11.0.2)
-
- Spring Boot 2.2.2
-
- Spring Boot Gradle Plugin 2.2.2
- Gradle 6.0.1
代码清单
├── build.gradle
├── settings.gradle
└── src
└── main
├── java
│ └── com
│ └── example
│ └── demo
│ └── DemoApplication.java
└── resources
├── application-foobar.properties
└── application.properties
构建.gradle
在Gradle中,我們添加了一個構建設定文件。這個設定文件是用來設置bootRun任務的。
plugins {
id 'org.springframework.boot' version '2.2.2.RELEASE'
id 'io.spring.dependency-management' version '1.0.8.RELEASE'
id 'java'
}
group = 'com.example'
version = '0.0.1'
sourceCompatibility = '11'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation('org.springframework.boot:spring-boot-starter-test') {
exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
}
}
test {
useJUnitPlatform()
}
// bootRun タスクの設定を追加する
bootRun {
// プロファイルを指定する
jvmArgs = ['-Dspring.profiles.active=foobar']
}
设置.gradle
我正在使用Spring Initializr生成的代码。
rootProject.name = 'demo'
DemoApplication.java的内容。
我添加了一个功能,当访问首页时返回JSON数据。
package com.example.demo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.core.env.Environment;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.Map;
@SpringBootApplication
@RestController
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@Autowired
private Environment env;
// トップページにアクセスした際に JSON を返す
@RequestMapping("/")
public ResponseEntity<Map<String, Object>> top() {
Map<String, Object> body = new HashMap<>();
// 適用されているプロファイル
body.put("profiles", env.getActiveProfiles());
// application-*.properties から取得した値
body.put("my.sample", env.getProperty("my.sample"));
body.put("my.message", env.getProperty("my.message"));
return new ResponseEntity<>(body, HttpStatus.OK);
}
}
应用程序属性文件
默认的属性设置文件。
如果未指定配置文件,则可以使用此文件的值。
my.sample=This is a sample property.
my.message=This is a application.properties.
应用程序-foobar配置文件
当使用 foobar 配置文件时,可以进行属性设置。
当使用 foobar 配置文件时,application.properties 的值将被该文件的值覆盖。
my.message=This is a application-foobar.properties.
确认动作
使用gradle bootRun命令来启动Spring Boot。
$ gradle bootRun
> Task :bootRun
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.2.2.RELEASE)
通过其他控制台等使用curl访问时会返回JSON数据。
如果没有在gradle.build中写入bootRun任务配置,则会返回类似以下的JSON。
输出了application.properties的值。
$ curl http://localhost:8080/
{"my.sample":"This is a sample property.","profiles":[],"my.message":"This is a application.properties."}
如果在gradle.build的bootRun任务设置中,有jvmArgs = [‘-Dspring.profiles.active=foobar’]的描述,那么将返回类似以下的JSON。
优先输出application-foobar.properties的值,而不是application.properties的值。
$ curl http://localhost:8080/
{"my.sample":"This is a sample property.","profiles":["foobar"],"my.message":"This is a application-foobar.properties."}
请参考以下资料
-
- Spring Boot Gradle Plugin Reference Guide
-
- BootRun (Spring Boot Gradle Plugin 2.2.2.RELEASE API)
-
- gradleでのjava起動オプションの設定 – Qiita
- Spring Boot でログイン画面 + 一覧画面 + 登録画面の Webアプリケーションを作る ( その2 )( Project作成 ) – かんがるーさんの日記