Spring Boot多模块项目数据源配置失败:未指定url且无嵌入式数据源
Spring Boot多模块应用数据源配置失败问题
开发Spring Boot多模块应用时,根目录配置MySQL数据源及Hikari连接池参数后,启动仍报错:Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured,原因是无法确定合适的驱动类。以下是相关信息及解决方案:
初始根目录application.properties配置
spring.datasource.url = jdbc:mysql://localhost:3306/spring spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.username = root spring.datasource.password = spring.jpa.show-sql = true spring.jpa.hibernate.ddl-auto = update spring.jpa.hibernate.naming.physical-strategy = org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQLDialect
项目结构
根模块为Spring Boot应用,包含data、service、controller三个Maven子模块:
根pom.xml配置
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.0.1</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.dbiz</groupId> <artifactId>esuite</artifactId> <version>0.0.1-SNAPSHOT</version> <name>esuite</name> <packaging>pom</packaging> <description>eSuite project for Spring Boot</description> <properties> <java.version>19</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <excludes> <exclude> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </exclude> </excludes> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> </plugin> </plugins> </build> <modules> <module>data</module> <module>service</module> <module>controller</module> </modules> </project>
子模块pom.xml示例(controller模块)
其他子模块配置类似
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <artifactId>controller</artifactId> <packaging>jar</packaging> <parent> <groupId>com.dbiz</groupId> <artifactId>esuite</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <dependencies> <dependency> <groupId>com.dbiz</groupId> <artifactId>service</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <dependency> <groupId>com.dbiz</groupId> <artifactId>data</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> </dependencies> </project>
启动报错堆栈信息
. ____ _ __ _ _ /\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v3.0.1) 2023-01-10T11:14:27.773+05:00 INFO 13664 --- [ main] com.dbiz.esuite.EsuiteApplication : Starting EsuiteApplication using Java 19.0.1 with PID 13664 (D:\eclipse-workspace\esuite\target\classes started by Dell in D:\eclipse-workspace\esuite) 2023-01-10T11:14:27.782+05:00 INFO 13664 --- [ main] com.dbiz.esuite.EsuiteApplication : No active profile set, falling back to 1 default profile: "default" 2023-01-10T11:14:31.986+05:00 INFO 13664 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. 2023-01-10T11:14:32.210+05:00 INFO 13664 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 33 ms. Found 0 JPA repository interfaces. 2023-01-10T11:14:38.609+05:00 INFO 13664 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http) 2023-01-10T11:14:38.647+05:00 INFO 13664 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat] 2023-01-10T11:14:38.647+05:00 INFO 13664 --- [ main] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.4] 2023-01-10T11:14:39.413+05:00 INFO 13664 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2023-01-10T11:14:39.416+05:00 INFO 13664 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 11128 ms 2023-01-10T11:14:39.553+05:00 WARN 13664 --- [ main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'dataSourceScriptDatabaseInitializer' defined in class path resource [org/springframework/boot/autoconfigure/sql/init/DataSourceInitializationConfiguration.class]: Unsatisfied dependency expressed through method 'dataSourceScriptDatabaseInitializer' parameter 0: Error creating bean with name 'dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class]: Failed to instantiate [com.zaxxer.hikari.HikariDataSource]: Factory method 'dataSource' threw exception with message: Failed to determine a suitable driver class 2023-01-10T11:14:39.558+05:00 INFO 13664 --- [ main] o.apache.catalina.core.StandardService : Stopping service [Tomcat] 2023-01-10T11:14:45.176+05:00 INFO 13664 --- [ main] .s.b.a.l.ConditionEvaluationReportLogger : Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. 2023-01-10T11:14:45.236+05:00 ERROR 13664 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPLICATION FAILED TO START *************************** Description: Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured. Reason: Failed to determine a suitable driver class
修改后的Hikari专属application.properties配置
调整后依然报错
spring.datasource.hikari.driver-class-name=com.mysql.jdbc.Driver spring.datasource.hikari.minimum-idle=5 spring.datasource.hikari.idle-timeout=180000 spring.datasource.hikari.maximum-pool-size=20 spring.datasource.hikari.auto-commit=true spring.datasource.hikari.pool-name=Mysql-spring.datasource.hikariCP spring.datasource.hikari.max-lifetime=1800000 spring.datasource.hikari.connection-timeout=30000 spring.datasource.hikari.connection-test-query=SELECT 1 spring.datasource.hikari.validation-timeout=5000 spring.datasource.hikari.jdbc-url=jdbc:mysql://localhost:3306/spring spring.datasource.hikari.username=root spring.datasource.hikari.password= spring.jpa.show-sql=true spring.jpa.hibernate.ddl-auto=update spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect
解决方案
1. 修正Spring Boot 3.x兼容的MySQL驱动类
Spring Boot 3.x基于Jakarta EE,对应的MySQL驱动类已更新为com.mysql.cj.jdbc.Driver,替换配置中的旧驱动类:
# 初始配置修改 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver # Hikari配置修改 spring.datasource.hikari.driver-class-name=com.mysql.cj.jdbc.Driver
2. 移除JPA依赖的provided作用域
根pom中spring-boot-starter-data-jpa的provided作用域会导致运行时无法加载JPA相关类,移除该配置:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> <!-- 移除<scope>provided</scope> --> </dependency>
3. 确保配置文件路径正确
根模块的application.properties需放置在src/main/resources目录下,保证Spring Boot启动时能读取到配置。
4. 验证MySQL服务状态
确认本地MySQL服务已启动,端口3306正常监听,数据库spring已创建,且用户名密码配置正确。
5. 清理Maven依赖并重新构建
执行以下命令清理本地依赖并重新构建,避免依赖冲突或缺失:
mvn clean install -U
内容的提问来源于stack exchange,提问作者Shahzaib
相关产品推荐
相关产品推荐

