全部产品
Search
文档中心

Lindorm:Tutorial: Gunakan kumpulan koneksi Druid untuk terhubung ke LindormTSDB

更新时间:Jul 02, 2025

Topik ini menjelaskan cara menggunakan kumpulan koneksi Druid untuk terhubung ke LindormTSDB.

Informasi latar belakang

Saat menggunakan Java untuk mengembangkan aplikasi yang menyimpan data di LindormTSDB, disarankan untuk mengonfigurasi aplikasi agar menggunakan driver JDBC untuk terhubung ke LindormTSDB. Dalam hal ini, objek Koneksi dibuat untuk terhubung ke LindormTSDB. Jika objek Koneksi baru dibuat setiap kali terhubung ke LindormTSDB, sejumlah besar sumber daya akan diperlukan. Untuk mengurangi penggunaan sumber daya, Anda dapat menggunakan kumpulan koneksi untuk membuat dan mengelola koneksi.

Prasyarat

  • Java Development Kit (JDK) 1.8 atau lebih baru telah diinstal.

  • Alamat IP klien Anda telah ditambahkan ke daftar putih instance Lindorm. Untuk informasi lebih lanjut, lihat Konfigurasikan Daftar Putih.

Prosedur

Kumpulan koneksi open source Alibaba Druid digunakan dalam topik ini sebagai contoh. Untuk mengunduh Alibaba Druid, kunjungi GitHub.

  1. Konfigurasikan parameter untuk Druid. Di jalur src/main/resources proyek Maven Anda, buat file druid.properties dan tambahkan konfigurasi berikut ke dalam file tersebut:

    # Tentukan nama kelas driver. Anda dapat mempertahankan konfigurasi ini tanpa perubahan.
    driverClassName=com.aliyun.lindorm.table.client.Driver
    # Anda dapat mengganti parameter url, username, dan password dengan nilai aktual dalam bisnis Anda. Anda dapat memperoleh nilai-nilai parameter ini di konsol Lindorm.
    url=jdbc:lindorm:tsdb:url=http://ld-bp12pt80qr38p****-proxy-tsdb-pub.lindorm.rds.aliyuncs.com:8242
    username=root
    password=root
    # Ganti **** dengan database yang ingin Anda hubungkan.
    connectionProperties=database=default
    
    # Inisialisasi kumpulan koneksi untuk membuat koneksi. Kami menyarankan agar Anda mempertahankan konfigurasi ini tanpa perubahan.
    init=true
    # Tentukan jumlah koneksi yang ingin Anda buat selama inisialisasi. Anda dapat mengonfigurasi parameter ini sesuai dengan kebutuhan Anda.
    initialSize=10
    # Tentukan jumlah minimum koneksi idle dalam kumpulan koneksi. Anda dapat mengonfigurasi parameter ini sesuai dengan kebutuhan Anda.
    minIdle=10
    # Tentukan jumlah maksimum koneksi idle dalam kumpulan koneksi. Anda dapat mengonfigurasi parameter ini sesuai dengan kebutuhan Anda.
    maxActive=20
    # Tentukan waktu maksimum klien dapat menunggu untuk mendapatkan koneksi. Unit: ms. Kami menyarankan agar Anda mempertahankan konfigurasi ini tanpa perubahan.
    maxWait=30000
    
    # Konfigurasikan parameter terkait keep-alive koneksi. Kami menyarankan agar Anda mempertahankan konfigurasi ini tanpa perubahan. Jika tidak, koneksi mungkin terputus secara tak terduga.
    # Dalam hal ini, pengecualian ConnectionDisconnectedException dilaporkan.
    druid.keepAlive=true
    druid.keepAliveBetweenTimeMillis=30000
    minEvictableIdleTimeMillis=600000
    maxEvictableIdleTimeMillis=900000
    timeBetweenEvictionRunsMillis=5000
    
    # Konfigurasikan parameter yang diperlukan untuk memverifikasi koneksi. Kami menyarankan agar Anda mempertahankan konfigurasi ini tanpa perubahan.
    validationQuery=SELECT 1
    testWhileIdle=true
    testOnBorrow=false
    testOnReturn=false
    
    # Konfigurasikan parameter terkait cache. Dalam contoh ini, cache dinonaktifkan. Kami menyarankan agar Anda mempertahankan konfigurasi ini tanpa perubahan.
    # Jika tidak, pengecualian NoSuchStatement mungkin dilaporkan.
    poolPreparedStatements=false
    maxOpenPreparedStatements=-1
    druid.maxPoolPreparedStatementPerConnectionSize=-1
    Catatan
    • Atur parameter url ke URL JDBC yang digunakan untuk terhubung ke LindormTSDB. Untuk informasi tentang parameter dalam URL, lihat URL Driver JDBC.

    • Nilai default dari parameter user dan password adalah root.

  2. Tambahkan dependensi Alibaba Druid ke proyek Maven. Mulai klien, buat proyek Maven, dan tambahkan dependensi berikut ke file pom.xml: Kode berikut memberikan contoh cara memanggil operasi API Java untuk LindormTable SQL untuk mengakses tabel lebar Lindorm:

    <dependency>
          <groupId>com.alibaba</groupId>
          <artifactId>druid</artifactId>
          <version>1.2.6</version>
        </dependency>
  3. Anda dapat menggunakan salah satu metode berikut untuk menginstal driver JDBC untuk Lindorm:

    • Instal driver JDBC secara manual

      Unduh paket JAR Lindorm-all-client ke klien Anda dan instal driver JDBC. Anda dapat memilih versi driver JDBC yang ingin diinstal. Misalnya, jika Anda ingin menginstal driver JDBC 2.1.5, unduh paket lindorm-all-client-2.1.5.jar.

    • Gunakan Maven untuk mengunduh driver JDBC

      Untuk mengintegrasikan driver JDBC ke dalam proyek Maven, buat proyek Maven dan tambahkan dependensi berikut ke file pom.xml:

      <dependency>
          <groupId>com.aliyun.lindorm</groupId>  
          <artifactId>lindorm-all-client</artifactId>
          <version>2.2.1.3</version>
      </dependency>
      Catatan

      Tentukan versi lindorm-all-client berdasarkan kebutuhan bisnis Anda.

  4. Muat konfigurasi parameter Druid dan inisialisasi kumpulan koneksi.

    // Muat konfigurasi parameter.
    Properties properties = new Properties();
    InputStream inputStream = tsdb.class.getClassLoader().getResourceAsStream("druid.properties");
    properties.load(inputStream);
    // Inisialisasi kumpulan koneksi.
    DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
  5. Gunakan Druid untuk mendapatkan informasi koneksi dari JDBC dan terhubung ke LindormTSDB.

    // Buat tabel.
    try (Connection connection = dataSource.getConnection()) {
      try (Statement statement = connection.createStatement()) {
          String sql = "CREATE TABLE sensor (device_id VARCHAR TAG,region VARCHAR TAG,time TIMESTAMP,temperature DOUBLE,humidity DOUBLE,PRIMARY KEY(device_id))";
          int ret = statement.executeUpdate(sql);
          System.out.println(ret);
       }
    }
    // Masukkan data ke tabel.
    try (Connection connection = dataSource.getConnection()) {
      try (Statement stmt = connection.createStatement()) {
         stmt.addBatch("INSERT INTO sensor(device_id, region, time, temperature, humidity) values('F07A1260','north-cn','2021-04-22 15:33:00',12.1,45)");
         stmt.addBatch("INSERT INTO sensor(device_id, region, time, temperature, humidity) values('F07A1260','north-cn','2021-04-22 15:33:10',13.2,47)");
         stmt.addBatch("INSERT INTO sensor(device_id, region, time, temperature, humidity) values('F07A1260','north-cn','2021-04-22 15:33:20',10.6,46)");
         stmt.addBatch("INSERT INTO sensor(device_id, region, time, temperature, humidity) values('F07A1261','south-cn','2021-04-22 15:33:00',18.1,44)");
         stmt.addBatch("INSERT INTO sensor(device_id, region, time, temperature, humidity) values('F07A1261','south-cn','2021-04-22 15:33:10',19.7,44)");
         stmt.executeBatch();
      }
    }
    // Query data dalam tabel.
    // Query data dengan menentukan parameter.
    // Query data. Kami menyarankan agar Anda tentukan rentang waktu untuk mengurangi jumlah data yang dipindai.
    try (Connection connection = dataSource.getConnection()) {
        try (PreparedStatement pstmt = connection.prepareStatement("SELECT device_id, region,time,temperature,humidity FROM sensor WHERE time >= ?  and time <= ?")) {
            Timestamp startTime = Timestamp.valueOf("2021-04-22 15:33:00");
            Timestamp endTime = Timestamp.valueOf("2021-04-22 15:33:20");
            pstmt.setTimestamp(1, startTime);
            pstmt.setTimestamp(2, endTime);
    
        try (ResultSet rs = pstmt.executeQuery()) {
            while (rs.next()) {
                String device_id = rs.getString("device_id");
                String region = rs.getString("region");
                Timestamp time = rs.getTimestamp("time");
                Double temperature = rs.getDouble("temperature");
                Double humidity = rs.getDouble("humidity");
                System.out.printf("%s %s %s %f %f\n", device_id, region, time, temperature, humidity);
             }
        }
      }
    }

