MariaDB Connector/JでApache TomcatとMariaDBを連携させる

概要

今回は前回のAJPでApache 2.4とApache Tomcat 9.0を連携させるで作成した環境に、MariaDBを導入して連携させてみようと思います。連携にはMariaDB Connector/JというJDBCドライバを使用します。

また、MariaDBとTomcatは同じ仮想マシン(CentOS8)上で動作しています。

最後には簡単な動作確認をしてみようと思います。

環境

  • VirtualBox 6.1.16
  • ゲストOS(CentOS 8.2.2004)
  • Java 1.8.0_272
  • Apache Tomcat 9.0.39
  • MariaDB 10.3
  • Apache 2.4.37
  • MariaDB Connector/J 2.7.0

MariaDB

インストール

さっそくインストールを行い、自動起動&起動の設定をします。

# dnf install mariadb-server

# systemctl enable mariadb --now

初期設定

まずはrootパスワードの設定や不要なユーザ&データベースを削除するなど、一連の処理を行えるmysql_secure_installationを実行します。パスワード設定以外は全てEnterで進んで大丈夫です。

# mysql_secure_installation

完了したら、rootユーザで先ほど設定したパスワードでログインします。

# mysql -uroot -p<password>

では、文字セットの設定からしていきます。デフォルトだとutf8やlatin1などバラバラに設定されているので、utf8mb4に変更していきたいと思います。

MariaDB [(none)]> show variables like 'char%';
+--------------------------+------------------------------+
| Variable_name            | Value                        |
+--------------------------+------------------------------+
| character_set_client     | utf8                         |
| character_set_connection | utf8                         |
| character_set_database   | latin1                       |
| character_set_filesystem | binary                       |
| character_set_results    | utf8                         |
| character_set_server     | latin1                       |
| character_set_system     | utf8                         |
| character_sets_dir       | /usr/share/mariadb/charsets/ |
+--------------------------+------------------------------+
8 rows in set (0.003 sec)

なぜutf8mb4かというと、MariaDB上のutf8は1~3バイトで表現されるため、4バイト文字(絵文字等)が正しく表示されないといったことが起きるからです。そのため、1~4バイトで表現するutf8mb4を使用しています。

文字セットを変更するには、/etc/my.cnf.d/mariadb-server.cnfをいじります。以下のように設定を追記します。終わったらmariadbを再起動して設定を反映させます。

# vim /etc/my.cnf.d/mariadb-server.cnf

-------(省略)---------
[mariadb]
character-set-server = utf8mb4        #追記
[client-mariadb]             #ない場合追記
default-character-set = utf8mb4    #追記

# systemctl restart mariadb

では、もう一度ログインして変更されているかどうか確認します。

# mysql -uroot -p<password>
MariaDB [(none)]> show variables like 'char%'
    -> ;
+--------------------------+------------------------------+
| Variable_name            | Value                        |
+--------------------------+------------------------------+
| character_set_client     | utf8mb4                      |
| character_set_connection | utf8mb4                      |
| character_set_database   | utf8mb4                      |
| character_set_filesystem | binary                       |
| character_set_results    | utf8mb4                      |
| character_set_server     | utf8mb4                      |
| character_set_system     | utf8                         |
| character_sets_dir       | /usr/share/mariadb/charsets/ |
+--------------------------+------------------------------+
8 rows in set (0.001 sec)

無事変更されました。character_set_systemはutf8のままで問題ないです。

参考: MariaDB(MySQL)初期設定時のセキュリティとutf8mb4化の手順

ユーザ・データベース作成

以下のようにcreate ~ でユーザとデータベースを作成します。grant ~ の行は、作成したユーザに作成したデータベースの使用権限を付与しています。

# mysql -uroot -p<rootパスワード>
-------(省略)----------
MariaDB [(none)]> create user <ユーザ名>@localhost identified by '<パスワード>';      
Query OK, 0 rows affected (0.000 sec)

MariaDB [(none)]> create database <データベース名>;      
Query OK, 1 row affected (0.000 sec)

MariaDB [(none)]> grant all privileges on <データベース名>.* to <ユーザ名>@localhost;   
Query Ok, 0 rows affected (0.000 sec)

MariaDB [(none)]> exit
Bye

テーブル作成

では、作成したユーザでログインし、最後にやる動作確認のためのテーブルを簡単に作ります。

自分の場合は、データベース名: tommaria, ユーザ名: kenken, パスワード: larc0223で設定しています。

