Microsoft SQL Server (MSSQL) is a robust, enterprise-grade relational database that's often used in corporate systems and backend services. If you're working with Spring Boot and want to integrate MSSQL smoothly, Docker makes the setup process simple and repeatable. Whether you're developing locally or deploying in Kubernetes, Docker paired with Spring’s configuration system keeps your environment clean and manageable.
In this article, we’ll cover how to use Docker to run MSSQL and how to connect your Spring Boot application using
application.properties
—with separate configurations for development and production.
Step 1: Why Use Docker for Microsoft SQL Server?
Running MSSQL in Docker helps you avoid installing the database directly on your machine or managing heavy dependencies. Docker ensures that:
- You get consistent behavior across machines.
- You can tear down and rebuild the database easily.
- Your dev and prod environments remain isolated but similar.
Step 2: Running Microsoft SQL Server in Docker for Development
You can run the official Microsoft SQL Server image locally with a simple command:
docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=YourStrong!Passw0rd" \ -p 1433:1433 --name mssql-dev -d mcr.microsoft.com/mssql/server:2019-latest
Explanation:
ACCEPT_EULA=Y
: Accepts Microsoft’s license terms.
SA_PASSWORD
: Sets the password for the system administrator account.
-p 1433:1433
: Exposes SQL Server's default port.
mcr.microsoft.com/mssql/server
: The official Docker image.
Wait a few seconds for the database to initialize, and it will be accessible via
localhost:1433
.
Step 3: Add MSSQL JDBC Driver to Your Spring Boot Project
In your
pom.xml
, include the Microsoft JDBC driver:
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>12.2.0.jre11</version> <!-- Adjust based on your Java version -->
</dependency>
This enables your Spring Boot app to talk to SQL Server.
Step 4: Configure application-dev.properties
For development, create an
application-dev.properties
file and connect to your local SQL Server instance:
spring.datasource.url=jdbc:sqlserver://localhost:1433;databaseName=testdb
spring.datasource.username=sa
spring.datasource.password=YourStrong!Passw0rd
spring.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.jpa.hibernate.ddl-auto=update
Make sure
testdb
exists or adjust it to your actual development database.
To activate this configuration, set the profile:
SPRING_PROFILES_ACTIVE=dev
Spring Boot will now use the local Docker-based MSSQL instance.
Step 5: Setting Up Production Configuration (Kubernetes)
In production environments, you usually don’t want hardcoded database credentials. Instead, you can use Kubernetes ConfigMaps and Secrets to manage configuration values.
Step 5.1: Create a Kubernetes ConfigMap and Secret
First, define a ConfigMap for non-sensitive values:
apiVersion: v1
kind: ConfigMap
metadata:
name: mssql-config
namespace: your-namespace
data:
mssql_host: mssql-service
mssql_port: "1433"
mssql_database: prod_db
Then, store sensitive values like username and password in a Kubernetes Secret:
apiVersion: v1
kind: Secret
metadata:
name: mssql-credentials
namespace: your-namespace
type: Opaque
data:
mssql_user: c2E= # base64 encoded 'sa'
mssql_password: WW91clN0cm9uZyFQYXNzdzByZA== # base64 encoded password
Step 5.2: Inject Config into Your Spring Boot App
Update your deployment YAML to include environment variables:
containers:
- name: your-app
image: your-app-image
env:
- name: MSSQL_HOST
valueFrom:
configMapKeyRef:
name: mssql-config
key: mssql_host
- name: MSSQL_PORT
valueFrom:
configMapKeyRef:
name: mssql-config
key: mssql_port
- name: MSSQL_DATABASE
valueFrom:
configMapKeyRef:
name: mssql-config
key: mssql_database
- name: MSSQL_USER
valueFrom:
secretKeyRef:
name: mssql-credentials
key: mssql_user
- name: MSSQL_PASSWORD
valueFrom:
secretKeyRef:
name: mssql-credentials
key: mssql_password
- name: SPRING_PROFILES_ACTIVE
value: prod
Step 6: Configure application-prod.properties
Now set up your production configuration file:
sspring.datasource.url=jdbc:sqlserver://${MSSQL_HOST}:${MSSQL_PORT};databaseName=${MSSQL_DATABASE}
spring.datasource.username=${MSSQL_USER}
spring.datasource.password=${MSSQL_PASSWORD}
spring.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.jpa.hibernate.ddl-auto=validate
This ensures that Spring Boot reads connection settings from environment variables passed by Kubernetes.
Step 7: Switching Between Dev and Prod Profiles
Use Spring Boot profiles to maintain environment-specific settings:
application-dev.properties
for local development
application-prod.properties
for Kubernetes or cloud deployments
Control which profile is active using:
SPRING_PROFILES_ACTIVE=dev # or prod
This cleanly separates concerns and avoids accidental misuse of production credentials during development.
image quote pre code