Kode contoh

Klik di sini untuk melihat contoh lengkap

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;

public class tsdb{
    public static void main(String[] args) throws Exception {
        // Muat konfigurasi parameter.
        Properties properties = new Properties();
        InputStream inputStream = tsdb.class.getClassLoader().getResourceAsStream("druid.properties");
        properties.load(inputStream);
        // Inisialisasi kumpulan koneksi.
        DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);


        // Buat tabel.
        try (Connection connection = dataSource.getConnection()) {
            try (Statement statement = connection.createStatement()) {
                String sql = "CREATE TABLE sensor (device_id VARCHAR TAG,region VARCHAR TAG,time TIMESTAMP,temperature DOUBLE,humidity DOUBLE,PRIMARY KEY(device_id))";
                int ret = statement.executeUpdate(sql);
                System.out.println(ret);
            }
        }

        // Masukkan data ke tabel.
        try (Connection connection = dataSource.getConnection()) {
            try (Statement stmt = connection.createStatement()) {
                stmt.addBatch("INSERT INTO sensor(device_id, region, time, temperature, humidity) values('F07A1260','north-cn','2021-04-22 15:33:00',12.1,45)");
                stmt.addBatch("INSERT INTO sensor(device_id, region, time, temperature, humidity) values('F07A1260','north-cn','2021-04-22 15:33:10',13.2,47)");
                stmt.addBatch("INSERT INTO sensor(device_id, region, time, temperature, humidity) values('F07A1260','north-cn','2021-04-22 15:33:20',10.6,46)");
                stmt.addBatch("INSERT INTO sensor(device_id, region, time, temperature, humidity) values('F07A1261','south-cn','2021-04-22 15:33:00',18.1,44)");
                stmt.addBatch("INSERT INTO sensor(device_id, region, time, temperature, humidity) values('F07A1261','south-cn','2021-04-22 15:33:10',19.7,44)");
                stmt.executeBatch();
            }
        }

