Điểm khó khăn: Tại sao kết nối cơ sở dữ liệu luôn thất bại?
Nếu bạn đang gặp sự cố kết nối cơ sở dữ liệu trong dự án JeecgBoot, bài viết này sẽ cung cấp giải pháp toàn diện để xử lý các vấn đề như lỗi cấu hình, lỗi driver, hoặc lỗi kết nối. Bạn sẽ học được:
- Cấu hình cơ bản cho kết nối CSDL
- Kỹ thuật xác định và khắc phục lỗi
- Thực hành tốt nhất cho môi trường đa cấu hình
- Giải pháp tương thích driver CSDL
1. Cấu hình kết nối CSDL cơ bản
1.1 Cấu trúc cấu hình
JeecgBoot sử dụng cơ chế đa môi trường của Spring Boot thông qua file application.yml:
# application.yml
spring:
profiles:
active: dev
# application-dev.yml
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/jimureport?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: 123456
type: com.zaxxer.hikari.HikariDataSource
hikari:
minimum-idle: 5
maximum-pool-size: 15
connection-timeout: 30000
1.2 Giải thích tham số cấu hình
| Tham số | Mô tả | Giá trị mẫu |
|---|---|---|
driver-class-name |
Tên lớp driver CSDL | com.mysql.cj.jdbc.Driver |
serverTimezone |
Múi giờ máy chủ | Asia/Shanghai |
2. Các sự cố phổ biến và cách khắc phục
2.1 Lỗi không tìm thấy driver
Triệu chứng:
java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver
Giải pháp: Kiểm tra dependency trong pom.xml:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.27</version>
</dependency>
2.2 Lỗi định dạng URL kết nối
URL mẫu đúng:
jdbc:mysql://localhost:3306/dbname?
useUnicode=true&
characterEncoding=utf8&
serverTimezone=Asia/Shanghai&
allowPublicKeyRetrieval=true
2.3 Lỗi múi giờ
Khắc phục: Thêm tham số serverTimezone vào URL kết nối
2.4 Cơ sở dữ liệu không tồn tại
Lệnh tạo CSDL:
CREATE DATABASE jimureport
CHARACTER SET utf8mb4
COLLATE utf8mb4_general_ci;
3. Thực hành đa môi trường
Cách chuyển đổi môi trường:
java -jar app.jar --spring.profiles.active=prod
4. Khởi tạo cơ sở dữ liệu
Thực thi script SQL:
mysql -u root -p
USE jimureport;
source /path/to/script.sql;
5. Tối ưu kết nối pool
spring:
datasource:
hikari:
minimum-idle: 5
maximum-pool-size: 20
connection-timeout: 30000
6. Cấu hình bảo mật
Mã hóa mật khẩu: Sử dụng thư viện Jasypt:
spring:
datasource:
password: ENC(encrypted_password)
7. Công cụ chẩn đoán
# Kiểm tra trạng thái MySQL
systemctl status mysql
# Kiểm tra kết nối
mysql -h localhost -u root -p -e "SELECT 1"
8. Nguyên tắc vàng
- Đảm bảo tính chính xác của cấu hình
- Phân tách môi trường rõ ràng
- Tối ưu tham số pool kết nối
- Áp dụng SSL trong môi trường production