TomcatでHelloWorldを表示するSpringBootアプリケーションを作る
概要
この前DockerでNginx, Tomcat, MySQL環境作成の記事を書いたんで、そこで動かす簡単なSpringBootアプリを作るとこまで忘れないようにメモ書いとこー
※EclipseはVersion: Oxygen.1a Release (4.7.1a)使ってます
アプリを作る
とりあえずGitでレポジトリ作ってcloneする
mkdir -p ~/git/future_api cd ~/git/future_api git clone [作成したレポジトリのclone用URL] .
SpringBootの雛形をGetしてGit環境に配置
SpringInitializerを使うとよろしく初期状態のアプリをゲットできる。
小難しいことはわからんのでとりあえず以下設定してzipファイルをげっと。
- Generate a 「GradleProject」 with 「Java」 and Spring Boot 「2.0.4」
- Group 「xyz.ucwork」
- ドメインを逆から呼んだやつにした。きっと本当はなんでも大丈夫
- Artifact 「future」
- 作りたいアプリケーションにつけるならこんな名前的なのつけた
- Dependenciew Web
- どうせあとから追加できるしWebだけ選択
取得したzipファイルを作成したgitレポジトリで解凍!!
cd ~/git/future_api/ cp ~/Downloads/future.zip . unzip future.zip rm future.zip tree -aL 1 . ├── .git ├── README.md └── future
私の書いたDocker環境参考にすると以下のようにアプリの名前ディレクトリ(future)と同階層にdockerディレクトリがいたほうが良さげ
tree -aL 1 . ├── .git ├── README.md ├── docker ├── docker-compose.yml └── future
Eclipseで読み込む
IDEは各々やりたい環境でやってもらえばいいんですが私はEclipse!
はじめはgitリポジトリをimportとかしてたんですが、パッケージが表示されず、フォルダ形式でしか出てこない問題にぶつかりやめた。
Javaプロジェクトとして読み込まなきゃいけないのね。
とりあえずEclipse用のワークスペースを作成&Eclipse用の設定を作成
mkdir -p ~/programming/workspace cd ~/git/future_api/future ./gradlew eclipse
Eclipse開いたら作成した上記ディレクトリ(~/programming/workspace)をワークスペースとして起動。
そして以下手順で作成したプロジェクトを読み込みじゃ!
Docker環境にデプロイ
前書いた記事とかぶっちゃう部分あるけどまぁいいや
Docker環境を立ち上げる
私のDocker記事を参考に各種ファイルを作成してコンテナを立ち上げる。
※「tournament」て書いてあるところは全て自分の好きなものに変えてね
tree -aL 1 . ├── .git ├── README.md ├── docker ├── docker-compose.yml └── future docker-compose up -d --build docker-compose ps [master] Name Command State Ports ------------------------------------------------------------------------------------------------------- mailcatcher01 /run.sh Up 0.0.0.0:1025->1025/tcp, 0.0.0.0:1080->1080/tcp mysql01 docker-entrypoint.sh /entr ... Up 0.0.0.0:3306->3306/tcp nginx01 nginx -g daemon off; Up 0.0.0.0:80->80/tcp tomcat01 /bin/sh -c /usr/bin/superv ... Up 0.0.0.0:8000->8000/tcp, 8080/tcp
warファイルをtomcatに展開できる用にソースを設定
warファイル展開対応
build.gradleにapply plugin: 'war'
とprovidedRuntime("org.springframework.boot:spring-boot-starter-tomcat")
を追記
... apply plugin: "war" ... dependencies { ... // Tomcatにwarを展開するためのライブラリ providedRuntime("org.springframework.boot:spring-boot-starter-tomcat") }
warファイルをTomcatに展開するために必要な以下javaクラスをFutureApplication.javaと同じパッケージに作成
package xyz.ucwork.future; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; /** * warファイルをTomcatに展開するにあたって必要らしい * */ public class ServletInitializer extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(FutureApplication.class); } }
HelloWorldなコントローラ作成
FutureApplication.javaに@RestController
つけて@RequestMapping("/")
なメソッドを追記
package xyz.ucwork.future; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @SpringBootApplication @RestController public class FutureApplication { public static void main(String[] args) { SpringApplication.run(FutureApplication.class, args); } @RequestMapping("/") public String function() { return "HelloWorld"; } }
アプロケーションログの出力
やってもやらなくてもいいですが以下2ファイルを追加するとtomcat01コンテナの/usr/local/tomcat/logs/application-future.log
にアプリケーションログが出力される。
/future/src/main/resources/logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?> <configuration> <include resource="org/springframework/boot/logging/logback/defaults.xml" /> <property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}/}spring.log}"/> <include resource="org/springframework/boot/logging/logback/file-appender.xml" /> <root level="INFO"> <appender-ref ref="FILE" /> </root> </configuration>
/future/src/main/resources/application-local.yml
logging: file: logs/application-future.log
Gradleでビルド&DockerのTomcatにデプロイ
cd ~/git/future_api/future ./gradlew clean build war cp build/libs/future-0.0.1-SNAPSHOT.war ../docker/tomcat01/deployment/future.war
ブラウザで動作確認
/etc/hostsファイルに127.0.0.1 future.local
を追記してブラウザにアクセスしてHelloWorldって出たらOKやで
http://future.local/
まとめ
Dockerの記事と合わせてみてくだされー