Connection pool là cách chúng ta control số lượng connection tối đa được open tới một server hoặc database nào đó. Đây là cách chúng ta tiết kiệm và sử dụng resource cho hợp lý, tránh lãng phí. Không một server nào có thể handle một số lượng connection không giới hạn được nha các bạn!
Khi làm việc với database theo cơ chế reactive sử dụng R2DBC, các bạn cũng cần phải đảm bảo điều này bằng cách hiện thực connection pool tới database sử dụng thư viện R2DBC Pool nhé.
Cụ thể như sau:
Đầu tiên, nếu Java project của các bạn là Java Maven project thì hãy khai báo dependency sau:
1 2 3 4 5 |
<dependency> <groupId>io.r2dbc</groupId> <artifactId>r2dbc-pool</artifactId> <version>1.0.0.RELEASE</version> </dependency> |
Tiếp theo thì trong phần cấu hình để khởi tạo ConnectionFactory như mình làm trong bài viết Tổng quan về Spring Data R2DBC, các bạn hãy khai báo thêm các cấu hình sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
@Bean public ConnectionFactory connectionFactory() { ConnectionFactoryOptions options = ConnectionFactoryOptions.builder() .option(ConnectionFactoryOptions.DRIVER, "pool") .option(ConnectionFactoryOptions.PROTOCOL, "postgresql") .option(ConnectionFactoryOptions.HOST, "localhost") .option(ConnectionFactoryOptions.USER, "khanh") .option(ConnectionFactoryOptions.PASSWORD, "123456") .option(ConnectionFactoryOptions.DATABASE, "spring_data_r2dbc_example") .option(PoolingConnectionFactoryProvider.MAX_SIZE, 10) .option(PoolingConnectionFactoryProvider.INITIAL_SIZE, 3) .build(); return ConnectionFactories.get(options); } |
Các bạn hãy để ý là option “DRIVER” đã được gán một giá trị khác là “pool”, còn option “PROTOCOL” thì được gán với giá trị “postgresql” tương ứng với driver của pool. Nếu các bạn sử dụng các database khác PostgreSQL database thì chỉ cần thay đổi giá trị của option PROTOCOL thôi các bạn nhé!
Có nhiều option khác mà các bạn có thể đăng ký với driver “pool”. Ở đây, mình chỉ cấu hình 2 option cần thiết của một connection pool, đó là số lượng connection tối đa mà ứng dụng có thể open tới database và số lượng connection lúc khởi tạo. Các bạn cũng có thể cấu hình thêm option PoolingConnectionFactoryProvider.MIN_IDLE để chỉ định số lượng connection idle khi ứng dụng không có thao tác nào đến database, vẫn có một lượng connection đang open tới database.
Lúc này, nếu mình chạy lại ví dụ trong bài viết Tổng quan về Spring Data R2DBC, mình sẽ luôn thấy 3 connection được open trong pgAdmin như sau: