土台は整ったのでAPIモジュールとして動かそう
前回の記事では、Eclipseプロジェクトとして読み込ませるところまでご紹介しました。
関連記事
【マイクロサービス】流行りのSpring Boot 2 + Gradle + Java8でマルチプロジェクトな個人開発をしていこう Eclipseプロジェクト化編【DDD(ドメイン駆動設計)】
IT
Java
Mac
Windows
アプリケーション今回はAPIとして動かすような修正を入れていこうと思います。
手順
ライブラリを追加
APIを作成する際には、専用のライブラリが用意されているので、api/src/main/resources/build.gradleに以下の依存関係を追加しましょう。
...
dependencies {
implementation "org.springframework.boot:spring-boot-starter-web:${accountService.springBootVersion}" // 追加
}
...
あとは起動するだけで必要なライブラリをダウンロードした上でAPIシステムとしてサーバーが起動します。
> Task :api:bootRun
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.1.3.RELEASE)
2019-04-03 18:03:13.260 INFO 4373 --- [ main] t.b.service.account.AccountApplication : Starting AccountApplication on xxx.xxx.xxx.xxx.static.zoot.jp with PID 4373 (/Users/blogenist/develop/git/github/service-account/api/build/classes/java/main started by blogenist in /Users/blogenist/develop/git/github/service-account/api)
2019-04-03 18:03:13.267 INFO 4373 --- [ main] t.b.service.account.AccountApplication : The following profiles are active: common,local
2019-04-03 18:03:14.920 INFO 4373 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
2019-04-03 18:03:14.965 INFO 4373 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2019-04-03 18:03:14.967 INFO 4373 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.16]
2019-04-03 18:03:14.984 INFO 4373 --- [ main] o.a.catalina.core.AprLifecycleListener : The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [/Users/blogenist/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:.]
2019-04-03 18:03:15.109 INFO 4373 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2019-04-03 18:03:15.110 INFO 4373 --- [ main] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 1779 ms
2019-04-03 18:03:15.494 INFO 4373 --- [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor'
2019-04-03 18:03:15.800 INFO 4373 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
2019-04-03 18:03:15.805 INFO 4373 --- [ main] t.b.service.account.AccountApplication : Started AccountApplication in 3.318 seconds (JVM running for 3.763)
2019-04-03 18:03:49.453 INFO 4373 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'
2019-04-03 18:03:49.453 INFO 4373 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2019-04-03 18:03:49.459 INFO 4373 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 6 ms
簡単過ぎて神かよ。
試しにhttp://localhost:8080/ にアクセスしてみましょう。

SpringBootはこの辺のお手軽加減がたまりませんよね。。。!
簡単なコントローラーを作ってみる
では、実際にコントローラーを作ってみましょう。
今回はGETリクエストに対してレスポンスを返すミニマムなコントローラーを作ってみます。
package tech.blogenist.service.account.api.controller.account.listing;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping( "/accounts" )
public class AccountListingController
{
@GetMapping(path="/")
public ResponseEntity<Object> listing()
{
List<Map<String,Object>> responseList = new ArrayList<>();
Map<String, Object> taroMapData = new HashMap<>();
taroMapData.put("id", 101);
taroMapData.put("name", "Taro");
taroMapData.put("age", 20);
responseList.add(taroMapData);
Map<String, Object> jiroMapData = new HashMap<>();
taroMapData.put("id", 102);
jiroMapData.put("name", "Jiro");
jiroMapData.put("age", 18);
responseList.add(jiroMapData);
return ResponseEntity.of(Optional.of(responseList));
}
}
この状態でサーバーを起動してhttp://localhost:8080/accounts/ にアクセスしましょう。
以下のようなJsonデータが表示されればOKです。
[
{
"name": "Taro",
"age": 20
},
{
"name": "Jiro",
"age": 18
}
]
オートリロードを有効にする
サーバーを起動した状態でクラスファイル等を編集しても、自動で再読み込みされずに手動で再起動しないと反映されない状態になっています。
ですが、spring-boot-devtoolsを依存関係に追加することで、ファイルの変更を検知して自動で再起動してくれるようになります。
これはとても便利な機能なのでマストで有効化すべきです!
追加方法はとても簡単です。
追加方法はとても簡単で、api/build.gradleに以下を追記します。
dependencies {
implementation "org.springframework.boot:spring-boot-starter-web:${accountService.springBootVersion}"
implementation "org.springframework.boot:spring-boot-devtools:${accountService.springBootVersion}" // 追加
}
では、EclipseでAPIを起動したままファイル内容を変更してみましょう。

すると以下のように自動で再起動がかかり、変更が反映されるようになります。

これは非常に便利ですね♪
終わりに
以上のように依存関係を追加するだけで簡単にAPI化かつオートリロード化する事が出来ました。
次はレイヤー構造化をしていこうと思います。
