Spring5 プロファイルで環境を切替(@Profile)

Spring5 プロファイルで環境を切り替えるサンプルです。@Profileアノテーションを使用します。

目次

サンプル Spring5 プロファイルで環境を切り替える(@Profile)
  1.起動するクラス(MainController.java)
  2.設定クラス(AppConfig.java)
  3.beanとインターフェース(Syain,IHello,Hello1,Hello2)
  実行する
  pom.xml

Spring5 使用するBeanを指定する(@Profile)概要

今回作成したファイルです。

処理の流れ

・Hello1クラスに@Profileのproduct、Hello2クラスに@Profileのtestを設定しています。
・プログラムの起動時の引数にproductまたはtestを指定して使用するクラスを使い分けます。

githubにコードがあります。
https://github.com/ut23405/spring5/tree/master/spring5-Profile

1.起動するクラス(MainController.java)

package com.example.test1;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class MainController {
	public static void main(String[] args) {

		AnnotationConfigApplicationContext context = 
				new AnnotationConfigApplicationContext(AppConfig.class);

		Syain syain = context.getBean(Syain.class);

		System.out.println(syain.getHello()); //設定により変わる
		context.close();
	}
}

9行目は、設定ファイルからDIコンテナを生成しています。
11行目は、context.getBeanでDIコンテナからbean(インスタンス)を取得しています。

2.設定クラス(AppConfig.java)

package com.example.test1;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;

@Configuration
public class AppConfig {	
	@Bean
	Syain syain() {
		return new Syain();
	}
	@Bean
	@Profile("product")
	Hello1 hello1() {
		return new Hello1();
	}
	@Bean
	@Profile("test")
	Hello2 hello2() {
		return new Hello2();
	}
}

@Configurationは、設定クラスであることを示しています。
14,19行目は、Profileアノテーションです。起動時の引数でどちらを使用するか制御できます。
10行目のメソッドは、Profileアノテーションがついていません。この場合は常に起動します。

3.beanとインターフェース(Syain,IHello,Hello1,Hello2)

Syain.java

package com.example.test1;
import org.springframework.beans.factory.annotation.Autowired;

public class Syain {
	@Autowired
	private IHello obj1;

	public String getHello() {
		return obj1.getHello();
	}
}

 

6行目の IHelloはインターフェース型です。
そのためIHelloインターフェースを実装するクラスであればインスタンスをセットできます。

IHello.java

インターフェースです。

package com.example.test1;

public interface IHello {
	public String getHello();
}

Hello1.java

上記インターフェースを実装しています。

package com.example.test1;

public class Hello1 implements IHello {
	@Override
	public String getHello() {
		return "Hello World!";
	}
}

Hello2.java

上記インターフェースを実装しています。

package com.example.test1;

public class Hello2 implements IHello {
	@Override
	public String getHello() {
		return "こんにちは!";
	}
}

実行する

MainController.javaを右クリックして「実行」→「実行の構成」をクリックするとダイアログが表示されます。

VM引数に以下を入力します。値をproductにするとhello1が、testにするとhello2が対象になります。

-Dspring.profiles.active=product
-Dspring.profiles.active=test

pom.xml

設定したライブラリです。

		<!-- https://mvnrepository.com/artifact/org.springframework/spring-beans -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-beans</artifactId>
			<version>5.3.7</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>5.3.7</version>
		</dependency>

関連の記事

Spring5 使用するBeanを指定する(@Qualifier)

△上に戻る