IntelliJ IDEA の起動、簡単な Spring Boot Project の作成&実行 ( その2 )
概要
IntelliJ IDEA の起動、簡単な Spring Boot Project の作成&実行 ( その1 ) の続きです。
- この手順で確認できるのは以下の内容です。
ソフトウェア一覧
参考にしたサイト
Spring Boot Reference Guide
http://docs.spring.io/spring-boot/docs/1.2.0.RELEASE/reference/htmlsingle/- Thymeleaf のテンプレートファイルを Tomcat 起動中に変更しても反映されるようにする方法については「72.2 Reload Thymeleaf templates without restarting the container」参照。
手順
Thymeleaf のテンプレートファイルを Tomcat 起動中に変更しても反映されるようにする
Project View で以下の階層にある resouces ディレクトリを選択した後コンテキストメニューを表示し、「New」->「File」を選択します。「New File」ダイアログが表示されたら application.properties と入力した後「OK」ボタンをクリックします。
ksbysample-simple └ src └ main └ resources
作成した application.properties をダブルクリックして開き、リンク先の内容に変更します。これで Thymeleaf のキャッシュが無効になり、Tomcat 起動中にテンプレートファイルを修正しても反映されるようになります。
確認してみます。Gradle tasks View から bootRun タスクを実行して Tomcat を起動します。
ブラウザを起動し、http://localhost:8080/test/thymeleaf-sample にアクセスします。以下の画像と同じ内容が表示されます。
Tomcat を起動したままの状態で、thymeleaf-sample.html をリンク先のその1の内容に変更します。
ブラウザに戻り F5 キーを押してリロードします。以下の画像の内容に変わり変更が反映されています。
Spring Loaded による Tomcat起動中のソースの変更と反映の確認
Tomcat 起動中に java のソースファイルを追加、変更した場合、Spring Loaded によりどの程度まで反映されるのか確認してみます。
Controller クラスの @RequestMapping を付与した method の中身を変えてみたら? →再起動なしで反映されます。
ブラウザで http://localhost:8080/test にアクセスします。以下の画像と同じ内容が表示されます。
TestController.java の index メソッドをリンク先のその1の内容に変更します。
Gradle tasks View を表示し、build タスクをダブルクリックして実行します。
ブラウザに戻り F5 キーを押してリロードします。以下の画像の内容に変わり変更が反映されています。
新しい Thymeleaf のテンプレートファイルを作成して、return で呼び出すテンプレートを変更してみたら? →再起動なしで反映されます。
ブラウザで http://localhost:8080/test/thymeleaf-sample にアクセスします。以下の画像と同じ内容が表示されます。
Project View で以下の階層にある test ディレクトリを選択した後コンテキストメニューを表示し、「New」->「HTML File」を選択します。「HTML File」ダイアログが表示されたら thymeleaf-sample2.html と入力した後「OK」ボタンをクリックします。
ksbysample-simple └ src └ main └ resources └ templates └ test
作成した thymeleaf-sample2.html をダブルクリックして開き、リンク先の内容に変更します。
TestController.java の thymeleafSample メソッドをリンク先のその2の内容に変更します。
Gradle tasks View を表示し、build タスクをダブルクリックして実行します。
ブラウザに戻り F5 キーを押してリロードします。以下の画像の内容に変わり変更が反映されています。
Controller クラス内に新規の @RequestMapping を付与した method を追加してみたら? →再起動なしで反映されます。
TestController.java に addurl メソッドを追加します。thymeleafSample メソッドの下にリンク先のその3のコードを追加します。
Gradle tasks View を表示し、build タスクをダブルクリックして実行します。
ブラウザで http://localhost:8080/test/addurl にアクセスします。以下の画像と同じ内容が表示され変更が反映されています。
Controller クラスの @RequestMapping を付与した method の引数に Model model を追加して、テンプレートにデータを渡すように変えてみたら? →再起動なしで反映されます。
TestController.java の thymeleafSample メソッドに引数を追加します。リンク先のその4のコードに変更します。
thymeleaf-sample.html を リンク先のその2のコード に変更します。
Gradle tasks View を表示し、build タスクをダブルクリックして実行します。
ブラウザで http://localhost:8080/test/thymeleaf-sample にアクセスします。以下の画像と同じ内容が表示され変更が反映されています。
POJO クラスを新規作成して、そのインスタンスを model に渡すようにしてみたら? →再起動なしで反映されます。
Project View で ksbysample-simple.web package を選択した後コンテキストメニューを表示し、「New」->「Java Class」を選択します。「Create New Class」ダイアログが表示されたら User と入力した後「OK」ボタンをクリックします。
TestController.java の thymeleafSample メソッドを リンク先のその5のコードに変更します。
thymeleaf-sample.html を リンク先のその3のコード に変更します。
Gradle tasks View を表示し、build タスクをダブルクリックして実行します。
ブラウザで http://localhost:8080/test/thymeleaf-sample にアクセスします。以下の画像と同じ内容が表示され変更が反映されています。
新規のController クラスと @RequestMapping を付与した method を追加してみたら? →反映されません。再起動が必要です。
Project View で ksbysample-simple.web package を選択した後コンテキストメニューを表示し、「New」->「Java Class」を選択します。「Create New Class」ダイアログが表示されたら Test2Controller と入力した後「OK」ボタンをクリックします。
Gradle tasks View を表示し、build タスクをダブルクリックして実行します。
ブラウザで http://localhost:8080/test2 にアクセスします。404(Not Found)が返ってきてページは表示されません。
以上で確認は終了です。Ctrl+F2 を押して Tomcat を停止します。
ここまでで Project のディレクトリ・ファイルは以下の構成になっています。
結果
- 新規に Controller クラスを作成した場合には Tomcat の再起動が必要。
- それ以外は Tomcat の再起動不要。
- Spring Loaded は IntelliJ IDEA の軽快さと合わさるとかなり便利な気がします。。。
※@Service, @Repository を付与したクラスの検証は後日実施予定。
ソースコード
application.properties
spring.thymeleaf.cache = false
thymeleaf-sample.html
■その1
<!DOCTYPE html> <html> <head lang="ja"> <meta charset="UTF-8"/> <title></title> </head> <body> これは /test/thymeleaf-sample のページです。<br/> Tomcat 起動中に内容を変更しても反映されます。 </body> </html>
■その2
<!DOCTYPE html> <html> <head lang="ja"> <meta charset="UTF-8"/> <title></title> </head> <body> これは /test/thymeleaf-sample のページです。<br/> Tomcat 起動中に内容を変更しても反映されます。<br/> <span th:text="${msg}">msg</span> </body> </html>
<span th:text="${msg}">msg</span>
を追加します。
■その3
<!DOCTYPE html> <html> <head lang="ja"> <meta charset="UTF-8"/> <title></title> </head> <body> これは /test/thymeleaf-sample のページです。<br/> Tomcat 起動中に内容を変更しても反映されます。<br/> <span th:text="${msg}">msg</span><br/> <span th:text="${user.name}">user.name</span>さんの連絡先は<span th:text="${user.tel}">user.tel</span>です。 </body> </html>
TestController.java
■その1
@RequestMapping @ResponseBody public String index() { return "これは /test のページです。Tomcat起動中に文字列を追加してみました。"; }
- return の文字列に "Tomcat起動中に文字列を追加してみました。" を追加します。
■その2
@RequestMapping("/thymeleaf-sample") public String thymeleafSample() { return "test/thymeleaf-sample2"; }
- return の文字列を test/thymeleaf-sample → test/thymeleaf-sample2 へ変更します。
■その3
@RequestMapping("/addurl") @ResponseBody public String addurl() { return "これは /test/addurl のページです。"; }
■その4
@RequestMapping("/thymeleaf-sample") public String thymeleafSample(Model model) { model.addAttribute("msg", "引数 model を追加してみました。"); return "test/thymeleaf-sample"; }
- thymeleafSample の引数に model を追加します。
- model.addAttribute メソッドを呼び出し、テンプレートに渡すデータを追加します。
- return の文字列を test/thymeleaf-sample2 → test/thymeleaf-sample へ戻します。
■その5
@RequestMapping("/thymeleaf-sample") public String thymeleafSample(Model model) { model.addAttribute("msg", "引数 model を追加してみました。"); User user = new User(); user.setName("田中 太郎"); user.setTel("03-1234-5678"); model.addAttribute("user", user); return "test/thymeleaf-sample"; }
- User クラスのインスタンスを生成してデータをセットした後、model に追加する処理を追加します。
thymeleaf-sample2.html
<!DOCTYPE html> <html> <head lang="ja"> <meta charset="UTF-8"/> <title></title> </head> <body> これは /test/thymeleaf-sample のページです。<br/> ただしファイルは thymeleaf-sample2.html です。 </body> </html>
User.java
■その1
package ksbysample.simple.web; public class User { private String name; private String tel; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getTel() { return tel; } public void setTel(String tel) { this.tel = tel; } }
※IntelliJ IDEA で getter, setter method を自動生成したい場合、1)ソース上の挿入位置にカーソルを移動した後コンテキストメニューを表示して「Generate...」メニューを選択、2)表示された「Generate」リストから「Getter and Setter」を選択、3)「Select Fields to Generate Getters and Setters」ダイアログで生成対象のメンバ変数を選択後「OK」ボタンをクリック、で生成できます。
Test2Controller.java
package ksbysample.simple.web; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @Controller @RequestMapping("/test2") public class Test2Controller { @RequestMapping @ResponseBody public String index() { return "これは /test2 のページです。"; } }
履歴
2014/12/29
初版発行。