这个问题是什么?
字面意思就是 数据源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; //一定要是实现类才行