Tablestore Java SDK mendukung operasi untuk model wide column, timeseries, dan message, serta menyediakan kemampuan penyimpanan dan manajemen data yang komprehensif bagi pengembang Java.
Integrasi cepat
Ikuti langkah-langkah berikut untuk mengintegrasikan Tablestore Java SDK secara cepat, mulai dari menyiapkan lingkungan hingga memverifikasi koneksi client.
Persiapkan lingkungan
Unduh dan instal Java runtime environment (Java 6 atau versi yang lebih baru). Anda dapat menjalankan perintah java -version untuk memeriksa versi Java Anda.
Instal SDK
Pilih metode instalasi sesuai dengan lingkungan pengembangan Anda. Disarankan menggunakan versi SDK terbaru agar contoh kode berjalan dengan benar.
Tambahkan dependensi Maven (Direkomendasikan)
Untuk menggunakan Tablestore Java SDK dalam proyek Maven, tambahkan dependensi berikut ke file pom.xml Anda.
<dependency>
<groupId>com.aliyun.openservices</groupId>
<artifactId>tablestore</artifactId>
<version>5.17.7</version>
</dependency>Impor paket JAR ke proyek Eclipse
Untuk proyek yang tidak menggunakan Maven, Anda dapat mengintegrasikan SDK dengan mengimpor paket JAR secara manual.
Unduh paket Java SDK.
Ekstrak paket tersebut.
Di Eclipse, klik kanan proyek Anda lalu pilih .
Buka folder paket yang telah diekstrak pada Langkah 2. Pilih file
tablestore-5.17.7.jardan semua file JAR di folderlib. Klik Open untuk mengimpor paket JAR tersebut.Konfirmasi bahwa semua paket JAR telah diimpor di bawah
Libraries. Klik Apply and Close untuk menerapkan konfigurasi proyek.CatatanJika Anda menggunakan Java SE 9 atau versi yang lebih baru, impor paket JAR ke
Modulepathdi bawahLibraries.
Konfigurasikan kredensial akses
Anda dapat membuat AccessKey untuk akun Alibaba Cloud atau pengguna RAM Anda. Konfigurasikan AccessKey tersebut dalam variabel lingkungan seperti yang ditunjukkan di bawah ini. Pendekatan ini meningkatkan keamanan karena mencegah penyematan informasi sensitif langsung dalam kode.
Setelah konfigurasi selesai, restart atau refresh lingkungan pengembangan Anda—termasuk IDE, antarmuka command-line, aplikasi desktop lainnya, serta layanan latar belakang—agar variabel lingkungan sistem terbaru dimuat. Untuk informasi lebih lanjut tentang jenis kredensial akses lainnya, lihat Konfigurasikan kredensial akses.
Linux
Jalankan perintah berikut untuk menambahkan pengaturan variabel lingkungan ke file
~/.bashrc.echo "export TABLESTORE_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bashrc echo "export TABLESTORE_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bashrcJalankan perintah berikut untuk menerapkan perubahan.
source ~/.bashrcJalankan perintah berikut untuk memverifikasi bahwa variabel lingkungan telah aktif.
echo $TABLESTORE_ACCESS_KEY_ID echo $TABLESTORE_ACCESS_KEY_SECRET
macOS
Jalankan perintah berikut di terminal untuk melihat jenis shell default Anda.
echo $SHELLLakukan langkah-langkah berikut berdasarkan jenis shell default Anda.
Zsh
Jalankan perintah berikut untuk menambahkan pengaturan variabel lingkungan ke file
~/.zshrc.echo "export TABLESTORE_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.zshrc echo "export TABLESTORE_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.zshrcJalankan perintah berikut untuk menerapkan perubahan.
source ~/.zshrcJalankan perintah berikut untuk memverifikasi bahwa variabel lingkungan telah aktif.
echo $TABLESTORE_ACCESS_KEY_ID echo $TABLESTORE_ACCESS_KEY_SECRET
Bash
Jalankan perintah berikut untuk menambahkan pengaturan variabel lingkungan ke file
~/.bash_profile.echo "export TABLESTORE_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bash_profile echo "export TABLESTORE_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bash_profileJalankan perintah berikut untuk menerapkan perubahan.
source ~/.bash_profileJalankan perintah berikut untuk memverifikasi bahwa variabel lingkungan telah aktif.
echo $TABLESTORE_ACCESS_KEY_ID echo $TABLESTORE_ACCESS_KEY_SECRET
Windows
CMD
Jalankan perintah berikut di Command Prompt (CMD) untuk mengatur variabel lingkungan.
setx TABLESTORE_ACCESS_KEY_ID "YOUR_ACCESS_KEY_ID" setx TABLESTORE_ACCESS_KEY_SECRET "YOUR_ACCESS_KEY_SECRET"Restart CMD lalu jalankan perintah berikut untuk memverifikasi bahwa variabel lingkungan telah aktif.
echo %TABLESTORE_ACCESS_KEY_ID% echo %TABLESTORE_ACCESS_KEY_SECRET%
PowerShell
Jalankan perintah berikut di PowerShell.
[Environment]::SetEnvironmentVariable("TABLESTORE_ACCESS_KEY_ID", "YOUR_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User) [Environment]::SetEnvironmentVariable("TABLESTORE_ACCESS_KEY_SECRET", "YOUR_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)Jalankan perintah berikut untuk memverifikasi bahwa variabel lingkungan telah aktif.
[Environment]::GetEnvironmentVariable("TABLESTORE_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User) [Environment]::GetEnvironmentVariable("TABLESTORE_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)
Inisialisasi client
Contoh berikut menunjukkan cara menginisialisasi client sinkron menggunakan signature V4. Anda dapat memverifikasi koneksi dengan menampilkan daftar tabel data dalam instans Tablestore.
Client bersifat thread-safe dan secara otomatis mengelola kolam thread internal serta sumber daya koneksi. Di lingkungan multi-threaded, gunakan satu instance client secara bersama. Hindari membuat objek client baru untuk setiap thread atau permintaan.
Secara default, akses jaringan publik dinonaktifkan untuk instans baru. Untuk mengakses sumber daya dalam suatu instans melalui Internet, aktifkan akses jaringan publik di halaman Network Management untuk instans tersebut.
Wide column model
import com.alicloud.openservices.tablestore.SyncClient;
import com.alicloud.openservices.tablestore.core.ResourceManager;
import com.alicloud.openservices.tablestore.core.auth.CredentialsProvider;
import com.alicloud.openservices.tablestore.core.auth.DefaultCredentialProvider;
import com.alicloud.openservices.tablestore.core.auth.DefaultCredentials;
import com.alicloud.openservices.tablestore.core.auth.V4Credentials;
import com.alicloud.openservices.tablestore.model.ListTableResponse;
public class SyncClientV4 {
public static void main(String[] args) {
// Dapatkan kredensial akses dari variabel lingkungan. Anda harus mengonfigurasi TABLESTORE_ACCESS_KEY_ID dan TABLESTORE_ACCESS_KEY_SECRET.
final String accessKeyId = System.getenv("TABLESTORE_ACCESS_KEY_ID");
final String accessKeySecret = System.getenv("TABLESTORE_ACCESS_KEY_SECRET");
// TODO: Ubah konfigurasi berikut sesuai dengan informasi instans Anda.
final String region = "cn-hangzhou"; // Tentukan ID wilayah instans, misalnya "cn-hangzhou".
final String instanceName = "n01k********"; // Tentukan nama instans.
final String endpoint = "https://n01k********.cn-hangzhou.ots.aliyuncs.com"; // Tentukan endpoint instans.
SyncClient client = null;
try {
// Bangun kredensial.
DefaultCredentials credentials = new DefaultCredentials(accessKeyId, accessKeySecret);
V4Credentials credentialsV4 = V4Credentials.createByServiceCredentials(credentials, region);
CredentialsProvider provider = new DefaultCredentialProvider(credentialsV4);
// Buat instance client.
client = new SyncClient(endpoint, provider, instanceName, null, new ResourceManager(null, null));
// Tampilkan semua tabel data.
ListTableResponse listTableResponse = client.listTable();
// Cetak daftar tabel data.
System.out.println("Ditemukan " + listTableResponse.getTableNames().size() + " tabel data dalam instans '" + instanceName + "':");
listTableResponse.getTableNames().forEach(System.out::println);
} catch (Exception e) {
System.err.println("Gagal menampilkan tabel data. Detail:");
e.printStackTrace();
} finally {
// Matikan client.
if (client != null) {
client.shutdown();
}
}
}
}Timeseries model
import com.alicloud.openservices.tablestore.TimeseriesClient;
import com.alicloud.openservices.tablestore.core.ResourceManager;
import com.alicloud.openservices.tablestore.core.auth.CredentialsProvider;
import com.alicloud.openservices.tablestore.core.auth.DefaultCredentialProvider;
import com.alicloud.openservices.tablestore.core.auth.DefaultCredentials;
import com.alicloud.openservices.tablestore.core.auth.V4Credentials;
import com.alicloud.openservices.tablestore.model.timeseries.ListTimeseriesTableResponse;
public class TimeseriesSyncClientV4 {
public static void main(String[] args) {
// Dapatkan kredensial akses dari variabel lingkungan. Anda harus mengonfigurasi TABLESTORE_ACCESS_KEY_ID dan TABLESTORE_ACCESS_KEY_SECRET.
final String accessKeyId = System.getenv("TABLESTORE_ACCESS_KEY_ID");
final String accessKeySecret = System.getenv("TABLESTORE_ACCESS_KEY_SECRET");
// TODO: Ubah konfigurasi berikut sesuai dengan informasi instans Anda.
final String region = "cn-hangzhou"; // Tentukan ID wilayah instans, misalnya "cn-hangzhou".
final String instanceName = "n01k********"; // Tentukan nama instans.
final String endpoint = "https://n01k********.cn-hangzhou.ots.aliyuncs.com"; // Tentukan endpoint instans.
TimeseriesClient client = null;
try {
// Bangun kredensial signature V4.
DefaultCredentials credentials = new DefaultCredentials(accessKeyId, accessKeySecret);
V4Credentials credentialsV4 = V4Credentials.createByServiceCredentials(credentials, region);
CredentialsProvider provider = new DefaultCredentialProvider(credentialsV4);
// Buat instance client timeseries.
client = new TimeseriesClient(endpoint, provider, instanceName, null, new ResourceManager(null, null));
// Tampilkan semua tabel timeseries.
ListTimeseriesTableResponse listTimeseriesTableResponse = client.listTimeseriesTable();
// Cetak daftar tabel timeseries.
System.out.println("Ditemukan " + listTimeseriesTableResponse.getTimeseriesTableNames().size() + " tabel timeseries dalam instans '" + instanceName + "':");
listTimeseriesTableResponse.getTimeseriesTableNames().forEach(System.out::println);
} catch (Exception e) {
System.err.println("Gagal menampilkan tabel timeseries. Detail:");
e.printStackTrace();
} finally {
// Matikan client.
if (client != null) {
client.shutdown();
}
}
}
}
Konfigurasi client
Tablestore Java SDK mendukung client sinkron dan asinkron. Pilih jenis client yang sesuai dengan skenario aplikasi Anda. Client asinkron menyediakan kemampuan pemrosesan konkuren yang lebih baik dan cocok untuk skenario throughput tinggi.
Client asinkron
Client asinkron menggunakan mekanisme callback untuk memproses hasil permintaan, sehingga menghindari pemblokiran thread dan meningkatkan kemampuan pemrosesan konkuren aplikasi Anda.
Wide column model
import com.alicloud.openservices.tablestore.AsyncClient;
import com.alicloud.openservices.tablestore.TableStoreCallback;
import com.alicloud.openservices.tablestore.core.ResourceManager;
import com.alicloud.openservices.tablestore.core.auth.CredentialsProvider;
import com.alicloud.openservices.tablestore.core.auth.DefaultCredentialProvider;
import com.alicloud.openservices.tablestore.core.auth.DefaultCredentials;
import com.alicloud.openservices.tablestore.core.auth.V4Credentials;
import com.alicloud.openservices.tablestore.model.ListTableRequest;
import com.alicloud.openservices.tablestore.model.ListTableResponse;
import java.util.concurrent.*;
public class AsyncClientV4 {
public static void main(String[] args) {
// Dapatkan kredensial akses dari variabel lingkungan. Anda harus mengonfigurasi TABLESTORE_ACCESS_KEY_ID dan TABLESTORE_ACCESS_KEY_SECRET.
final String accessKeyId = System.getenv("TABLESTORE_ACCESS_KEY_ID");
final String accessKeySecret = System.getenv("TABLESTORE_ACCESS_KEY_SECRET");
// TODO: Ubah konfigurasi berikut sesuai dengan informasi instans Anda.
final String region = "cn-hangzhou"; // Tentukan ID wilayah instans, misalnya "cn-hangzhou".
final String instanceName = "n01k********"; // Tentukan nama instans.
final String endpoint = "https://n01k********.cn-hangzhou.ots.aliyuncs.com"; // Tentukan endpoint instans.
AsyncClient client = null;
try {
// Bangun kredensial signature V4.
DefaultCredentials credentials = new DefaultCredentials(accessKeyId, accessKeySecret);
V4Credentials credentialsV4 = V4Credentials.createByServiceCredentials(credentials, region);
CredentialsProvider provider = new DefaultCredentialProvider(credentialsV4);
// Buat instance client asinkron.
client = new AsyncClient(endpoint, provider, instanceName, null, new ResourceManager(null, null));
// Gunakan CompletableFuture untuk pemrosesan asinkron.
CompletableFuture<ListTableResponse> future = new CompletableFuture<>();
// Proses hasil asinkron dalam callback.
client.listTable(new TableStoreCallback<ListTableRequest, ListTableResponse>() {
@Override
public void onCompleted(ListTableRequest req, ListTableResponse res) {
System.out.println("Permintaan asinkron berhasil diselesaikan.");
future.complete(res); // Selesaikan Future ketika operasi asinkron berhasil.
}
@Override
public void onFailed(ListTableRequest req, Exception ex) {
System.err.println("Permintaan asinkron gagal.");
future.completeExceptionally(ex); // Selesaikan Future dengan exception ketika operasi asinkron gagal.
}
});
System.out.println("Permintaan asinkron listTable dikirim. Menunggu hasil...");
// Blokir dan tunggu hasil, serta tetapkan timeout.
// Dalam aplikasi nyata, Anda dapat melanjutkan mengeksekusi tugas non-blocking lainnya atau meneruskan future ke proses lain.
ListTableResponse response = future.get(5, TimeUnit.SECONDS);
// Proses hasil sukses di thread utama.
System.out.println("Ditemukan " + response.getTableNames().size() + " tabel data dalam instans '" + instanceName + "':");
response.getTableNames().forEach(System.out::println);
} catch (Exception e) {
System.err.println("Gagal menampilkan tabel data. Detail:");
e.printStackTrace();
} finally {
// Matikan client.
if (client != null) {
client.shutdown();
}
}
}
}
Timeseries model
import com.alicloud.openservices.tablestore.AsyncTimeseriesClient;
import com.alicloud.openservices.tablestore.TableStoreCallback;
import com.alicloud.openservices.tablestore.core.ResourceManager;
import com.alicloud.openservices.tablestore.core.auth.CredentialsProvider;
import com.alicloud.openservices.tablestore.core.auth.DefaultCredentialProvider;
import com.alicloud.openservices.tablestore.core.auth.DefaultCredentials;
import com.alicloud.openservices.tablestore.core.auth.V4Credentials;
import com.alicloud.openservices.tablestore.model.timeseries.ListTimeseriesTableRequest;
import com.alicloud.openservices.tablestore.model.timeseries.ListTimeseriesTableResponse;
import java.util.concurrent.*;
public class TimeseriesAsyncClientV4 {
public static void main(String[] args) {
// Dapatkan kredensial akses dari variabel lingkungan. Anda harus mengonfigurasi TABLESTORE_ACCESS_KEY_ID dan TABLESTORE_ACCESS_KEY_SECRET.
final String accessKeyId = System.getenv("TABLESTORE_ACCESS_KEY_ID");
final String accessKeySecret = System.getenv("TABLESTORE_ACCESS_KEY_SECRET");
// TODO: Ubah konfigurasi berikut sesuai dengan informasi instans Anda.
final String region = "cn-hangzhou"; // Tentukan ID wilayah instans, misalnya "cn-hangzhou".
final String instanceName = "n01k********"; // Tentukan nama instans.
final String endpoint = "https://n01k********.cn-hangzhou.ots.aliyuncs.com"; // Tentukan endpoint instans.
AsyncTimeseriesClient client = null;
try {
// Bangun kredensial signature V4.
DefaultCredentials credentials = new DefaultCredentials(accessKeyId, accessKeySecret);
V4Credentials credentialsV4 = V4Credentials.createByServiceCredentials(credentials, region);
CredentialsProvider provider = new DefaultCredentialProvider(credentialsV4);
// Buat instance client timeseries asinkron.
client = new AsyncTimeseriesClient(endpoint, provider, instanceName, null, new ResourceManager(null, null));
// Gunakan CompletableFuture untuk pemrosesan asinkron.
CompletableFuture<ListTimeseriesTableResponse> future = new CompletableFuture<>();
// Proses hasil asinkron dalam callback.
client.listTimeseriesTable(new TableStoreCallback<ListTimeseriesTableRequest, ListTimeseriesTableResponse>() {
@Override
public void onCompleted(ListTimeseriesTableRequest req, ListTimeseriesTableResponse res) {
System.out.println("Permintaan asinkron berhasil diselesaikan.");
future.complete(res); // Selesaikan Future ketika operasi asinkron berhasil.
}
@Override
public void onFailed(ListTimeseriesTableRequest req, Exception ex) {
System.err.println("Permintaan asinkron gagal.");
future.completeExceptionally(ex); // Selesaikan Future dengan exception ketika operasi asinkron gagal.
}
});
System.out.println("Permintaan asinkron listTimeseriesTable dikirim. Menunggu hasil...");
// Blokir dan tunggu hasil, serta tetapkan timeout.
// Dalam aplikasi nyata, Anda dapat melanjutkan mengeksekusi tugas non-blocking lainnya atau meneruskan future ke proses lain.
ListTimeseriesTableResponse response = future.get(5, TimeUnit.SECONDS);
// Proses hasil sukses di thread utama.
if (response.getTimeseriesTableNames() != null) {
System.out.println("Ditemukan " + response.getTimeseriesTableNames().size() + " tabel timeseries dalam instans '" + instanceName + "':");
response.getTimeseriesTableNames().forEach(System.out::println);
}
} catch (Exception e) {
System.err.println("Gagal menampilkan tabel timeseries. Detail:");
e.printStackTrace();
} finally {
// Matikan client.
if (client != null) {
client.shutdown();
}
}
}
}
Versi Signature
Tablestore Java SDK telah mendukung signature V4 sejak versi 5.16.1. Signature V4 menggunakan algoritma enkripsi dan mekanisme penandatanganan yang lebih kuat untuk meningkatkan keamanan. Disarankan untuk melakukan upgrade SDK dan menggunakan signature V4. Kode berikut menunjukkan cara menginisialisasi client menggunakan signature V2.
Wide column model
Sinkron
import com.alicloud.openservices.tablestore.SyncClient;
import com.alicloud.openservices.tablestore.core.ResourceManager;
import com.alicloud.openservices.tablestore.core.auth.CredentialsProvider;
import com.alicloud.openservices.tablestore.core.auth.DefaultCredentialProvider;
import com.alicloud.openservices.tablestore.core.auth.DefaultCredentials;
import com.alicloud.openservices.tablestore.model.ListTableResponse;
public class SyncClientV2 {
public static void main(String[] args) {
// Dapatkan kredensial akses dari variabel lingkungan. Anda harus mengonfigurasi TABLESTORE_ACCESS_KEY_ID dan TABLESTORE_ACCESS_KEY_SECRET.
final String accessKeyId = System.getenv("TABLESTORE_ACCESS_KEY_ID");
final String accessKeySecret = System.getenv("TABLESTORE_ACCESS_KEY_SECRET");
// TODO: Ubah konfigurasi berikut sesuai dengan informasi instans Anda.
final String instanceName = "n01k********"; // Tentukan nama instans.
final String endpoint = "https://n01k********.cn-hangzhou.ots.aliyuncs.com"; // Tentukan endpoint instans.
SyncClient client = null;
try {
// Bangun kredensial signature V2.
DefaultCredentials credentials = new DefaultCredentials(accessKeyId, accessKeySecret);
CredentialsProvider provider = new DefaultCredentialProvider(credentials);
// Buat instance client.
client = new SyncClient(endpoint, provider, instanceName, null, new ResourceManager(null, null));
// Tampilkan semua tabel data.
ListTableResponse listTableResponse = client.listTable();
// Cetak daftar tabel data.
System.out.println("Ditemukan " + listTableResponse.getTableNames().size() + " tabel data dalam instans '" + instanceName + "':");
listTableResponse.getTableNames().forEach(System.out::println);
} catch (Exception e) {
System.err.println("Gagal menampilkan tabel data. Detail:");
e.printStackTrace();
} finally {
// Matikan client.
if (client != null) {
client.shutdown();
}
}
}
}
Asinkron
import com.alicloud.openservices.tablestore.AsyncClient;
import com.alicloud.openservices.tablestore.TableStoreCallback;
import com.alicloud.openservices.tablestore.core.ResourceManager;
import com.alicloud.openservices.tablestore.core.auth.CredentialsProvider;
import com.alicloud.openservices.tablestore.core.auth.DefaultCredentialProvider;
import com.alicloud.openservices.tablestore.core.auth.DefaultCredentials;
import com.alicloud.openservices.tablestore.model.ListTableRequest;
import com.alicloud.openservices.tablestore.model.ListTableResponse;
import java.util.concurrent.*;
public class AsyncClientV2 {
public static void main(String[] args) {
// Dapatkan kredensial akses dari variabel lingkungan. Anda harus mengonfigurasi TABLESTORE_ACCESS_KEY_ID dan TABLESTORE_ACCESS_KEY_SECRET.
final String accessKeyId = System.getenv("TABLESTORE_ACCESS_KEY_ID");
final String accessKeySecret = System.getenv("TABLESTORE_ACCESS_KEY_SECRET");
// TODO: Ubah konfigurasi berikut sesuai dengan informasi instans Anda.
final String instanceName = "n01k********"; // Tentukan nama instans.
final String endpoint = "https://n01k********.cn-hangzhou.ots.aliyuncs.com"; // Tentukan endpoint instans.
AsyncClient client = null;
try {
// Bangun kredensial signature V2.
DefaultCredentials credentials = new DefaultCredentials(accessKeyId, accessKeySecret);
CredentialsProvider provider = new DefaultCredentialProvider(credentials);
// Buat instance client asinkron.
client = new AsyncClient(endpoint, provider, instanceName, null, new ResourceManager(null, null));
// Gunakan CompletableFuture untuk pemrosesan asinkron.
CompletableFuture<ListTableResponse> future = new CompletableFuture<>();
// Proses hasil asinkron dalam callback.
client.listTable(new TableStoreCallback<ListTableRequest, ListTableResponse>() {
@Override
public void onCompleted(ListTableRequest req, ListTableResponse res) {
System.out.println("Permintaan asinkron berhasil diselesaikan.");
future.complete(res); // Selesaikan Future ketika operasi asinkron berhasil.
}
@Override
public void onFailed(ListTableRequest req, Exception ex) {
System.err.println("Permintaan asinkron gagal.");
future.completeExceptionally(ex); // Selesaikan Future dengan exception ketika operasi asinkron gagal.
}
});
System.out.println("Permintaan asinkron listTable dikirim. Menunggu hasil...");
// Blokir dan tunggu hasil, serta tetapkan timeout.
// Dalam aplikasi nyata, Anda dapat melanjutkan mengeksekusi tugas non-blocking lainnya atau meneruskan future ke proses lain.
ListTableResponse response = future.get(5, TimeUnit.SECONDS);
// Proses hasil sukses di thread utama.
System.out.println("Ditemukan " + response.getTableNames().size() + " tabel data dalam instans '" + instanceName + "':");
response.getTableNames().forEach(System.out::println);
} catch (Exception e) {
System.err.println("Gagal menampilkan tabel data. Detail:");
e.printStackTrace();
} finally {
// Matikan client.
if (client != null) {
client.shutdown();
}
}
}
}
Timeseries model
Sinkron
import com.alicloud.openservices.tablestore.TimeseriesClient;
import com.alicloud.openservices.tablestore.core.ResourceManager;
import com.alicloud.openservices.tablestore.core.auth.CredentialsProvider;
import com.alicloud.openservices.tablestore.core.auth.DefaultCredentialProvider;
import com.alicloud.openservices.tablestore.core.auth.DefaultCredentials;
import com.alicloud.openservices.tablestore.model.timeseries.ListTimeseriesTableResponse;
public class TimeseriesSyncClientV2 {
public static void main(String[] args) {
// Dapatkan kredensial akses dari variabel lingkungan. Anda harus mengonfigurasi TABLESTORE_ACCESS_KEY_ID dan TABLESTORE_ACCESS_KEY_SECRET.
final String accessKeyId = System.getenv("TABLESTORE_ACCESS_KEY_ID");
final String accessKeySecret = System.getenv("TABLESTORE_ACCESS_KEY_SECRET");
// TODO: Ubah konfigurasi berikut sesuai dengan informasi instans Anda.
final String instanceName = "n01k********"; // Tentukan nama instans.
final String endpoint = "https://n01k********.cn-hangzhou.ots.aliyuncs.com"; // Tentukan endpoint instans.
TimeseriesClient client = null;
try {
// Bangun kredensial signature V2.
DefaultCredentials credentials = new DefaultCredentials(accessKeyId, accessKeySecret);
CredentialsProvider provider = new DefaultCredentialProvider(credentials);
// Buat instance client timeseries.
client = new TimeseriesClient(endpoint, provider, instanceName, null, new ResourceManager(null, null));
// Tampilkan semua tabel timeseries.
ListTimeseriesTableResponse listTimeseriesTableResponse = client.listTimeseriesTable();
// Cetak daftar tabel timeseries.
System.out.println("Ditemukan " + listTimeseriesTableResponse.getTimeseriesTableNames().size() + " tabel timeseries dalam instans '" + instanceName + "':");
listTimeseriesTableResponse.getTimeseriesTableNames().forEach(System.out::println);
} catch (Exception e) {
System.err.println("Gagal menampilkan tabel timeseries. Detail:");
e.printStackTrace();
} finally {
// Matikan client.
if (client != null) {
client.shutdown();
}
}
}
}
Asinkron
import com.alicloud.openservices.tablestore.AsyncTimeseriesClient;
import com.alicloud.openservices.tablestore.TableStoreCallback;
import com.alicloud.openservices.tablestore.core.ResourceManager;
import com.alicloud.openservices.tablestore.core.auth.CredentialsProvider;
import com.alicloud.openservices.tablestore.core.auth.DefaultCredentialProvider;
import com.alicloud.openservices.tablestore.core.auth.DefaultCredentials;
import com.alicloud.openservices.tablestore.model.timeseries.ListTimeseriesTableRequest;
import com.alicloud.openservices.tablestore.model.timeseries.ListTimeseriesTableResponse;
import java.util.concurrent.*;
public class TimeseriesAsyncClientV2 {
public static void main(String[] args) {
// Dapatkan kredensial akses dari variabel lingkungan. Anda harus mengonfigurasi TABLESTORE_ACCESS_KEY_ID dan TABLESTORE_ACCESS_KEY_SECRET.
final String accessKeyId = System.getenv("TABLESTORE_ACCESS_KEY_ID");
final String accessKeySecret = System.getenv("TABLESTORE_ACCESS_KEY_SECRET");
// TODO: Ubah konfigurasi berikut sesuai dengan informasi instans Anda.
final String instanceName = "n01k********"; // Tentukan nama instans.
final String endpoint = "https://n01k********.cn-hangzhou.ots.aliyuncs.com"; // Tentukan endpoint instans.
AsyncTimeseriesClient client = null;
try {
// Bangun kredensial signature V2.
DefaultCredentials credentials = new DefaultCredentials(accessKeyId, accessKeySecret);
CredentialsProvider provider = new DefaultCredentialProvider(credentials);
// Buat instance client timeseries asinkron.
client = new AsyncTimeseriesClient(endpoint, provider, instanceName, null, new ResourceManager(null, null));
// Gunakan CompletableFuture untuk pemrosesan asinkron.
CompletableFuture<ListTimeseriesTableResponse> future = new CompletableFuture<>();
// Proses hasil asinkron dalam callback.
client.listTimeseriesTable(new TableStoreCallback<ListTimeseriesTableRequest, ListTimeseriesTableResponse>() {
@Override
public void onCompleted(ListTimeseriesTableRequest req, ListTimeseriesTableResponse res) {
System.out.println("Permintaan asinkron berhasil diselesaikan.");
future.complete(res); // Selesaikan Future ketika operasi asinkron berhasil.
}
@Override
public void onFailed(ListTimeseriesTableRequest req, Exception ex) {
System.err.println("Permintaan asinkron gagal.");
future.completeExceptionally(ex); // Selesaikan Future dengan exception ketika operasi asinkron gagal.
}
});
System.out.println("Permintaan asinkron listTimeseriesTable dikirim. Menunggu hasil...");
// Blokir dan tunggu hasil, serta tetapkan timeout.
// Dalam aplikasi nyata, Anda dapat melanjutkan mengeksekusi tugas non-blocking lainnya atau meneruskan future ke proses lain.
ListTimeseriesTableResponse response = future.get(5, TimeUnit.SECONDS);
// Proses hasil sukses di thread utama.
if (response.getTimeseriesTableNames() != null) {
System.out.println("Ditemukan " + response.getTimeseriesTableNames().size() + " tabel timeseries dalam instans '" + instanceName + "':");
response.getTimeseriesTableNames().forEach(System.out::println);
}
} catch (Exception e) {
System.err.println("Gagal menampilkan tabel timeseries. Detail:");
e.printStackTrace();
} finally {
// Matikan client.
if (client != null) {
client.shutdown();
}
}
}
}
Kompatibilitas versi
Versi terbaru adalah 5.x.x. Kompatibilitas versi terbaru dengan versi sebelumnya dijelaskan sebagai berikut:
SDK seri 4.x.x kompatibel.
Tablestore SDK for Java V2.x.x: tidak kompatibel
FAQ
Apa yang harus saya lakukan jika terjadi konflik dependensi library PB saat menggunakan SDK?
Jika terjadi error seperti java.lang.ExceptionInInitializerError saat menggunakan SDK, kemungkinan terdapat konflik dependensi library Protocol Buffers (PB) di proyek Anda. Untuk mengatasi konflik ini, lihat Konflik library PB saat menggunakan Java SDK.
Apa yang harus saya lakukan jika terjadi exception "Signature mismatch" saat menggunakan SDK?
Exception berikut terjadi:
Error Code: OTSAuthFailed, Message: Signature mismatch., RequestId: 0005f55a-xxxx-xxxx-xxxx-xxxxxxxxxxxx, TraceId: 10b0f0e0-xxxx-xxxx-xxxx-xxxxxxxxxxxx, HttpStatus: 403Penyebab: ID AccessKey atau rahasia AccessKey yang ditentukan saat inisialisasi client salah.
Solusi: Berikan AccessKey yang benar, yang mencakup ID AccessKey dan rahasia AccessKey.
Apa yang harus saya lakukan jika terjadi exception "Request denied by instance ACL policies" saat menggunakan SDK?
Exception Request denied by instance ACL policies berikut terjadi saat Anda menggunakan SDK untuk mengakses sumber daya dalam instans Tablestore. Contoh error ditunjukkan di bawah ini:
[ErrorCode]:OTSAuthFailed, [Message]:Request denied by instance ACL policies., [RequestId]:XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX, [TraceId]:XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX, [HttpStatus:]403Penyebab: Jenis jaringan yang digunakan oleh client tidak memenuhi persyaratan akses jaringan instans. Misalnya, client menggunakan Internet, tetapi instans tidak dikonfigurasi untuk mengizinkan akses melalui Internet.
Solusi: Secara default, akses jaringan publik dinonaktifkan untuk instans baru. Untuk mengakses sumber daya dalam instans melalui Internet, aktifkan akses jaringan publik sebagai berikut:
Buka Konsol Tablestore lalu klik alias instans.
Klik Network Management. Untuk Allowed Network Types, pilih Internet, lalu klik Settings.
Apa yang harus saya lakukan jika terjadi exception "Request denied because this instance can only be accessed from the binded VPC" saat menggunakan SDK?
Exception Request denied because this instance can only be accessed from the bound VPC berikut terjadi saat Anda menggunakan SDK untuk mengakses sumber daya dalam instans Tablestore. Contoh error ditunjukkan di bawah ini:
[ErrorCode]:OTSAuthFailed, [Message]:Request denied because this instance can only be accessed from the binded VPC., [RequestId]:XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX, [TraceId]:XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX, [HttpStatus:]403Penyebab: Jika jenis akses instans Tablestore diatur ke Bound VPCs Only atau Console Or Bound VPCs Only, Anda harus menyambungkan VPC ke instans tersebut. Pastikan juga client berada dalam VPC yang sama dengan instans dan mengakses Tablestore menggunakan endpoint VPC.
Solusi: Anda dapat mengubah jenis akses instans agar mengizinkan akses Internet, atau menyambungkan VPC ke instans Tablestore dan memastikan client berada dalam jaringan VPC tersebut. Untuk menyambungkan VPC:
Buka Konsol Tablestore lalu klik alias instans.
Klik . Pilih VPC dan VSwitch, masukkan VPC Name, lalu klik OK.
Apa yang harus saya lakukan jika terjadi SocketTimeoutException saat menggunakan SDK?
Client dapat mengalami timeout saat mengakses Tablestore karena kegagalan koneksi jaringan, fluktuasi jaringan, beban server tinggi, atau garbage collection (GC) penuh pada client. Untuk mengatasi masalah ini, periksa konektivitas jaringan, latensi server, dan apakah GC penuh telah terjadi pada client. Untuk informasi lebih lanjut, lihat Apa yang harus saya lakukan jika terjadi SocketTimeoutException saat menggunakan Java SDK untuk mengakses Tablestore?.
Apa yang harus saya lakukan jika terjadi exception "The access key id is invalid" saat menggunakan SDK?
Exception berikut terjadi saat Anda menggunakan SDK:
java.lang.IllegalArgumentException: The access key id is invalid:xxx.Penyebab: AccessKey, yang mencakup ID AccessKey dan rahasia AccessKey, salah atau mengandung karakter yang tidak valid.
Solusi: Berikan informasi AccessKey yang benar.
Apa yang harus saya lakukan jika terjadi exception "java.lang.IllegalStateException: Request cannot be executed; I/O reactor status: STOPPED" saat menggunakan SDK?
Exception berikut terjadi saat Anda menggunakan SDK:
java.lang.IllegalStateException: Request cannot be executed; I/O reactor status: STOPPEDPenyebab: Metode
shutDowntelah dipanggil pada client, dan reaktor I/O internalnya telah ditutup.Solusi: Client tidak boleh berada dalam status
shutDownsaat dipanggil. Jika client berada dalam statusshutDown, inisialisasi ulang sebelum melakukan operasi.