Javaから生JDBCでDBに接続するのはそろそろ卒業しようと思い、Tomcatの機能であるデータソースを通して接続してみた。
データソースを使うメリット
- Javaのコードを書き換えずにデータソースの切り替えができる。
- Tomcatがコネクションプールの管理をしてくれる。
(DBへの接続と切断の回数を減るのでパフォーマンスが良くなるなどの恩恵がある)
環境
前提としてこれは他言語経験はあるもののJavaは勉強し始めて2か月目のひよっこが作った勉強用の環境です。
Windows 10
Pleiades All in One Eclipse 2019-06
Java 11
Tomcat 9
MariaDB 10.1 (Pleiades All in One に入ってるxamppのやつ)
プロジェクトは動的 Web プロジェクトというテンプレートから作ったもの。
やり方
JDBCドライバのダウンロード・配置
まずはJavaからDBMSに接続するために必要なJDBCドライバをダウンロードする。
Mavenなどのツールを使うのが普通かもしれないが、ここでは手動で行う。
「MariaDB JDBC」「MySQL JDBC」とかで検索しよう。
MariaDBならここ。Java 8用って書いてるけど後方互換あるからOK
https://mariadb.com/kb/en/library/about-mariadb-connector-j/
ちなみにOracle DBのJDBCは本体に付属している。
ダウンロードした.jarファイルは適当なディレクトリに配置しておく。
(後でEclipseからパスを指定するのでダウンロードフォルダに放置しない)
JDBCドライバの指定
TomcatがDBMSに接続する際に必要になるJDBCがどのディレクトリにあるか、Eclipseで指定する。
Eclipseの上のメニュー→実行→実行構成→Apache Tomcat→ローカルホストのTomcat→クラスパス→ユーザー・エントリーを開き、外部JARの追加からダウンロードした.jarファイルを指定する。
server.xmlの書き換え
Eclipseのプロジェクト・エクスプローラーからServers→ローカルホストのTomcat→server.xmlを開き、Contextタグの部分を書き換える。
<!-- 変更前 -->
<Context docBase="PROJECTNAME" path="/PROJECTNAME"
reloadable="false"
source="org.eclipse.jst.jee.server:PROJECTNAME" />
<!-- 変更後 -->
<Context docBase="PROJECTNAME" path="/PROJECTNAME"
reloadable="false"
source="org.eclipse.jst.jee.server:PROJECTNAME">
<Resource name="jdbc/DATASOURCENAME" auth="Container"
type="javax.sql.DataSource"
username="USERNAME"
password="PASSWORD"
driverClassName="org.mariadb.jdbc.Driver"
url="jdbc:mariadb://localhost/DATABASENAME" />
</Context>
driverClassName, urlの値や、USERNAME, DATABASENAMEなどは、使うDBMSや環境に応じて書き換える。
Javaから接続してみる
try {
InitialContext ctx;
ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/DATASOURCENAME");
return ds.getConnection();
} catch (Exception e) {
System.out.println("DBと接続できませんでした。");
e.printStackTrace();
}