        // Query data dalam tabel.
        // Query data dengan menentukan parameter.
        // Query data. Kami menyarankan agar Anda tentukan rentang waktu untuk mengurangi jumlah data yang dipindai.
        try (Connection connection = dataSource.getConnection()) {
            try (PreparedStatement pstmt = connection.prepareStatement("SELECT device_id, region,time,temperature,humidity FROM sensor WHERE time >= ?  and time <= ?")) {
                Timestamp startTime = Timestamp.valueOf("2021-04-22 15:33:00");
                Timestamp endTime = Timestamp.valueOf("2021-04-22 15:33:20");
                pstmt.setTimestamp(1, startTime);
                pstmt.setTimestamp(2, endTime);


                //pstmt.setString(1, "2021-04-22 15:33:00");
               // pstmt.setString(2, "2021-04-22 15:33:20");
                try (ResultSet rs = pstmt.executeQuery()) {
                    while (rs.next()) {
                        String device_id = rs.getString("device_id");
                        String region = rs.getString("region");
                        Timestamp time = rs.getTimestamp("time");
                        Double temperature = rs.getDouble("temperature");
                        Double humidity = rs.getDouble("humidity");
                        System.out.printf("%s %s %s %f %f\n", device_id, region, time, temperature, humidity);
                    }
                }
            }
        }
    }
}

Jika respons contoh berikut dikembalikan, eksekusi berhasil:

0
F07A1260 north-cn 2021-04-22 15:33:00.0 12.100000 45.000000
F07A1260 north-cn 2021-04-22 15:33:10.0 13.200000 47.000000
F07A1260 north-cn 2021-04-22 15:33:20.0 10.600000 46.000000
F07A1261 south-cn 2021-04-22 15:33:00.0 18.100000 44.000000
F07A1261 south-cn 2021-04-22 15:33:10.0 19.700000 44.000000