Connection Pool
Pool dalam English bermaksud ‘kolam’. Biasanya orang menyimpan ikan yang ditangkap ke dalam kolam untuk diguna/dimakan di kemudian hari. Jadi, connection pool bermaksud ‘kolam connection database’, supaya kita boleh menggunakan connection yang sudah disambung untuk membuat operasi database berkali-kali.
Penyambungan ke database yang kita buat sebelum ini sebenarnya kurang efisyen terutamanya untuk aplikasi yang berjalan lama seperti web kerana kita perlu membuat penyambungan ke database semula tiap kali kita melakukan operasi database.
HikariCP
Kita boleh menulis sendiri code untuk membuat connection pool, tapi tak perlulah. Kita guna saja library yang telah banyak membuat research untuk menjadikan connection pool lebih efisyen. Saya perkenalkan, HikariCP.
HikariCP digunakan secara default jika anda menggunakan web framework seperti Spring Boot, Play Framework atau Luminus.
Setup
HikariCP ialah library Java, jadi kita tambah sahaja di file pom.xml
:
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>2.6.2</version>
</dependency>
Untuk membuat sambungan ke database menggunakan HikariCP, tambah code berikut di constructor H2Application:
HikariConfig config = new HikariConfig();
config.setJdbcUrl(DATABASE_URL);
config.setUsername(NAME);
config.setPassword(PASSWORD);
Tambah field untuk DataSource
:
private final DataSource dataSource;
dan initialize field tersebut menggunakan config yang telah dibuat:
dataSource = new HikariDataSource(config);
getConnection()
Untuk membuat operasi database, kita boleh menggunakan method getConnection()
daripada DataSource
.
Sebagai contoh, sebelum ini di dalam method init()
, kita menggunakan DriverManager
untuk mendapatkan Connection
. Jadi, ganti sahaja code
DriverManager.getConnection(DATABASE_URL, NAME, PASSWORD)
ke
dataSource.getConnection()
Update DAO
Untuk menggunakan DataSource
yang sama, hantar sahaja field tersebut melalui constructor untuk DAO.
Tukar constructor SimpleKucingDao daripada
public SimpleKucingDao(final String url, final String name, final String password) {
this.url = url;
this.name = name;
this.password = password;
}
ke
public SimpleKucingDao(final DataSource dataSource) {
this.dataSource = dataSource;
}
Kemudian hantar dataSource
sebagai argument di constructor H2Application:
pendaftaranService = new PendaftaranService(new SimpleKucingDao(dataSource));
Setelah selesai, bolehlah ganti semua code yang menggunakan DriverManager
ke DataSource
.
Code yang lengkap boleh dilihat di sini.