在使用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作成 ) – かんがるーさんの日記
广告
将在 10 秒后关闭
bannerAds