Spring Cloud Bindings の Bindings をコンテナ化にせずアクセスする
Spring Cloud Bindings をコンテナ化せずに利用する方法を記載します。
流れとしては以下の順です。
- 必要な System Property を設定する
- SERVICE_BINDING_ROOT 環境変数の設定
- pom.xml のアップデート
- (オプショナル) 自作のBindingsを作る
Service Bindings そのものについては以下のとおり。
必要な System Property を設定する
Spring Boot 起動時に、System Propery を以下の値を設定する
1org.springframework.cloud.bindings.boot.enable=true
Intellij などを使う場合は以下のように設定する。
Run → Edit Configurations...
以下の設定をいれる。
SERVICE_BINDING_ROOT の環境変数を設定する
Service Bindings の開始ディレクトリーを設定する。
Intellij などを使う場合は以下のように設定する。
Run → Edit Configurations...
以下の設定をいれる。
pom.xml のアップデート
必要な依存関係は以下のように追加する。
この際<spring-cloud-bindings.version>
の値は更新する
1 <properties>
2 ...
3 <spring-cloud-bindings.version>1.10.0</spring-cloud-bindings.version>
4 ...
5 </properties>
6 <dependencies>
7 ...
8 <dependency>
9 <groupId>org.springframework.cloud</groupId>
10 <artifactId>spring-cloud-bindings</artifactId>
11 <version>${spring-cloud-bindings.version}</version>
12 </dependency>
13 ...
14 </dependencies>
15 <repositories>
16 ...
17 <repository>
18 <id>spring-releases</id>
19 <url>https://repo.spring.io/release/</url>
20 <releases>
21 <enabled>true</enabled>
22 </releases>
23 <snapshots>
24 <enabled>false</enabled>
25 </snapshots>
26 </repository>
27 ...
28 </repositories>
29 <build>
30 <plugins>
31 <plugin>
32 <groupId>org.springframework.boot</groupId>
33 <artifactId>spring-boot-maven-plugin</artifactId>
34 <configuration>
35 <excludes>
36 <exclude>
37 <groupId>org.springframework.cloud</groupId>
38 <artifactId>spring-cloud-bindings</artifactId>
39 </exclude>
40 </excludes>
41 </configuration>
42 </plugin>
43 </plugins>
44 </build>
なお以下のブロックをいれておかないと、のちにコンテナ化する際に、Spring Bootのビルドパックの更新の動きと衝突してエラーになる。
1<configuration>
2 <excludes>
3 <exclude>
4 <groupId>org.springframework.cloud</groupId>
5 <artifactId>spring-cloud-bindings</artifactId>
6 </exclude>
7 </excludes>
8</configuration>
(オプショナル) 自作のBindingsを作る
ここまで設定すれば、あとは自作のBindingsを作ることも可能になる。 例えば、以下のようなコードを用意する。
1package jp.vmware.tanzu.twitterwordclouddemo.utils;
2
3import org.jetbrains.annotations.NotNull;
4import org.springframework.cloud.bindings.Binding;
5import org.springframework.cloud.bindings.Bindings;
6import org.springframework.cloud.bindings.boot.BindingsPropertiesProcessor;
7import org.springframework.core.env.Environment;
8
9import java.util.List;
10import java.util.Map;
11
12public class TwitterBindingsPropertiesProcessor implements BindingsPropertiesProcessor {
13
14 public static final String TYPE = "twitter";
15
16 @Override
17 public void process(Environment environment, @NotNull Bindings bindings, @NotNull Map<String, Object> properties) {
18 if (!environment.getProperty("jp.vmware.tanzu.bindings.boot.twitter.enable", Boolean.class, true)) {
19 return;
20 }
21 List<Binding> myBindings = bindings.filterBindings(TYPE);
22 if (myBindings.size() == 0) {
23 return;
24 }
25 properties.put("twitter.bearer.token", myBindings.get(0).getSecret().get("bearer-token"));
26 }
27
28}
さらに META-INF/spring.factories
を以下のように作成する
1org.springframework.cloud.bindings.boot.BindingsPropertiesProcessor=jp.vmware.tanzu.twitterwordclouddemo.utils.TwitterBindingsPropertiesProcessor
そして、以下のようなディレクトリー構成を SERVICE_BINDING_ROOT で設定したディレクトリに配置すれば、起動時にService Bindings が有効になる。