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.
Konfigurasikan parameter untuk Druid. Di jalur
src/main/resourcesproyek Maven Anda, buat filedruid.propertiesdan 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=-1CatatanAtur 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.
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>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>CatatanTentukan versi lindorm-all-client berdasarkan kebutuhan bisnis Anda.
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);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); } } } }