Opis aplikacji
Moja autorska aplikacja JavaReadMariadbExample to prosty przykład odczytu z bazy danych MariaDB z aplikacji w języku Java. Bazuje na bazie danych i tabeli przygotowanej wg. wpisu na stronie https://itadmin.vblog.ovh/proxmox-instalacja-i-konfiguracja-mariadb-na-ubuntu-22-04/ dlatego warto wcześniej je przygotować zanim uruchomimy aplikację. Aplikacja wykorzystuje zmienne środowiskowe ustawione w systemie operacyjnym lub zdefiniowane jako parametry dla obrazu Docker bądź w configmapie dla projektu aplikacji w OpenShift.
Kod źródłowy aplikacji
nazwa pliku java musi być dokładnie taka sama jak nazwy klasy public czyli w tym przypadku JavaReadMariadbExample.java
W wybranym katalogu np. /home/dockeruser/java/javareadmariadbexample/ umieszczamy 3 pliki:
- JavaReadMariadbExample.java
- Manifest.txt
- mariadb-java-client-3.1.2.jar
import java.util.*;
import java.net.InetAddress;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.sql.*;
public class JavaReadMariadbExample {
public static void main(String[] args) {
try {
System.out.println("--------------- Application settings ---------------");
// check the environment variables needed for the application
String cf_mariadb_server = System.getenv("CF_MARIADB_SERVER");
if (cf_mariadb_server == null) {
System.err.println("CF_MARIADB_SERVER environment variable is not defined ! Exiting.");
System.exit(0);
} else {
System.out.println("CF_MARIADB_SERVER:" + cf_mariadb_server);
}
// check the environment variables needed for the application
String cf_mariadb_database = System.getenv("CF_MARIADB_DATABASE");
if (cf_mariadb_database == null) {
System.err.println("CF_MARIADB_DATABASE environment variable is not defined ! Exiting.");
System.exit(0);
} else {
System.out.println("CF_MARIADB_DATABASE:" + cf_mariadb_database);
}
// check the environment variables needed for the application
String cf_mariadb_user = System.getenv("CF_MARIADB_USER");
if (cf_mariadb_user == null) {
System.err.println("CF_MARIADB_USER environment variable is not defined ! Exiting.");
System.exit(0);
} else {
System.out.println("CF_MARIADB_USER:" + cf_mariadb_user);
}
// check the environment variables needed for the application
String cf_mariadb_pass = System.getenv("CF_MARIADB_PASS");
if (cf_mariadb_pass == null) {
System.err.println("CF_MARIADB_PASS environment variable is not defined ! Exiting.");
System.exit(0);
} else {
System.out.println("CF_MARIADB_PASS:" + cf_mariadb_pass);
}
// check the environment variables needed for the application
String cf_check_interval = System.getenv("CF_CHECK_INTERVAL");
if (cf_check_interval == null) {
cf_check_interval = "30";
System.err.println("CF_CHECK_INTERVAL environment variable is not defined ! set check_interval for " + cf_check_interval + " seconds");
} else {
System.out.println("CF_CHECK_INTERVAL:" + cf_check_interval);
}
// Register JDBC driver
Class.forName("org.mariadb.jdbc.Driver");
// Database address and credentials
String DB_URL = "jdbc:mariadb://" + cf_mariadb_server + ":3306/" + cf_mariadb_database;
String USER = cf_mariadb_user;
String PASS = cf_mariadb_pass;
// Create SQL query
String sql = "SELECT * FROM clipboard WHERE dba_date >= (NOW() - INTERVAL " + cf_check_interval + " SECOND);";
// Get network settings
String SystemName = InetAddress.getLocalHost().getHostName();
System.out.println("Hostname: " + SystemName);
InetAddress iAddress = InetAddress.getLocalHost();
String currentIp = iAddress.getHostAddress();
System.out.println("Current IP address : " + currentIp);
int counter = 1;
do {
System.out.println("-------------------- " + counter + " -------------------------");
Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);
LocalDateTime now = LocalDateTime.now();
DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formatDateTime = now.format(format);
System.out.println("Current datetime:" + formatDateTime);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
if (rs.next()) {
// Process the result set and display the rows
do {
// Extract column values for each row
int dba_id = rs.getInt("id");
String dba_date = rs.getString("dba_date");
String dba_hostname = rs.getString("hostname");
String dba_description = rs.getString("description");
int dba_rand_number = rs.getInt("rand_number");
int dba_operation_status = rs.getInt("operation_status");
// Display the row data
System.out.println("id:" + dba_id + ", dba_date: " + dba_date + ", hostname: " + dba_hostname + ", description: " + dba_description + ", rand_number: " + dba_rand_number + ", operation_status: " + dba_operation_status);
} while (rs.next());
} else {
System.out.println("No rows returned.");
}
// set a delay in reading from the database
int check_interval = Integer.parseInt(cf_check_interval);
Thread.sleep(check_interval*1000);
// Clean up resources
rs.close();
stmt.close();
conn.close();
counter = counter + 1;
} while (true);
} catch (SQLException se) {
se.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}Manifest-Version: 1.0 Main-Class: JavaReadMariadbExample Class-Path: mariadb-java-client-3.1.2.jar
3-ci plik mariadb-java-client-3.1.2.jar pobieramy np. ze strony https://dbschema.com/drivers/mariadb-jdbc-driver.html
Przygotowanie aplikacji do uruchomienia
Zanim uruchomimy aplikację w konsoli należy ustawić odpowiednie zmienne środowiskowe w systemie Linux.
export CF_MARIADB_DATABASE=docker_dba export CF_MARIADB_SERVER=192.168.30.40 export CF_MARIADB_USER=docker_usr export CF_MARIADB_PASS=Hdbryu3te72, export CF_CHECK_INTERVAL=30
# kompilacja aplikacji cd /home/dockeruser/java/javareadmariadbexample/ javac -cp ./mariadb-java-client-3.1.2.jar JavaReadMariadbExample.java # próbne uruchomienie java -cp ./mariadb-java-client-3.1.2.jar JavaReadMariadbExample.java --------------- Application settings --------------- CF_MARIADB_SERVER:192.168.30.40 CF_MARIADB_DATABASE:docker_dba CF_MARIADB_USER:docker_usr CF_MARIADB_PASS:Hdbryu3te72, CF_CHECK_INTERVAL:15 Hostname: docker.netapps.ovh Current IP address : 127.0.1.1 -------------------- 1 ------------------------- Current datetime:2023-06-29 16:53:18 No rows returned. # CTRL +C przerywamy działanie programu
Przygotowanie aplikacji do dystrybucji
# przygotowanie pakietu dystrybucyjnego czyli jednego pliku jar zawierającego wszystkie potrzebne klasy jar cfmv JavaReadMariadbExampleApp.jar Manifest.txt JavaReadMariadbExample.class # uruchomienie aplikacji z pakietu dystrybucyjnego java -jar JavaReadMariadbExampleApp.jar

