การเชื่อมต่อจาวาเข้ากับ MariaDB/MySQL

MariaDB และ MySQL เป็นฐานข้อมูลแบบโอเพนซอร์ซที่ได้รับความนิยมอย่างสูง ที่ถูกใช้โดยนักพัฒนาทั่วโลก ในวิธีใช้นี้เราจะแสดงถึงวิธีการเชื่อมต่อแอปพลิเคชันจาวาเข้ากับฐานข้อมูลต่อไปนี้, เซิร์ฟเวอร์แบบ standalone และ clustered solution

  1. เข้าสู่ระบบด้วยบัญชี Ruk-Com และสร้าง Env ขึ้น create an environment ด้วยเซิร์ฟเวอร์ฐานข้อมูล MariaDB (หรือ MySQL) (มีอยู่ในส่วนของ SQL wizard)
    • สำหรับเซิร์ฟเวอร์ฐานข้อมูลแบบ standalone


    • สำหรับ Auto-Clustering solution

เรายังได้ทำการเพิ่ม Tomcat Node เพื่อให้เป็นตัวอย่างของการเชื่อมต่อฐานข้อมูลจากแอปพลิเคชันเซิร์ฟเวอร์

  1. ตรวจสอบอีเมลของคุณ – ควรที่จะมีข้อความที่ประกอบด้วยรายละเอียดของแอดมินสำหรับการสร้างเซิร์ฟเวอร์ MariaDB (หรือ MySQL) ในกรณีของ database cluster เราจะแนะนำให้ทำการเชื่อมต่อผ่าน proxy loadbalancer
  2. สลับไปยังแดชบอร์ดและคลิกปุ่ม Open in Browser สำหรับ MariaDB/MySQL node.



    ถ้าคุณมี clustered solution ให้กดที่ Open in Browser ที่อยู่ถัดจาก master database node (สัญลักษณ์ตัว M)


    ทำการล็อกอินเพื่อเปิดพาเนลแอดมินโดยใช้รายละเอียดที่ได้รับจากอีเมลดังกล่าวข้างต้น
  3. ใช้ฐานข้อมูลที่มีอยู่เดิม (เช่น test) หรือทำการสร้างขึ้นมาใหม่


  4. กลับไปที่แดชบอร์ดและกดปุ่ม Config ที่อยู่ถัดจาก application server (ในกรณีของเราจะเป็น Tomcat) เพื่อเข้าถึง configuration file manager

  5. ไปยังโฟลเดอร์ /opt/tomcat/temp สร้างไฟล์ใหม่ mydb.cfg

สำหรับการเชื่อมต่อฐานข้อมูลแบบ standalone ให้เพิ่มข้อมูลต่อไปนี้ในไฟล์ mydb.cfg

host=jdbc:mysql://{host}/{db_name}
username={user}
password={password}
driver=com.mysql.jdbc.Driver

ข้อมูลที่จำเป็นทั้งหมดสามารถพบได้ในอีเมล MariaDB/MySQL node

  • {host} – ลิงก์ไปยังโหนดฐานข้อมูลโดยไม่มีส่วนโปรโตคอล
  • {db_name} – ชื่อฐานข้อมูล (ในกรณีของเราชื่อ test )
  • {user} และ {password} – ข้อมูลของผู้ดูแลฐานข้อมูล (สำหรับการใช้งาน แนะนำให้สร้างบัญชีเฉพาะด้วยสิทธิ์การเข้าถึงที่เหมาะสม)

สำหรับการเชื่อมต่อกับ cluster ตัวจัดสรรภาระงาน ProxySQL ได้ใช้จุดเข้าใช้งานและแต่ละประเภทของฐานข้อมูลที่มีตัวเชื่อมต่อเป็นของตัวเอง ดังนั้นทำการเพิ่มข้อมูลต่อไปนี้ในไฟล์ mydb.cfg

สำหรับ MariaDB:

