【忘却のJava#6】IntelliJ IDEA + Spring BootでHello Worldしてみる
Webアプリをつくる必要が出てきたのでSpring Bootを試してみました。
目次
やりたいこと
Spring Boot環境を構築し、WebブラウザからHello Worldを表示する
環境情報
流れ
IntelliJ IDEAのインストール
- IntelliJ IDEAの公式サイトからexeファイルをダウンロードする
- Community版の「Windows, JBR 11 (.exe)を選択
- exeを実行し、インストールを開始する
- 全部デフォルト設定で[next]で進めていき、[install]ボタンを押下する
- 10分くらいかかる
- プログラムを開き、以下の通り進める
- Import IntelliJ IDEA Settings From..というページが開くので、[Do not import settings]を選択する
- Privacy Policyに同意する
- Data Sharingで[Don't send]を選択する
- UI themeで好きなテーマを選択する
- [Skip Remaining and Set Defaults]を選択すると以下のようなメニュー画面が開く
OpenJDKのダウンロードとPath設定
- OpenJDKのアーカイブ からzipファイルをダウンロードする
- 今回は「11.0.2 Windows 64-bit」を選択する
- ダウンロードができたらzipを解凍し、jdk-11.0.2フォルダを適当な場所に配置する
- 今回は「C:\Program Files\Java\jdk-11.0.2」というかたちで配置する
- システムの詳細設定から環境変数のPathを設定する
Spring Initializrによる雛形プロジェクトのダウンロード
- Spring InitializrのWebページにアクセスする
- 以下のように選択する
- Project: Gradle Project (変更)
- Language: Java (デフォルト)
- Spring Boot: 2.1.4 (デフォルト)
- Project Metadata:
- Group: com.example (デフォルト)
- Artifact: demo (デフォルト)
- Name: demo (デフォルト)
- Description: Demo project for Spring Boot (デフォルト)
- Package Name: com.example.demo (デフォルト)
- Packaging: Jar (デフォルト)
- Java Version: 11 (デフォルト
- Dependencies:DevTools / Lombok / Web / Thymeleaf / JDBC
(後でbuild.gradleにて編集できるので、ひとまず必要になりそうなものを選ぶ)
画面上は下図のようになる。
- [Generate Project]を押下し、zipファイルをダウンロードする
- zipファイルを解凍し、ワークスペースに配置する
- 今回は「C:\work\demo」に配置する
雛形プロジェクトを開き、Gradleビルドの実行
- [Welcome to IntelliJ IDEA]メニューの[Open]を押下する
- 「C:\work\demo」を選択し、[OK]を押下する
- [Import Project from Gradle]の画面が表示されたら、[Gradle JVM]にて先ほど配置したJDKのパス「C:\Program Files\Java\jdk-11.0.2」を指定して[OK]を押下する
- [Tips of the day]が表示されるので[Close]を押下する
- アノテーション機能を有効化する
- Crtl+Alt+SでSettings画面を開く
- 下図の通り「Enable annotation processing」のチェックを入れ、[OK]を押下する
- 左ペインの[build.gradle]をダブルクリックすると新しいバージョンのGradleを使用してビルドすることを推奨されるので、[OK, apply suggestion!]を押下する
- 10分くらいかかる
コントローラとHTMLの追加
- 「com.example.demo」配下に「HelloWorld」パッケージを追加し、その配下に「HelloWorldController.java」を作成する
- 「resouces/templates」配下に「HelloWorld.html」を作成する
- 「HelloWorldController.java」と「HelloWorld.html」はそれぞれ以下のように記述する
HelloWorldController.java
package com.example.demo.HelloWorld; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; @Controller public class HelloWorldController { @GetMapping("/helloworld") public String HelloWorld() { return "HelloWorld"; } }
HelloWorld.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Hello World</title> </head> <body> <h1>Hello World!</h1> </body> </html>
IntellJ IDEA上ではこのようになります。
アプリケーション実行
ここまで来たらあとは実行するだけです。
- Intellij IDEAにてDemoApplicationを選択し、[Run 'DemoApplication.main()']を押下する
- 以下の通り、[Started DemoApplication...]と表示されれば起動成功
こんな風にSpringの文字が出ます。
(これは少し崩れてますが・・)
. ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.1.4.RELEASE) 2019-04-24 01:17:39.645 INFO 8464 --- [ restartedMain] com.example.demo.DemoApplication : Starting DemoApplication on DESKTOP-ROVHDC9 with PID 8464 (C:\work\demo\out\production\classes started by wingg in C:\work\demo) 2019-04-24 01:17:39.645 INFO 8464 --- [ restartedMain] com.example.demo.DemoApplication : No active profile set, falling back to default profiles: default 2019-04-24 01:17:39.724 INFO 8464 --- [ restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable 2019-04-24 01:17:39.724 INFO 8464 --- [ restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG' 2019-04-24 01:17:41.626 INFO 8464 --- [ restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http) 2019-04-24 01:17:41.657 INFO 8464 --- [ restartedMain] o.apache.catalina.core.StandardService : Starting service [Tomcat] 2019-04-24 01:17:41.657 INFO 8464 --- [ restartedMain] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.17] 2019-04-24 01:17:41.801 INFO 8464 --- [ restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2019-04-24 01:17:41.801 INFO 8464 --- [ restartedMain] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 2077 ms 2019-04-24 01:17:42.082 INFO 8464 --- [ restartedMain] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor' 2019-04-24 01:17:42.379 INFO 8464 --- [ restartedMain] o.s.b.d.a.OptionalLiveReloadServer : LiveReload server is running on port 35729 2019-04-24 01:17:42.457 INFO 8464 --- [ restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' 2019-04-24 01:17:42.457 INFO 8464 --- [ restartedMain] com.example.demo.DemoApplication : Started DemoApplication in 3.311 seconds (JVM running for 3.917)
ブラウザでの動作確認
- Chromeを起動する
- 「http://localhost:8080/helloworld」にアクセスする
- 以下の通り「Hello World!」が表示される
実はこの前に1度エラーで実行に失敗してます
エラー事象
DemoApplicationを実行後、以下のエラーが発生し、起動に失敗しました。
2019-04-24 01:03:24.778 ERROR 8712 --- [ restartedMain] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPLICATION FAILED TO START *************************** Description: Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured. Reason: Failed to determine a suitable driver class Action: Consider the following: If you want an embedded database (H2, HSQL or Derby), please put it on the classpath. If you have database settings to be loaded from a particular profile you may need to activate it (no profiles are currently active). Class transformation time: 0.049822762s for 5710 classes or 8.725527495621715E-6s per class Process finished with exit code 0
エラー内容の調査
エラー文言でググると以下の記事がヒット。
データソースの自動設定を無効化すると解消されるという内容です。
StackOverFlow
「Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured. SPRING」
原因
不明です。
というか今回やりたいことに対して本質的な問題ではないので、詳しくは調べていません。
何となくですが、Spring Bootとして基本的な挙動なのか、JDBCをDependenciesに追加しているせいなのかで、データストアに関する設定が事前にできていないとエラーになると思われます。
対策
上記の記事に書いてあるとおり以下のコードをDemoApplication.javaに追加しました。
追加後、改めて実行するとエラーが解消し、無事に起動成功しました。
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})」