11
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【社内用】Spring Bootのプロジェクトにアサインされた方へ(作成中)

Last updated at Posted at 2018-03-21

Spring Bootに初めてアサインされた社員に向けた方へ、説明する際に使うアジェンダです。

前提知識

  • Java8の基本構文
  • HTML5, CSS3, JavaScript(ES5)
  • Servlet3.1
  • HTTPのGET, POST

開発環境

  • Eclipse Pleiades 4.7
  • Java8
  • Spring Boot 1.5.10
  • PostgreSQL 9.6
  • superagent.js

目標

以下のことができるようになることを目指す。

  • 画面の追加
  • クライアント-サーバ間の処理の追加(Restful APIの追加)
  • DBにアクセス(MyBatis)
  • 各ファイルの理解
  • MVCに対応するController, Serviceなどの理解
  • Mavenでjarを作成し、デプロイ
  • Mavenからライブラリの追加
  • アクセス権限処理の追加(Spring Security)
  • 設定より規約の考えの理解

ライブラリの説明

Spring Boot

  • 数あるSpring関係のライブラリをまとめたもの
  • 最小構成でHelloWorldが表示できる
    • あらかじめログの設定など、必要な設定がなされている
  • 流行ってきている?

MyBatis

  • O/R Mapper. iBatisのバージョンアップ版
  • XMLだけでなく、アノテーションでもSQLを記述することができる

Thymeleaf

  • テンプレートエンジン。JSPのようなもの。
  • JSPがJSP専用のタグを指定しているのに対して、ThymeleafはThymeleaf専用の属性で指定する。
    • ブラウザは認識できない属性を無視するだけなので、レイアウトが崩れない?
    • デザイナとプログラマで分業できる
  • Spring BootはJSPでなくThymeleafを推奨している

Mavenとは


【超初心者向け】Maven超入門

  • ビルド管理ツール
  • pom.xmlに設定する
  • <dependency>で外部ライブラリを利用できる。

具体的な説明

1. フォルダ構成の説明

SpringとMVC

  • Controller
  • Service
  • Model
  • View

1. 画面の追加

手順

  1. src/main/static/templateフォルダにHTMLを配置する
  2. Controllerクラスに、作成したHTMLを返すメソッドを作成する
SampleController.java
public ModelAndView index(ModelAndView mav) {
    mav.setViewName("sample");
    return mav;
}

ポイント

  • setViewNameに渡すVIEW名は拡張子不要(拡張子があっても問題ない)。JSPとThymeleafどちらでも使えるようにするためらしい。

2. Restful APIの追加

POST API

  • superagentではpost, sendメソッドを使う

POST API(ファイルアップロード)

  • superagentではpost, field, ...メソッドを使う

Restful API

  • APIの命名規則
  • GETとPOSTの使い分け

3. MyBatisでDBにアクセス

MyBatis公式サイト

