You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

配置正确MySQL密码仍报access denied及entityManagerFactory创建错误如何解决

问题解决方案

错误根因

两个报错均为配置错误导致:

  1. properties配置文件中数据库用户名、密码的键名不符合Spring规范,无法被正确读取
  2. 自定义DataSource配置类逻辑错误,相当于没有给数据源设置用户名密码
  3. JPAQueryFactory创建逻辑错误,未关联Spring托管的上下文配置,导致EntityManagerFactory初始化冲突

修复步骤

  • 第一步:修正application.properties配置
    把错误的键名修改为Spring原生可识别的格式,修改后配置如下:

    spring.datasource.url=jdbc:mysql://localhost:3306/springwebservices
    spring.datasource.username=root
    spring.datasource.password=root
    spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
    spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect
    spring.jpa.show-sql=true
    spring.jpa.hibernate.ddl-auto=update
    
  • 第二步:重写AppConfiguration配置类
    修正数据源配置逻辑,JPAQueryFactory直接注入Spring托管的EntityManager即可:

    package com.training.newspringquerydsl.config;
    
    import javax.persistence.EntityManager;
    import com.querydsl.jpa.impl.JPAQueryFactory;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.jdbc.datasource.DriverManagerDataSource;
    import javax.sql.DataSource;
    import org.springframework.boot.context.properties.ConfigurationProperties;
    
    @Configuration
    // 缩小扫描范围,避免扫描到无关包下的冲突配置
    @ComponentScan(basePackages = "com.training.newspringquerydsl")
    public class AppConfiguration {
    
        @Bean
        // 自动绑定spring.datasource前缀的配置到数据源对象
        @ConfigurationProperties(prefix = "spring.datasource")
        public DataSource dataSource() {
            return new DriverManagerDataSource();
        }
    
        @Bean
        public JPAQueryFactory jpaQueryFactory(EntityManager entityManager) {
            return new JPAQueryFactory(entityManager);
        }
    }
    

    如果你使用的是非Spring Boot原生项目,没有@ConfigurationProperties注解,可以用@Value手动注入配置值:

    @Configuration
    @ComponentScan(basePackages = "com.training.newspringquerydsl")
    public class AppConfiguration {
        @Value("${spring.datasource.username}")
        private String username;
        @Value("${spring.datasource.password}")
        private String password;
        @Value("${spring.datasource.url}")
        private String url;
        @Value("${spring.datasource.driver-class-name}")
        private String driverClassName;
    
        @Bean
        public DataSource dataSource() {
            DriverManagerDataSource dataSource = new DriverManagerDataSource();
            dataSource.setUsername(username);
            dataSource.setPassword(password);
            dataSource.setUrl(url);
            dataSource.setDriverClassName(driverClassName);
            return dataSource;
        }
    
        @Bean
        public JPAQueryFactory jpaQueryFactory(EntityManager entityManager) {
            return new JPAQueryFactory(entityManager);
        }
    }
    
  • 第三步:启动前验证
    确认MySQL中已创建springwebservices数据库,root用户的密码为root、且允许localhost访问,清除项目缓存后重新编译启动即可。


内容的提问来源于stack exchange,提问作者Rutuja Gharge

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 17:18:03