/*
首先查到了在创建BaseExecutor类的时候transaction的connection异常,
定位到SqlSessionTemplate类的 public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {}方法找到SqlSessionTemplate.this.sqlSessionFactory对象里面envoriment的datasouce值没有username、password和url
最终发现在创建DruidDataSource的时候没有注入值,
*/
// 修改(也可使用其他的方式注入):
    @Bean
    public DruidDataSource druidDataSource(){
        DruidDataSource druidDataSource = new DruidDataSource();
        druidDataSource.setUrl("jdbc:mysql://localhost:3306/test?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF-8");
        druidDataSource.setUsername("root");
        druidDataSource.setPassword("273672");
        return druidDataSource;
    }

发现问题的根本原因了,为application.yml中的配置写错了:

spring:
  datasource:
    druid:
    #   数据源基本配置
    url: jdbc:mysql://localhost:3306/test?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF-8
    username: 用户名
    password: 密码
    driver-class-name: com.mysql.cj.jdbc.Driver
误写成了:
sspring:
  datasource:
    druid:
    #   数据源基本配置
    url: jdbc:mysql://localhost:3306/test?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF-8
    username: 用户名
    password: 密码
    driver-class-name: com.mysql.cj.jdbc.Driver

改正之后的方式(直接使用下面的方式注入对象即可):

@ConfigurationProperties(prefix = "spring.datasource")
    @Bean
    public DruidDataSource druidDataSource(){
        DruidDataSource druidDataSource = new DruidDataSource();
//        druidDataSource.setUrl("jdbc:mysql://localhost:3306/test?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF-8");
//        druidDataSource.setUsername("root");
//        druidDataSource.setPassword("273672");
        return druidDataSource;
    }
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