
Spring Boot Error: Cannot Determine Embedded Database Driver Class for Database Type None
The “Cannot Determine Embedded Database Driver Class for Database Type None” error is one of those Spring Boot headaches that can stop your development workflow dead in its tracks. This typically happens when Spring Boot tries to auto-configure a database connection but can’t find proper configuration or dependencies. You’ll learn why this error occurs, how to fix it quickly, and how to prevent it from happening again in your Spring Boot applications.
Understanding the Root Cause
Spring Boot’s auto-configuration magic works by scanning your classpath for database drivers and configuration properties. When it finds database-related dependencies but no proper configuration, it defaults to looking for an embedded database like H2, HSQLDB, or Derby. The error occurs when:
- You have JPA or database dependencies in your classpath but no database configuration
- Your application.properties or application.yml lacks proper datasource configuration
- Database driver dependencies are missing from your build file
- Spring Boot can’t auto-detect your intended database type
The error typically appears during application startup and looks something like this:
Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
Failed to configure a DataSource: 'url' attribute is not specified and no embedded database could be found.
Action: Consider the following: If you want an embedded database (H2, HSQL or Derby), please put it on the classpath.
Quick Fixes and Solutions
Here are the most effective ways to resolve this error, starting with the quickest fixes:
Solution 1: Add Database Configuration
The most common fix is adding proper database configuration to your application.properties:
# For MySQL
spring.datasource.url=jdbc:mysql://localhost:3306/your_database
spring.datasource.username=your_username
spring.datasource.password=your_password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# For PostgreSQL
spring.datasource.url=jdbc:postgresql://localhost:5432/your_database
spring.datasource.username=your_username
spring.datasource.password=your_password
spring.datasource.driver-class-name=org.postgresql.Driver
# For H2 (embedded)
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driver-class-name=org.h2.Driver
spring.h2.console.enabled=true
Solution 2: Add Missing Database Dependencies
Make sure your pom.xml includes the appropriate database driver:
mysql
mysql-connector-java
runtime
org.postgresql
postgresql
runtime
com.h2database
h2
runtime
Solution 3: Disable Auto-Configuration
If you don’t need database functionality, exclude the DataSource auto-configuration:
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class YourApplication {
public static void main(String[] args) {
SpringApplication.run(YourApplication.class, args);
}
}
Or in application.properties:
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
Database Configuration Comparison
Database | Driver Class | URL Format | Dependency Artifact | Best For |
---|---|---|---|---|
MySQL | com.mysql.cj.jdbc.Driver | jdbc:mysql://host:port/db | mysql-connector-java | Production web apps |
PostgreSQL | org.postgresql.Driver | jdbc:postgresql://host:port/db | postgresql | Complex queries, JSON data |
H2 | org.h2.Driver | jdbc:h2:mem:testdb | h2 | Testing, prototyping |
Oracle | oracle.jdbc.OracleDriver | jdbc:oracle:thin:@host:port:sid | ojdbc8 | Enterprise applications |
Real-World Implementation Examples
Multi-Environment Configuration
Here’s how to handle different database configurations across environments:
# application.properties (common settings)
spring.jpa.hibernate.ddl-auto=validate
spring.jpa.show-sql=false
# application-dev.properties
spring.datasource.url=jdbc:h2:mem:devdb
spring.datasource.driver-class-name=org.h2.Driver
spring.h2.console.enabled=true
spring.jpa.hibernate.ddl-auto=create-drop
# application-prod.properties
spring.datasource.url=jdbc:mysql://prod-db-server:3306/production_db
spring.datasource.username=${DB_USERNAME}
spring.datasource.password=${DB_PASSWORD}
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.hibernate.ddl-auto=validate
Connection Pool Configuration
For production applications, configure connection pooling with HikariCP:
spring.datasource.hikari.maximum-pool-size=20
spring.datasource.hikari.minimum-idle=5
spring.datasource.hikari.idle-timeout=300000
spring.datasource.hikari.connection-timeout=20000
spring.datasource.hikari.auto-commit=false
Advanced Troubleshooting
Custom DataSource Configuration
Sometimes you need manual control over DataSource creation:
@Configuration
public class DatabaseConfig {
@Bean
@Primary
@ConfigurationProperties("spring.datasource")
public DataSource primaryDataSource() {
return DataSourceBuilder.create().build();
}
@Bean
@ConfigurationProperties("spring.datasource.secondary")
public DataSource secondaryDataSource() {
return DataSourceBuilder.create().build();
}
}
Testing Configuration
For unit and integration tests, use this approach:
@TestPropertySource(properties = {
"spring.datasource.url=jdbc:h2:mem:testdb",
"spring.jpa.hibernate.ddl-auto=create-drop"
})
@SpringBootTest
class DatabaseIntegrationTest {
// Your tests here
}
Best Practices and Common Pitfalls
Security Considerations
- Never hardcode credentials in properties files
- Use environment variables or external configuration
- Enable SSL for production database connections
- Implement proper connection validation
# Secure configuration example
spring.datasource.url=jdbc:mysql://localhost:3306/mydb?useSSL=true&requireSSL=true
spring.datasource.username=${DB_USER:defaultuser}
spring.datasource.password=${DB_PASS:defaultpass}
spring.datasource.hikari.connection-test-query=SELECT 1
Performance Optimization
Monitor and optimize your database connections:
# Enable metrics
management.endpoints.web.exposure.include=health,metrics,datasource
management.endpoint.health.show-details=always
# Connection pool tuning
spring.datasource.hikari.leak-detection-threshold=60000
spring.datasource.hikari.max-lifetime=1800000
Common Mistakes to Avoid
- Forgetting to add database driver dependencies
- Mixing different database configurations without proper profiling
- Not setting appropriate connection pool sizes for production
- Using create-drop in production environments
- Ignoring database connection validation
Integration with Docker and Cloud Services
When deploying with Docker, use environment-based configuration:
# docker-compose.yml
version: '3.8'
services:
app:
build: .
environment:
- SPRING_DATASOURCE_URL=jdbc:mysql://db:3306/myapp
- SPRING_DATASOURCE_USERNAME=root
- SPRING_DATASOURCE_PASSWORD=secret
depends_on:
- db
db:
image: mysql:8.0
environment:
- MYSQL_ROOT_PASSWORD=secret
- MYSQL_DATABASE=myapp
For cloud deployments, leverage managed database services and their connection strings. Cloud providers like AWS RDS, Google Cloud SQL, and Azure Database provide optimized configurations that work seamlessly with Spring Boot’s auto-configuration.
Understanding this error and its solutions will save you hours of debugging time. The key is identifying whether you need database functionality and configuring it properly from the start. For more detailed information, check the official Spring Boot documentation and the HikariCP configuration guide for advanced connection pooling options.

This article incorporates information and material from various online sources. We acknowledge and appreciate the work of all original authors, publishers, and websites. While every effort has been made to appropriately credit the source material, any unintentional oversight or omission does not constitute a copyright infringement. All trademarks, logos, and images mentioned are the property of their respective owners. If you believe that any content used in this article infringes upon your copyright, please contact us immediately for review and prompt action.
This article is intended for informational and educational purposes only and does not infringe on the rights of the copyright owners. If any copyrighted material has been used without proper credit or in violation of copyright laws, it is unintentional and we will rectify it promptly upon notification. Please note that the republishing, redistribution, or reproduction of part or all of the contents in any form is prohibited without express written permission from the author and website owner. For permissions or further inquiries, please contact us.