ProfileアノテーションによるBeanの切り替え

◆ Live配信スケジュール ◆
サイオステクノロジーでは、Microsoft MVPの武井による「わかりみの深いシリーズ」など、定期的なLive配信を行っています。
⇒ 詳細スケジュールはこちらから
⇒ 見逃してしまった方はYoutubeチャンネルをご覧ください
【6/19開催】Kong Community Japan Meetup #4
本イベントでは、Kong Inc. のVP of ProductであるReza Shafii氏もプレゼンターとして参加。当社からはアーキテクト マネージャーの槌野の登壇が決定!参加無料です!!
https://column.api-ecosystem.sios.jp/connect/kong/1081/

【6/21開催】開発者目線でのSBOMとの向き合い方
SBOMの導入から開発者がSBOMの作成・管理を自動で行っていくための方法(デモ)を紹介します。SBOMを全く知らない人から、開発との統合までを紹介するので様々なレベルの方に学びがあるライブとなる予定です!
https://tech-lab.connpass.com/event/321422/

【7/19開催】現場で役立つAzure神小技10+α 〜生成AI,RAG,コスト削減など旬な技術満載のLT大会〜
Azureの最新技術や実用的な小技を紹介する特別なライトニングトーク大会を開催します!
https://tech-lab.connpass.com/event/319077/

【7/26開催】最適なIaCツールを選ぼう
プロジェクトでのツール選びに困らないための重要な観点をご説明します!
https://tech-lab.connpass.com/event/319532/

Profileアノテーションとは

Spring Bootには設定を切り替えるProfileアノテーションという仕組みがあります。
調べてみると開発時と本番稼働時の設定を切り替えたい場合に使用すると書いてあります。
Profileアノテーションは実装そのものを入れ替えることができるので上記のような設定の変更だけではなくカスタマイズのために使用することもできます。
例えば、パスワードリマインダーのような仕組みでUI(画面)はそのままでユーザー管理の対象をLDAPとデータベースと入れ替えることができます。

Profileアノテーションの実装

getValue()というメソッドで文字列を返すだけの簡単なサンプルを作成します。

  • ProfileValue.java
package com.sios.ex.springboot;

public interface ProfileValue {
	String getValue();
}

インターフェースを定義します。

  • DefaultValue.java
package com.sios.ex.springboot;

import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Component;

@Component
@Profile("default")
public class DefaultValue implements ProfileValue {
	@Override
	public String getValue() {
		return "Default";
	}
}

Beanを定義します。ここでは@Profileにdefaultを指定しています。
設定がない場合はdefaultが使用されます。

  • DevelopValue.java
package com.sios.ex.springboot;

import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Component;

@Component
@Profile("develop")
public class DevelopValue implements ProfileValue {
	@Override
	public String getValue() {
		return "Develop";
	}
}

こちらでは@Profileにdevelopが指定してあります。

  • MainController.java
package com.sios.ex.springboot;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class MainController {
	
	@Autowired
	private ProfileValue value;

	@GetMapping("/")
	public String indexForm(Model model) {
		model.addAttribute("value", value.getValue());
		return "index";
	}
}

Profileアノテーションを使ったBeanの使用方法です。
11~12行でBeanを宣言しています。設定によりDefaultValueクラスかDevelopValueクラスのいずれかのオブジェクトが使用されます。

  • index.html
<!DOCTYPE html>
<html xmlns:th="https://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Sample</title>
</head>
<body>
  <p th:text="${value}"></p>
</body>
</html>

ブラウザにMainControllerクラスのindexFormメソッドで設定されたvalueを表示します。

Profileの設定

application.propertiesファイルのspring.profiles.activeに使用するProfileを指定します。
何も指定しないときはdefaultが指定されたとみなされてブラウザにはDefaultが表示されます。

サンプルプログラムでdevelopを指定するときはapplication.propertiesに次のように指定します。

  • application.properties
spring.profiles.active=develop

ブラウザにはDevelopが表示されます。

アバター画像
About サイオステクノロジーの中の人 5 Articles
サイオステクノロジーで働く中の人です。
ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。


ご覧いただきありがとうございます。
ブログの最新情報はSNSでも発信しております。
ぜひTwitterのフォロー&Facebookページにいいねをお願い致します!



>> 雑誌等の執筆依頼を受付しております。
   ご希望の方はお気軽にお問い合わせください!

Be the first to comment

Leave a Reply

Your email address will not be published.


*


質問はこちら 閉じる