host=jdbc:mariadb://{hostname}/{db_name}?usePipelineAuth=false
username={user}  
password={password}
driver=org.mariadb.jdbc.Driver
  • {hostname} – ลิงก์ไปยังตัวจัดสรรภาระงาน DB cluster (เช่น ProxySQL layer)
  • {db_name} – ชื่อของฐานข้อมูล เราใช้ชื่อ test ในขั้นตอนแรก
  • usePipelineAuth – หากเปิดการใช้งาน queries ที่ต่างกัน ให้ดำเนินการโดยใช้ pipeline (queries ทั้งหมดคือการส่ง, มีแค่ผลลัพธ์ทั้งหมดเท่านั้นที่เป็นการอ่าน), อนุญาตให้สร้างการเชื่อมต่อได้เร็วขึ้น ค่านี่ควรที่จะถูกตั้งเป็น False, เนื่องจากการใช้งานดังกล่าวไม่สามารถใช้ได้กับ ProxySQL เมื่ออยู่รวมกับ cluster
  • {user} และ {password} – รายละเอียดของฐานข้อมูลจะได้รับผ่านทางอีเมล

สำหรับ MySQL:

host=jdbc:mysql://{host}/{db_name}  
username={user}  
password={password}  
driver=com.mysql.jdbc.Driver
  • {hostname} – ลิงก์ไปยังตัวจัดสรรภาระงาน DB cluster (เช่น ProxySQL layer)
  • {db_name} – ชื่อของฐานข้อมูล (ในกรณีนี้เราใช้ชื่อ test )
  • {user} และ {password} – ข้อมูลของผู้ดูแลฐานข้อมูล (สำหรับการใช้งาน แนะนำให้สร้างบัญชีเฉพาะด้วยสิทธิ์การเข้าถึงที่เหมาะสม)

ด้วยวิธีนี้การตั้งค่าการเชื่อมต่อทั้งหมดจะถูกบันทึกไว้ในไฟล์เดียว ซึ่งต่อมาจะถูกอ่านโดยแอปพลิเคชันในภายหลัง

  1. สำหรับการปรับใช้และการเชื่อมต่อเพิ่มเติม เราจะใช้แอปพลิเคชันตัวอย่างตามต่อไปนี้
package connection;  

import java.io.IOException;  
import java.sql.Connection;  
import java.sql.DriverManager;  
import java.sql.SQLException;  
import java.sql.Statement;  
import java.text.SimpleDateFormat;  
import java.util.Date;  
import java.util.Properties;  
import java.util.logging.Level;  
import java.util.logging.Logger;  

public class DbManager {

    public String date = new SimpleDateFormat("dd-MM-yyyy-HH-mm").format(new Date());  
    private final String createTable = "CREATE TABLE `" + date + "` (id INT, data VARCHAR(100));";  
    private static final int LoginTimeout = 10;  

    public DbManager() {  
    }  

    public Connection createConnection() throws IOException, ClassNotFoundException, SQLException {  
        Properties prop = new Properties();  
        System.out.println("\n\n=======================\nJDBC Connector Test " + date);  
        System.out.println("User home directory: " + System.getProperty("user.home"));  
        String host;  
        String username;  
        String password;  
        String driver;  
        try {  
            prop.load(new java.io.FileInputStream(System.getProperty("user.home") + "/mydb.cfg"));  

            host = prop.getProperty("host").toString();  
            username = prop.getProperty("username").toString();  
            password = prop.getProperty("password").toString();  
            driver = prop.getProperty("driver").toString();  
        } catch (IOException e) {  
            System.out.println("Unable to find mydb.cfg in " + System.getProperty("user.home") + "\n Please make sure that configuration file created in this folder.");  
            
            host = "Unknown HOST";  
            username = "Unknown USER";  
            password = "Unknown PASSWORD";  
            driver = "Unknown DRIVER";  
        }  

        System.out.println("host: " + host + "\nusername: " + username + "\npassword: " + password + "\ndriver: " + driver);  

        Class.forName(driver);  
        System.out.println("--------------------------");  
        System.out.println("DRIVER: " + driver);  
        System.out.println("Set Login Timeout: " + LoginTimeout);  
        DriverManager.setLoginTimeout(LoginTimeout);  
        Connection connection = DriverManager.getConnection(host, username, password);  
        System.out.println("CONNECTION: " + connection);  

        return connection;  
    }  

