สำหรับการเชื่อมต่อ Java Spring Boot เข้ากับ SQL Server อย่างที่เคยตั้งค่าไว้ใน Docker Compose นั้น มีขั้นตอนสำคัญอยู่ที่การตั้งค่า pom.xml และ application.properties ( หรือ yml ) ดังนี้ครับ
เพิ่ม Dependency ใน pom.xml
คุณต้องใช้ Driver สำหรับ MSSQL และ Spring Data JPA เพื่อจัดการกับฐานข้อมูล
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
ตั้งค่า application.properties
เนื่องจากคุณใช้ SQL Server 2025 และมีการตั้งค่า healthcheck ที่ใช้ encrypt ( ผ่าน flag -C ในคำสั่ง sqlcmd ) ตัว Connection String ใน Java ควรระบุให้ชัดเจนเพื่อป้องกันปัญหาเรื่อง SSL/TLS
# Connection String
# หากรัน App นอก Docker ให้ใช้ localhost แต่ถ้ารันใน Docker network เดียวกันให้ใช้ชื่อ service (db-sqlserver)
spring.datasource.url=jdbc:sqlserver://localhost:1433;databaseName=master;encrypt=true;trustServerCertificate=true;
spring.datasource.username=sa
spring.datasource.password=4w2e36jqg6mG
spring.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
# JPA / Hibernate Config
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
# ระบุ Dialect สำหรับ SQL Server
spring.jpa.database-platform=org.hibernate.dialect.SQLServerDialect
ข้อควรระวังเรื่อง Collation และข้อมูล
- Thai Collation: คุณตั้งค่า
Thai_100_CI_ASไว้ใน Docker ซึ่งดีมากสำหรับการเรียงลำดับภาษาไทย ( ก-ฮ ) แต่อย่าลืมว่าใน Spring Boot Entity หากต้องการเก็บข้อความภาษาไทย ควรใช้ Type เป็นNVARCHARในฐานข้อมูล ( Hibernate จะจัดการให้เองถ้าใช้@Column(columnDefinition = "nvarchar(255)") หรือตั้งค่า Dialect ให้ถูกต้อง ) - Volume Mapping: จากไฟล์ Compose ที่ทำ
./data:/var/opt/mssqlไว้ ข้อมูลจะถูกเก็บในเครื่องคุณที่โฟลเดอร์dataแม้จะลบคอนเทนเนอร์ออก ข้อมูลก็จะไม่หายครับ - Encryption: ใน Driver เวอร์ชันใหม่ ๆ จะบังคับ
encrypt=trueเป็นค่าเริ่มต้น หากไม่ได้ลง Certificate จริงไว้ที่ Server ต้องใส่;trustServerCertificate=trueต่อท้าย URL เสมอ มิฉะนั้น Spring Boot จะเชื่อมต่อไม่สำเร็จ
อ่านเพิ่มเติม
