JavaのWebアプリケーション開発フレームワークによる、Webサイト開発の顛末記です。

EclipseのMavenを使った、Spring-MVC、Thymeleaf、MyBatis 等のプログラミングテクニックを、
備忘録的に記録しています。実際に動くソースコードを多用して説明していますので、
これからEclipseや、Spring-MVCを始めたいと思っている人にとって、少しでも参考になれば幸いです。
■SpringMVC の小径 第8歩 あと一歩 DB連携
8-2)JDBC接続
Spring-MVCからDBに接続するためには、DBの接続情報の設定と
Spring-MVC設定ファイルにMyBatisを使うための宣言を行う必要があります。
それぞれの設定を、「4-2)Spring-MVC設定」の節で説明した、
「applicationContext.xml」で定義してもいいのですが、
ここでは、それぞれのファイルを分割して定義することにします。

最初に、DB接続情報プロパティファイルの定義です。
/WebContent/WEB-INF/jdbc.properties というファイルを新規作成します。
中身は簡単。
  jdbc.driverClassName=org.postgresql.Driver
  jdbc.url=jdbc:postgresql://host名/データベース名
  jdbc.username=DBアカウント
  jdbc.password=DBアカウントパスワード
1)先頭行: PostgreSQL JDBC ドライバ接続情報なので、この通りに記述します。
2)2行目:host名 :DBが動作しているマシンのホスト名です。
      外部のDBに接続しないのであれば、localhost で大丈夫です。
3)2行目:データベース名 DBをセットアップする際にデータベース名を定義しているはずなので、
      この名前を指定します。(ここでは話の都合上、仮にjlabodbとしておきましょう)。
4)3行目:DBアカウント DBをセットアップする際にデータベースへのログインアカウントを作成しているはずなので、
      このアカウントを指定します。(ここでは仮に、dbuser)としておきましょう。
5)4行目:DBアカウントパスワード DBログインアカウントのパスワードを指定します。

次は、Spring-MVC JDBCドライバー接続情報を定義します。
/WebContent/WEB-INF/applicationContextDB.xml というファイルを新規作成します。
ここは嗜好が分かれるところで、/WebContent/WEB-INF/applicationContext.xml に追記する
方法で書いても全く問題ありません。あくまで凡例なので、自分の好みで判断してください。
/WebContent/WEB-INF/applicationContextDB.xml
24行目:直前で作成した、DB接続情報プロパティファイルを指定しています。
28行目~37行目:DB接続情報プロパティファイル(jdbc.properties)に記載されている
         それぞれのエイリアス名を、${}で括って指定します。
DB接続情報が変更になる場合は、jdbc.propertiesを変更するだけで、こちらは影響ありません。
使用するDataSourceクラスは、ネットを検索するとよく、SpringFramework標準の
org.springframework.jdbc.datasource.DriverManagerDataSource を使用した例が出てきますが、
ここでは、tomcat-dbcpの org.apache.tomcat.dbcp.dbcp2.BasicDataSource クラスを使用します。
理由は、DriverManagerDataSourceはDB接続時にConnection Poolingを行わないため
アクセスが多い場合、スループットが落ちるのを防ぐため、Connection Pooling機能を備えた
tomcat.dbcp.dbcp2.BasicDataSourceを使用します。
apache commons-dbcp も使用可能ですが、個人的な好みで、tomcat-dbcpを使っています。

※)tomcat-dbcpを利用するためには、pom.xml に以下の定義を追加する必要があります。
 <dependency>
  <groupId>org.apache.tomcat</groupId>
  <artifactId>>tomcat-dbcp</artifactId>
  <version>8.0.39</version>
  <scope>provided</scope>
 </dependency>
 バージョンは、使用しているtomcatのバージョンに合わせましょう。
 あと、運用環境(おそらくtomcatで動いている)にデプロイする場合、
 tomcat-dbcpは運用先ではtomcat配下に存在するはずなので、
 tomcat-dbcpがデプロイされないように、scope は provided としておきます。

43行目~45行目:トランザクション用おまじない。 説明は割愛。
52行目:DBに対してデータを投入したり、DBからのデータを取得するための
    DTO(Data Table Object) いわゆるビジネスモデルクラスのパッケージを指定します。
    これを宣言することで、SQLマッパーXMLでDTOを使用する際に、パッケージ名を省略できます。
    ここは、プロジェクトごとに調整が必要です。
54行目:SQLマッパーXMLファイル群を配置する場所を指定します。
    ここも、プロジェクトごとに調整が必要です。
60行目:O/Rマッパーインターフェースのパッケージを指定します。
    ここも、プロジェクトごとに調整が必要です。

赤字以外は、どのプロジェクトでも定型的に使用可能です。

最後は、web.xmlデプロイメント記述子への、設定ファイルの追加を行います。
/WebContent/WEB-INF/web.xml
後半の方にある、/WEB-INF/applicationContext.xmlの後ろに、カンマで区切って
上で作成した、/WEB-INF/applicationContextDB.xmlを追加します。
ワイルドカードを使用した、
<param-value>/WEB-INF/*.xml</param-value>
という指定も可能ですが、個人的には明確に名前を指定してあげる方が好みです。

 

それでは、ここまで設定が完了したら、別途DBを起動しておいて、
Eclipseの「サーバービュー」でローカルホストTomcatを起動してみましょう。
「コンソールビュー」にTomcatの起動メッセージが表示され、
異常なログが出力されなければ設定完了です。
もし、起動に失敗するような場合は、設定情報をもう一度見直してください。
jdbc.propertiesの書き方に間違いがあったりする場合が考えられます。

 

※)サーバービューで、DB接続するアプリを動かす場合の注意点
前節で、DB(PostgreSQL)に接続するためのJDBCドライバーを、pom.xmlに定義しましたが、
Eclipseのサーバービューで、DB接続アプリを動かすためには実はこれだけでは動作しません。
JDBCドライバープラグイン(この環境の場合ですと、postgresql-9.3-1100.jdbc4.jar)を、
Ecliseで設定したTomcat動作環境に配置する必要があります。
このプロジェクトの場合ですと、「2-1)Tomcatサ-バ-の設定」で、
${TOMECAT_HOME} = C:¥Program Files¥Apache Software Foundation¥apache-tomcat-8.0.36
に設定しているので、${TOMECAT_HOME}¥lib¥に、postgresql-9.3-1100.jdbc4.jarをコピーしておく必要があります。

 

大丈夫ですか? 付いてこられていますか?
まだまだ、山道は坂が続きますよ。
これから本格的な登山道に入りますので、覚悟して付いてきてください。