Cloud Foundry の Java Buildpack で Java 11 を動かしてみた
Cloud Foundry の Java Buildpack で Java 11 が使えるようになっています!
今回はこのビルドパックで Java 11 を試してみたいと思います.
ソースコード
今回のサンプルコードです.
buildscript {
ext {
springBootVersion = '2.1.2.RELEASE'
}
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'java'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
apply plugin: 'war'
war {
enabled = true
archiveName 'sample.war'
}
group = 'com.project-respite'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11.0'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
Java 11 を指定します.
sourceCompatibility = ‘11.0’
package com.projectrespite.cloudfoundryjava11sample;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
@SpringBootApplication
public class CloudfoundryJava11SampleApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(CloudfoundryJava11DemoApplication.class, args);
}
}
SpringBootServletInitializer を継承します.
class CloudfoundryJava11SampleApplication extends SpringBootServletInitializer
package com.projectrespite.cloudfoundryjava11sample;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class SampleController {
@GetMapping(value="/repeat", produces = "application/json")
public String getRepeat(){
return "test".repeat(3);
}
}
Java 11 の新機能、String#repeat を使用します.
“test”.repeat(3)
ビルド
今回は Gradle の Docker イメージを使ってビルドします.
まずは Docker イメージを Pull します.
$ docker pull gradle:5.1.1-jdk11
5.1.1-jdk11: Pulling from library/gradle
ab1fc7e4bf91: Pull complete
35fba333ff52: Pull complete
f0cb1fa13079: Pull complete
3d1dd648b5ad: Pull complete
a9f886e483d6: Pull complete
f0c295b9cf6e: Pull complete
afe560095725: Pull complete
dc8253cd29cd: Pull complete
6885295983c8: Pull complete
c6dff731bb7a: Pull complete
74623ed176ef: Pull complete
Digest: sha256:1bae069234b4c8af2f21c51c05505981d7b9e59fdb8ea35393a9a841c25ca7e1
Status: Downloaded newer image for gradle:5.1.1-jdk11
gradle war で .war を生成します.
$ cd /path/to/gradle/project
$ docker run \
-v $PWD:/app \
-w /app \
-u $UID:$GID \
-p 8080:8080 \
gradle:5.1.1-jdk11 \
gradle war
Starting a Gradle Daemon, 1 incompatible and 1 stopped Daemons could not be reused, use --status for details
> Task :compileJava
> Task :processResources
> Task :classes
> Task :war
BUILD SUCCESSFUL in 2m 1s
3 actionable tasks: 3 executed
Docker イメージでビルド出来るのは楽ですね〜♩
デプロイ
以下のような manifest.yml を用意しました.
applications:
- name: cloudfoundry-java11-sample
buildpack: https://github.com/cloudfoundry/java-buildpack.git#v4.17.2
memory: 1024MB
instances: 1
path: build/libs/sample.war
timeout: 180
env:
JBP_CONFIG_TOMCAT: '[tomcat: {context_path: "/api"}]'
JBP_CONFIG_OPEN_JDK_JRE: '{ jre: { version: 11.+ } }'
ビルドパックをタグ込みで指定します.
buildpack: https://github.com/cloudfoundry/java-buildpack.git#v4.17.2
環境変数にコンテキストパスと JRE のバージョンを指定します.
env:
JBP_CONFIG_TOMCAT: ‘[tomcat: {context_path: “/api”}]’
JBP_CONFIG_OPEN_JDK_JRE: ‘{ jre: { version: 11.+ } }’
実行結果
$ curl https://cloudfoundry-java11-sample.mybluemix.net/api/repeat
testtesttest
リピートした文字列が取得できていますね!
まとめ
今回は Cloud Foundry の Java Buildpack で Java 11 を使ってみました.
manifest.yml に設定が必要な箇所がありますが、わりとサクッと使えました.
その気になれば Java 11 で本格運用できそうです.
次回は CI/CD でデプロイするところをやってみようと思います.
以上です.