# mysql -ukenken -plarc0223

MariaDB [(none)]> use tommaria        #tommariaデータベースに接続
Database changed

MariaDB [tommaria]> show full tables;      #現在のテーブルを確認(当然からっぽ)
Empty set (0.001 sec)

MariaDB [tommaria]> CREATE TABLE tommaria.names (     #namesというテーブルを作成
    -> id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
    -> name VARCHAR(10)
    -> );
Query OK, 0 rows affected (0.013 sec)

MariaDB [tommaria]> show tables from tommaria      #現在のテーブルを確認(namesがある)
    -> ;
+--------------------+
| Tables_in_tommaria |
+--------------------+
| names              |
+--------------------+
1 row in set (0.000 sec)

MariaDB [tommaria]> select * from names;         #namesテーブル内の中身を確認(当然からっぽ)
Empty set (0.000 sec)

MariaDB [tommaria]> insert into names values (1, 'kenken');          #データ追加
Query OK, 1 row affected (0.004 sec)

MariaDB [tommaria]> select * from names;         #namesテーブルの中身を確認
+----+--------+
| id | name   |
+----+--------+
|  1 | kenken |
+----+--------+
1 row in set (0.000 sec)

MariaDB [tommaria]> exit
Bye

MariaDB Connector/J

インストール

TomcatはこのMariaDB Connector/Jを通してMariaDBに接続することができます。まずはダウンロードサイトにいきます。

ProductがJava 8 connector, Versionが2.7.0-GAであることを確認し、下のURLをコピーします。

では、配置場所に移動して、wgetでダウンロードします。

# cd /opt/apache-tomcat-9.0.39/lib

# wget https://dlm.mariadb.com/1157496/Connectors/java/connector-java-2.7.0/mariadb-java-client-2.7.0.jar

すると、mariadb-java-client-2.7.0.jarがダウンロードされるので、まずは所有権とパーミッションを以下のように変更します。

# ll mariadb-java-client-2.7.0.jar
-rw-r--r--  1 root  root 624101  9月 26 01:25 mariadb-java-client-2.7.0.jar

# chown tomcat. mariadb-java-client-2.7.0.jar

# chmod 640 mariadb-java-client-2.7.0.jar 

# ll mariadb-java-client-2.7.0.jar
-rw-r----- 1 tomcat tomcat 624101  9月 26 01:25 mariadb-java-client-2.7.0.jar

動作確認

まず、/webappsに移動し、テスト用のjspディレクトリを作成し、所有権とパーミッションを変更します。

# cd ../webapps

# mkdir jsp

# chown tomcat. jsp

# chmod 750 jsp

# ll jsp
drwxr-x---   2 tomcat tomcat    6 11月  8 20:11 jsp

次は、/jsp以下にtest.jspファイルを以下の内容で作成します。作成するにあたっては、次のサイトを参考にアレンジしました。

参考: 【Linux技術動画】MySQL(DB)設定&ドライバ導入!ApacheTomcatと連携!後編 ※約23分

参考: MariaDB Connector/J で MariaDB 10.4 に接続する – Qiita

# vi jsp/test.jsp
<%@ page contentType="text/html; charset=utf-8" import="java.sql.*" %>

<html>
<head>
<title>Test</title>
</head>
<body>
<h1>MariaDBからデータを取り出す</h1>

<br>
<td>id</td>
<td>name</td>
</br>

<%
        Class.forName("org.mariadb.jdbc.Driver");
        Connection conn=DriverManager.getConnection("jdbc:mariadb://localhost:3306/tommaria?user=kenken&password=larc0223");
        Statement st=conn.createStatement();
        ResultSet res=st.executeQuery("select * from names");

        while(res.next()){
                out.println("<br>");
                out.println("<td>" + res.getString("id") + "</td>");
                out.println("<td>" + res.getString("name") + "</td>");
                out.println("</br>");
  }
        st.close();
        conn.close();

%>

</body>
</html>
~                                                                       

これは<% %>内にMariaDBからデータを取り出す処理を書いています。公式サイトにもテンプレートが一部載っているので参考にしてみてください。

では、準備が整ったので、https://IPアドレス/tomtom9/jsp/test.jspにアクセスしてみます(前回のリバースプロキシの設定で、/tomtom9 でtomcat側( / )に転送される設定をしています)。

すると、このようにデータベース上のテーブルに登録したidとユーザ名が表示されており、TomcatとMariaDBは無事連携できました。

Comments

Copied title and URL