    public String runSqlStatement() {  
        String result = "";  
        try {  
            Statement statement = createConnection().createStatement();  
            System.out.println("SQL query: " + createTable);  
            statement.execute(createTable);  
        } catch (IOException | ClassNotFoundException ex) {  
            Logger.getLogger(DbManager.class.getName()).log(Level.SEVERE, null, ex);  
            System.out.println("Exception occurred: " + ex);  
            result = ex.getMessage();  
        } catch (SQLException ex) {  
            ex.printStackTrace();  
            result = ex.getMessage();  
        }  
        return result;  
    }  
}
  1. Deploy แอปพลิเคชันตัวอย่างของเราไปที่เซิร์ฟเวอร์ Tomcat ของคุณ โดยใช้ลิงก์ต่อไปนี้
    https://bit.ly/31LSfUQ



หมายเหตุ : 
– แอปพลิเคชันตัวอย่างของเรามีตัวเชื่อมต่อ jdbc สำหรับการเข้าถึงฐานข้อมูล MariaDB/MySQL เรียบร้อยแล้ว อย่างไรก็ตามเพื่อที่จะเชื่อมต่อโปรเจ็กต์ของคุณ คุณจำเป็นที่จะต้องอัปโหลดไปยังโฟลเดอร์ webapps/{app_context}/WEB-INF/lib บนแอปพลิเคชันเซิฟเวอร์ด้วยตนเอง
– อย่าลืมที่จะทำการรีสตาร์ทแอปพลิเคชันเซิร์ฟเวอร์เพื่อเปลี่ยนการใช้งาน mydb.cfg โดยการกดปุ่ม Restart Node

  1. เมื่อทำการปรับเสร็จเรียบร้อย ให้กด Open in Browser ในหน้าต่างที่เด้งขึ้นมาหรือที่อยู่ถัดจากแอปพลิเคชันเซิร์ฟเวอร์ของคุณ

  1. ในแท็บที่เปิดไว้ ให้กดที่ปุ่ม Create test table in your database

  2. ตอนนี้ เพื่อให้แน่ใจว่าทุกอย่างทำได้เป็นเป็นปกติ ให้กลับไปที่พาเนล phpMyAdmin และไปที่ฐานข้อมูลที่ชื่อว่า test

สิ่งที่ควรรู้
Ruk-Com PaaS ช่วยให้คุณสามารถขยายการทำงานของเซิร์ฟเวอร์ MariaDB/MySQL ได้โดยการปฏิบัติตามคำแนะนำที่เหมาะสมในเอกสารประกอบของเรา

  • ตั้งค่าประเภทการจำลองฐานข้อมูลที่ต้องการด้วยฟีเจอร์ Auto-Clustering ที่ฝังไว้ เพื่อให้ได้ประสิทธิภาพการทำงานของฐานข้อมูลที่เพิ่มขึ้นและป้องกันข้อมูลสูญหาย
  • ปรับ Backups Scheduling เพื่อให้มั่นใจในความปลอดภัย ของข้อมูลที่อยู่ในฐานข้อมูลของคุณในกรณีที่เซิร์ฟเวอร์เกิดการล่มแบบไม่คาดคิด
  • ดูคำแนะนำของ Remote Access  และศึกษาว่าจะสามารถเข้าถึงฐานข้อมูลจากระยะไกลได้อย่างไรผ่าน MySQL client บนเดสก์ท็อป
  • ใช้คู่มือ Dump Files Import/Export  เพื่อค้นหาว่าจะสามารถสำรองข้อมูลด้วยตนเองได้อย่างไรและกู้คืนข้อมูลของคุณจากสิ่งที่ได้สร้างทิ้งไว้ก่อนหน้านี้

ดู Database connection strings เพื่อให้ได้ข้อมูลเพิ่มเติมถึงวิธีการตั้งค่าการเชื่อมต่อไปยังฐานข้อมูลในประเภทที่แตกต่างกัน