关于spring boot 集成 Mybatis的问题 ,数据源 url找不到及BeanCreatedException的问题

 

这个问题是什么?

字面意思就是 数据源url找不到。

spring boot启动的时候,会默认去classpath下找数据源。如果没找到,自己又没配置数据源的话就会报错。

究其根本原因:就是spring boot启动要数据源,你没给。也没默认,所以就报错。

但是呢。明明我有配置数据源啊,为什么还是报这个错误?我明明在application.properties下配置了数据源了呀。

具体的原因没有发现,但是猜测是,spring boot在第一次启动的时候,没扫描到.properties下的数据源配置。

如何解决这个问题呢。网上最多的一种就是给springApplication添加 Exculed 关闭 DataAutowired 就是排除数据源扫描。

但是,这样做的后果是什么?

它会导致mapper文件扫描不到。这说明,exculed不能彻底解决这个问题。

后来,我想了一下,既然根本是数据源没有,可是我又配置了数据源,那估计是没加载到我写的这些文字了。

佩服自己的脑洞大开。

我把application.properties文件改为application.yml文件。内容如下:

yml下的配置:

mybatis:
  typeAliasesPackage: com.example.demo.entity
  mapperLocations: classpath:mapper/*.xml
spring:
  datasource:
      url: jdbc:mysql://localhost:3306/自己的数据库名?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
      username: root
      password: 123456
      driver-class-name: com.mysql.jdbc.Driver
      type: com.alibaba.druid.pool.DruidDataSource //可写可不写,阿里的数据池
  profiles:
    active: dev

 

perperties下的配置:

 spring.datasource.driver-class-name = com.mysql.jdbc.Driver
spring.datasource.url = jdbc:mysql://localhost:3306/你的数据库名?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
spring.datasource.username = root         //要记得改
spring.datasource.password = 123456   //要记得改
spring.datasource.type = com.alibaba.druid.pool.DruidDataSource
mybatis.mapper-locations=classpath:mapper/*.xml

嗯哼,再次启动spring boot ,成功了。

如果你是.yml文件配置的,却还是报这个错误,那就把.yml改成.properties。然后在重新加载。

后来,在还原这个问题的时候,发现

其实这个问题就会发生在spring boot 第一次加载数据库的时候,只要第一次成功后,无论后面是.yml还是.properties 都可以扫描到数据源。

备注:

       @Autowired 注解自动填充 一定要是实现类填充。同学再找我解决问题的时候,一直报BeanCreatedException错误。就是因为它加载的是Interface接口。  

    例如:

错误:

        @Autowired

      private testService service;  //testService是个接口,这样写肯定是注入不进去的

正确:

   @Autowired

      private testServiceImpl serviceImpl;   //一定要是实现类才行

 

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值