投稿日:
2019年4月6日
最終更新日:
【マイクロサービス】流行りのSpring Boot 2 + Gradle + Java8でマルチプロジェクトな個人開発をしていこう API化編【DDD(ドメイン駆動設計)】
YouTubeも見てね♪
ねこじゃすり
猫を魅了する魔法の装備品!
Anker PowerCor
旅行には必須の大容量モバイルバッテリー!
ドラゴンクエスト メタリックモンスターズギャラリー メタルキング
みんな大好き経験値の塊をデスクに常備しておこう!
Bauhutte ( バウヒュッテ ) 昇降式 L字デスク ブラック BHD-670H-BK
メインデスクの横に置くのにぴったりなおしゃれな可動式ラック!
BANDAI SPIRITS ULTIMAGEAR 遊戯王 千年パズル 1/1スケール
もう一人の僕を呼び覚ませ!!
MOFT X 【新型 ミニマム版】 iPhone対応 スマホスタンド
Amazon一番人気のスマホスタンド!カード類も収納出来てかさ張らないのでオススメです!
サンディスク microSD 128GB
スマホからSwitchまで使える大容量MicroSDカード!
土台は整ったのでAPIモジュールとして動かそう
前回の記事では、Eclipseプロジェクトとして読み込ませるところまでご紹介しました。
今回はAPIとして動かすような修正を入れていこうと思います。
手順
ライブラリを追加
APIを作成する際には、専用のライブラリが用意されているので、api/src/main/resources/build.gradle
に以下の依存関係を追加しましょう。
1
2
3
4
5
|
...
dependencies {
implementation "org.springframework.boot:spring-boot-starter-web:${accountService.springBootVersion}" // 追加
}
...
|
あとは起動するだけで必要なライブラリをダウンロードした上でAPIシステムとしてサーバーが起動します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
> 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リクエストに対してレスポンスを返すミニマムなコントローラーを作ってみます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
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です。
1
2
3
4
5
6
7
8
9
10
|
[
{
"name": "Taro",
"age": 20
},
{
"name": "Jiro",
"age": 18
}
]
|
オートリロードを有効にする
サーバーを起動した状態でクラスファイル等を編集しても、自動で再読み込みされずに手動で再起動しないと反映されない状態になっています。
ですが、spring-boot-devtoolsを
依存関係に追加することで、ファイルの変更を検知して自動で再起動してくれるようになります。
これはとても便利な機能なのでマストで有効化すべきです!
追加方法はとても簡単です。
追加方法はとても簡単で、api/build.gradle
に以下を追記します。
1
2
3
4
|
dependencies {
implementation "org.springframework.boot:spring-boot-starter-web:${accountService.springBootVersion}"
implementation "org.springframework.boot:spring-boot-devtools:${accountService.springBootVersion}" // 追加
}
|
では、EclipseでAPIを起動したままファイル内容を変更してみましょう。
すると以下のように自動で再起動がかかり、変更が反映されるようになります。
これは非常に便利ですね♪
終わりに
以上のように依存関係を追加するだけで簡単にAPI化かつオートリロード化する事が出来ました。
次はレイヤー構造化をしていこうと思います。