XML

  • mybatis-config.xml
  • src/main/resources/mybatis/mapper/*.xml
  • タグを使ってSQLを動的に生成できる
    • <if>, <foreach>, <where>など
  • MyBatisが受け取る情報を推測するので、parameterType属性はたぶん不要。

DAOクラス

  • @Componentを付与する
  • sqlSessionselectOneselectListなどのメソッドを呼ぶ

4. Spring Security

Spring Security Reference
Thymeleaf + Spring Security integration basics

SecurityConfig.java

以下の項目などを設定する

  • ログインしなくてもアクセスできるURL
  • ロールがないと、アクセスできないURL

Thymeleaf

  • sec:authorize="hasRole('ROLE_USER')"のような記述ができる

5. Mavenの使い方

既存システムでの設定

  • Spring Boot用のpom.xml(spring-boot-starter-parent)を<parent>で指定している
    • 利用する外部ライブラリのバージョンも定義されている。
    • バージョンを指定したい場合は、<properties>で指定する。
  • 自社ライブラリの利用
  • JavaDocの生成

EclipseでMaven更新

pom.xmlを修正したら、「プロジェクトを右クリック > Maven > プロジェクトの更新」で更新する。

jarファイルの生成(デプロイ用)

  • mvn installコマンドを実行すると、jarファイルがプロジェクト配下/targetフォルダに生成される。
  • テストコードの実行をスキップする場合は、mvn install -Dmaven.test.skip=trueを実行する。

6. Spring Boot関係

application.properties

Profile

https://area-b.com/blog/2015/01/30/2316/
http://endok.hatenablog.com/entry/2016/06/12/181900
https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-profiles.html

既存システムでの設定

  • 既存システムでは3種類のプロファイルを定義する

    • local: ローカル環境で起動
    • test: 開発環境のサーバで起動
    • release: 本番環境のサーバで起動
  • javaコマンドの引数で--spring.profiles.active=localのようにプロファイルを指定

  • 各プロファイルに対応したapplication.propertiesを用意している

    • application.properties : デフォルトの設定値。
    • application-test.properties : テスト環境用の設定値。
    • application-release.properties: 本番環境用の設定値。Swaggerなどのツールの無効化、キャッシュの有効化
    • application-local.properties : 個人用の設定。コミットしないこと前提。

デプロイ方法

  1. コマンドでmvn install -Dmaven.test.skip=trueを実行して、jarファイルを生成する
    • プロジェクト配下/targetフォルダに生成される
  2. javaコマンドでサーバを起動する
    • 起動用のバッチファイルあり(start.bat)

既存プロジェクトのログ設定

  • SLF4J(インターフェイス)とLogback(実装)の組み合わせを採用した
    • 古いシステムだと、commons-logging(インターフェイス)とlog4j(実装)の組み合わせが多い
  • src/main/resources/logbakc.xml
    • 最初から用意されているログフォーマットに、個別の設定を追記
  • Lombokの@Slf4jでフィールドlogを生成
  • 実行したSQL(プリペアドの値も出力された状態)をログに出力するため、log4jdbcを採用した
  • Cntrollerの前後でログを出力(AOP)

JUnit

Springの@autowired


実習課題

前提条件

  • 開発環境が整っている
  • Spring Bootを使った既存プロジェクトに対して、機能を追加する
  • Ajax通信は、superaget.jsを利用する

データベース

create_table.sql
CREATE table user (
  SERIAL user_id NOT NULL,
  TEXT user_name NOT NULL,
  TEXT section NOT NULL,
  PRIMARY KEY (user_id)
);

Controllerクラスの追加

  • ブラウザの開発ツールで、Request/Responseを確認すること

HTMLファイルの作成

sample.htmlを作成して、URL/sample.htmlsample.htmlの中身を表示

  • メッセージファイル(message.properties)の値を参照する

GET APIを作成(パラメータは1個)

  • @RequestParamで、クライアントから数値を1個受け取る。
  • サーバ側で、受け取った数値の2乗を計算して、クライアントに返す

GET APIを作成(1個の情報を渡す)

  • @RequestParamで、クライアントから数値を1個受け取る。
  • サーバ側で、受け取った数値の2乗を計算して、クライアントに返す

GET APIを作成(複数の情報を渡す)

  • Beanクラスを作成して、そのクラスで複数の情報を受け取る。
  • サーバ側で、受け取った情報に何らかの処理を行い、クライアントに返す

POST APIを作成

  • POST APIを作成する。
    • 複数の情報を受け取る
    • 受け取った情報に対して何らかの処理を行い、クライアントに返す
  • JavaScriptで作成したAPIを呼び出す
    • レスポンスの内容を画面に表示する

POST APIを作成(ファイルアップロード)

  • POST APIを作成する
    • 1個のファイルと、1個の文字列を受け取る
    • 受け取ったファイルを保存する
  • JavaScriptで作成したAPIを呼び出す

データベースへのアクセス

  • DAOクラスにメソッドを追加
  • Controllerクラス内のメソッドから、DAOクラスのメソッドを呼び出す

user_idでSELECT

  • DAOクラスにメソッドを作成する
    • user_idで絞り込んだ結果を取得するメソッド

ユーザ名 or 部署でSELECT

  • <if>, <where>を使って、WHERE句を記述
  • SQLに渡す情報がnullならば、絞り込まないこと

userテーブルにINSERT

  • <if>, <where>を使って、WHERE句を記述
  • SQLに渡す情報がnullならば、絞り込まないこと

1回のSELECT文で階層構造のクラスに情報を格納

  • <collection>を使って、SQL文を記述

Maven

pom.xmlを修正して、外部ライブラリを利用する

  • Mavenローカルリポジトリを確認
  • Eclipseのプロジェクトプロパティで確認

jarファイルを生成して、javaコマンドでサーバを起動

  • Eclipseを使わずに、mvnコマンドでjarファイルを生成
  • javaコマンドの引数でポート番号を指定
  • プロファイルを変更して、設定値などが切り替わることを確認

ログの確認

  • logback.xmlでログレベルを変更して、ログの出力される/されないを確認

文章問題

HTTP

  • HTTPのGETとPOSTの違いを説明しなさい。
    -リクエスト/レスポンスのヘッダとボディ

データベース

  • O/R Mapperの特徴を、メリット,デメリットをふまえて説明しなさい
  • Javaから情報を受け取るには、# or $が利用できる。その違いを説明しなさい。

HelloWorld

RestfulAPIの追加

@RequestBody, @RequestParamなど

ファイルアップロード

MyBatisの導入

Spring Boot 徹底入門 14章のサンプルWebシステム

Servletの課題

【補足】Terasolunaとの比較

11
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?