Help us understand the problem. What is going on with this article?

Gradleのpropertiesをapplication.ymlから参照する

More than 1 year has passed since last update.

環境

Android開発環境じゃありません。
AndroidはBuildConfigFieldとか使ってた覚えがありますが、SpringBootで開発してる今はそんなもんありませんでした(勘違いだったらご指摘ください)。

経緯

gradle側とapplication側で同じ値を使うため、単純に二箇所に書きたくなかった事が発端でした。変えるときに絶対ミスするから2箇所に書きたくない。こんなん先人たちがやってるだろうとタカをくくったら全然資料ないし(ググり力足りない + 主に日本語の記事ばかり見てしまう)、四苦八苦しました。

方法

propertiesを宣言する

ここは普通に書くだけです。

gradle.properties
datasourceUrl=jdbc:mysql://localhost:13306/myApp?useSSL=false
datasourceUser=root
datasourcePassword=root
datasourceSchemas=my_app_db

applicationName=myApp
applicationVersion=0.0.1-SNAPSHOT

build.gradleに以下を追加

build.gradle
// ~~~~ 省略 ~~~~ //

import org.apache.tools.ant.filters.ReplaceTokens
processResources {
    filesMatching('**/application.yml') {
        filter(
                ReplaceTokens,
                tokens: [
                        'applicationName': "${applicationName}".toString(),
                        'version': "${applicationVersion}".toString(),
                        'datasourceUrl': "${datasourceUrl}".toString(),
                        'datasourceUser': "${datasourceUser}".toString(),
                        'datasourcePassword': "${datasourcePassword}".toString()
                ]
        )
    }
}

  • filesMatching()
    置き換えたい対象のファイルを指定します。指定しないと全ファイルが対象になります。

  • filter()
    対象の文字列を置き換えます。

filter(
    ReplaceTokens, // ReplaceTokensを使う
    tokens: ['置き換えたい対象ファイルに記載したKEY': '${置き換えたいpropertiesのKEY}']
)

使う側

application.yml
spring:
  profiles:
    active: local, development
  # MySQL接続情報
  datasource:
    url: @datasourceUrl@
    username: @datasourceUser@
    password: @datasourcePassword@
app:
  name: @applicationName@
  version: @version@
  • 置き換えたい文字列を「@」で囲む。

終わり

これでクリーンビルドをすれば、ymlの値が置き換えられて参照できるようになります。
ymlから値を参照する方法は他に沢山資料があるのでそちらを。

Nabesuke
フロントエンド、バックエンド、ネイティブアプリなど一通り触ってます。love kotlin
valus
導入社数業界No.1の自動価格調査&更新システムサービス「プライスサーチ」の開発・運営するスタートアップ
https://valus.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away