Posted at

JAVA (tomcat) でセッションをDBに持つ方法

More than 3 years have passed since last update.

最近仮想化の技術が進歩して、AWSやAzure等のIaasも普及してきた。。。

今までは基本はサーバ1台で運用し、バックアップでクラスタ化するとかしないとか。。。

でも仮想化とかIaaSとかで、WEBサーバが1台で運用している時もあれば、

3台で運用している時もあって時間帯とかでスケールアップすることも容易になってきた。

そんな時、sessionのデータをDBに持ったりすれば便利だなと・・・

SqlServerだったら容易にできるのになと・・・

Java(tomcat)でできないか調べてみました。。。

出てきました。

context.xmlに以下の内容を記載すると、SessionのデータがDBに格納することができました。

<Manager sessionIdLength="10" className="org.apache.catalina.session.PersistentManager"

distributable="true"
duplicates="0"
saveOnRestart="false"
maxActive="100"
maxActiveSessions="100"
minIdleSwap="0"
maxIdleSwap="0"
maxIdleBackup="0"
maxInactiveInterval="0"
sessionCounter="0" >
<Store className="org.apache.catalina.session.JDBCStore"
checkInterval="1"
connectionURL="jdbc:mysql://localhost:3306/sessiondb?user=root&amp;password=pass"
driverName="org.gjt.mm.mysql.Driver"
sessionAppCol="app_name"
sessionDataCol="session_data"
sessionIdCol="session_id"
sessionLastAccessedCol="last_access"
sessionMaxInactiveCol="max_inactive"
sessionTable="tomcat_sessions"
sessionValidCol="valid_session" />
</Manager>

もちろんDBにSessionデータを格納する必要がありますが、

テーブルの指定や格納するカラムの指定もできてかなり便利です。

ただちょっと遅くなったような・・・

ま~原因は後々調べるとして、

2つはまりました。connectionURLの&の部分です。

エスケープすることを忘れていて、DBに接続できません

て出た。。。。

もう一つはJDBCのjarファイルがTomcatのlib配下に入っていないため、ClassNotFoundがでました。。

今回はちょっとメモ程度の投稿です。

以上