LoginSignup
3
0

More than 3 years have passed since last update.

初歩から学ぶSpring Session using Db2 第0回:環境セットアップ

Last updated at Posted at 2020-12-04

0. はじめに

Spring Sessionお試し用Webアプリはこちらで公開しています。

本記事で解説している手順を実施した後に、
Webアプリを起動させて
ブラウザから、/sessionDemoにアクセスすると
Db2上のテーブルにSession情報が永続化されます。

1. 導入 〜 Spring Sessionの魅力 〜

「使った分だけ課金」ポリシーのクラウドサービスが多い昨今は
「立ち上がりっぱなし」転じて
「On-Memoryに状態を保持しっぱなし」Webアプリだと肩身が狭い。

  • 持て余しているリソース(CPU、Memory etc...)は、欲しい人に譲りたい。
  • 処理要求が無いのなら、休眠していて欲しい。

とはいえ、ステートフルにデータを扱いたい場合もあるので
休眠させるにしても、アレコレ検討が必要。
例えば、ログイン完了した後に、データ色々と持ち回りたいケース等。

つまり、クラウドNativeなWebアプリに望まれる要件は以下。

  • 処理が無いなら、休眠していて欲しい。
  • 休眠の前は、何処ぞにSessionデータ残したい。
  • 休眠が明けたら、以前のようにSessionデータ扱いたい。

労せずして、なんとか出来ませんかねぇ?


この種の悩みに答えてくれる機能が
Spring Frameworkの世界では、あらかじめ用意されている様子。

その名も、Spring Sessionと言うらしい。ちょっと学んでみました。

第0回目は、環境セットアップ方法の纏めです。

2. Dockerインストール

Docker公式HP からダウンロードできます。
お使いのOSに合わせて導入ください。

3. Db2 Express-C Dockerイメージpull & 起動

Spring Sessionで、Sessionを永続化する先の環境セットアップです。

今回は、RDBMS製品として
IBM社のDb2 Express-Cを使います。

以下コマンドで、Dockerイメージをダウンロードしつつ
ポート番号・パスワード・DB名など指定して起動させます。

Db2コンテナ起動
$ docker run -itd --name mydb2 --privileged=true -p 50000:50000 -e LICENSE=accept -e DB2INST1_PASSWORD=p@ssw0rd -e DBNAME=testdb -v [Dockerホスト側path]/database:/database ibmcom/db2

ついでに、Db2表領域をコンテナから外出しする用途で
Dockerホスト側のdirをマウントさせています。
コマンド内「Dockerホスト側path」を適宜、書き換えください。

その他、docker runオプション仔細は、公式マニュアルご参照。

4. Db2稼働確認 & ログイン

正しく立ち上がっていれば
STATUS:Upになります。

Db2コンテナ確認
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                                          NAMES
cb23f39d4164        ibmcom/db2          "/var/db2_setup/lib/…"   45 hours ago        Up 47 seconds       22/tcp, 55000/tcp, 60006-60007/tcp, 0.0.0.0:50000->50000/tcp   mydb2
$ 

テーブルは何も無いことを確認。

テーブル確認
$ docker exec -it mydb2 bash
[root@cb23f39d4164 /]# su - db2inst1
[db2inst1@cb23f39d4164 ~]$ db2 connect to testdb user db2inst1

db2 => list tables

Table/View                      Schema          Type  Creation time
------------------------------- --------------- ----- --------------------------

  0 record(s) selected.

db2 => quit

[db2inst1@cb23f39d4164 ~]$

5. Spring Session データ永続先テーブル作成

Spring Session 公式でSQLファイル配布してるので、ダウンロードして実行します。

以下、作業例のとおり
docker runで指定した、ホスト側dirに配置しておくと楽です。

SQL実行
[db2inst1@cb23f39d4164 ~]$ db2 -tvf /database/sql/schema-db2.sql
CREATE TABLE SPRING_SESSION ( PRIMARY_ID CHAR(36) NOT NULL, SESSION_ID CHAR(36) NOT NULL, CREATION_TIME BIGINT NOT NULL, LAST_ACCESS_TIME BIGINT NOT NULL, MAX_INACTIVE_INTERVAL INT NOT NULL, EXPIRY_TIME BIGINT NOT NULL, PRINCIPAL_NAME VARCHAR(100), CONSTRAINT SPRING_SESSION_PK PRIMARY KEY (PRIMARY_ID) )
DB20000I  The SQL command completed successfully.

CREATE UNIQUE INDEX SPRING_SESSION_IX1 ON SPRING_SESSION (SESSION_ID)
DB20000I  The SQL command completed successfully.

CREATE INDEX SPRING_SESSION_IX2 ON SPRING_SESSION (EXPIRY_TIME)
DB20000I  The SQL command completed successfully.

CREATE INDEX SPRING_SESSION_IX3 ON SPRING_SESSION (PRINCIPAL_NAME)
DB20000I  The SQL command completed successfully.

CREATE TABLE SPRING_SESSION_ATTRIBUTES ( SESSION_PRIMARY_ID CHAR(36) NOT NULL, ATTRIBUTE_NAME VARCHAR(200) NOT NULL, ATTRIBUTE_BYTES BLOB NOT NULL, CONSTRAINT SPRING_SESSION_ATTRIBUTES_PK PRIMARY KEY (SESSION_PRIMARY_ID, ATTRIBUTE_NAME), CONSTRAINT SPRING_SESSION_ATTRIBUTES_FK FOREIGN KEY (SESSION_PRIMARY_ID) REFERENCES SPRING_SESSION(PRIMARY_ID) ON DELETE CASCADE )
DB20000I  The SQL command completed successfully.

[db2inst1@cb23f39d4164 ~]$

6. Spring InitializrでProject定義 & IDEでImport

Spring Initializrはこちら、ですが...
お試しWebアプリ用のProjectに pom.xml を付けたので割愛。

pom.xmlの、主要な箇所は以下です。

pom.xml抜粋
#Spring Session本体
spring-session-core
spring-session-jdbc

#お試しWebアプリ用
spring-boot-starter-web

#db2接続の前提
jcc
HikariCP

だいぶ長くなりましたが、環境まわりセットアップは以上です。

7. Spring Session基本設定

まずapplication.propertiesに適宜、定義します。

主要バラメータのみ抜粋。
仔細はapplication.propertiesの各Commentご参照。

application.properties
spring.session.store-type=jdbc

spring.session.jdbc.flush-mode=immediate
spring.session.jdbc.initialize-schema=never

server.servlet.session.timeout=30s

spring.session.jdbc.table-name=SPRING_SESSION
spring.session.jdbc.save-mode=always

spring.datasource.*

続いて、@EnableJdbcHttpSessionを使ってConfigクラスを用意。

HttpSessionConfig.java
@EnableJdbcHttpSession
public class HttpSessionConfig {

    @Bean
    public PlatformTransactionManager transactionManager(DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource); 
    }

}

通常のSpring Webアプリと異なる箇所は、以上です。

8.終わりに

第0回は、環境セットアップ周りを中心に解説させて頂きました。

次回は、お試し用Webアプリの挙動を交えつつ、Spring Sessionを紹介する予定。
乞うご期待です。

3
0
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
3
0