You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Spring Boot+Spring Security项目启动报错:无法配置DataSource

解决Spring Boot + Spring Security项目启动数据源初始化失败问题

从你的报错日志和配置来看,核心问题是主数据源的URL被注释导致Spring Boot无法找到有效数据源,同时数据库驱动配置也存在版本不匹配的细节问题,下面一步步帮你解决:

1. 启用主数据源URL配置

你的application.properties里,app.datasource.url是被注释掉的,这是触发报错的直接原因——Spring Boot自动配置流程中找不到主数据源的连接地址,所以无法初始化DataSource bean。

打开注释并修正URL的转义符(properties文件中可以直接用&,无需转义):

# JDBC properties
app.datasource.url=jdbc:mysql://localhost:3306/web_customer_tracker?useSSL=false&serverTimezone=UTC
app.datasource.username=springstudent
app.datasource.password=springstudent

2. 确保MySQL驱动依赖与版本匹配

Spring Boot需要对应的数据库驱动才能连接MySQL,先检查你的依赖管理文件:

Maven(pom.xml)

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>

Gradle(build.gradle)

runtimeOnly 'mysql:mysql-connector-java'

另外,如果你使用的是MySQL 8.x版本,驱动类已经从com.mysql.jdbc.Driver更新为com.mysql.cj.jdbc.Driver,所以修改security.datasource.driver-class-name

security.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

3. 修正JPA实体类扫描配置

你的DemoDataSourceConfig中,entityManagerFactory方法没有指定实体类扫描路径,JPA无法识别你的实体bean,需要补充配置:

@Bean
@ConfigurationProperties(prefix="spring.data.jpa.entity")
public LocalContainerEntityManagerFactoryBean entityManagerFactory(EntityManagerFactoryBuilder builder, DataSource appDataSource) {
    return builder
            .dataSource(appDataSource)
            .packages("com.crm.beans") // 直接指定实体类所在包
            .build();
}

同时@EnableJpaRepositories的包路径可以直接写字符串,避免配置属性解析可能出现的问题:

@EnableJpaRepositories(basePackages = "com.crm.dao")

4. 验证Security数据源配置

你的security.datasource使用了jdbc-url(HikariCP的标准属性),DataSourceBuilder可以正常识别,但要确保URL路径、用户名密码与你的spring_security_demo_bcrypt数据库完全匹配。

完成以上调整后,重新启动项目,数据源初始化的问题应该就能解决了。

内容的提问来源于stack exchange,提问作者Antonio Diaz

火山引擎 最新活动