SpringBoot2.x填坑(三):启动报错Failed to configure a DataSource: 'url' attribute is not specified and no emb

错误日志

***************************
APPLICATION FAILED TO START
***************************

Description:

Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.

Reason: Failed to determine a suitable driver class


Action:

Consider the following:
	If you want an embedded database (H2, HSQL or Derby), please put it on the classpath.
	If you have database settings to be loaded from a particular profile you may need to activate it (no profiles are currently active).


Process finished with exit code 1

分析原因

根据报错日志分析是在springboot项目启动的时候没有找到database 数据库连接地址,我们知道在spring boot 启动的时候会默认加载org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration这个类,而DataSourceAutoConfiguration类使用了@Configuration注解向spring注入了dataSource bean,又因为项目中并没有关于dataSource相关的配置信息,所以当spring创建dataSource bean时因缺少相关的信息就会报错。

问题排查

  1. 检查pom.xml 项目数据库jar 是否引用;
  2. 查看**.properties或**.yml 配置文件是否配置数据库链接池;
  3. 查看spring - datasource - url 配置的地址格式错误需要转义等;
  4. yml或者properties文件可能没有被扫描到(情况比较少,如果按照标准命名都会被默认扫描);

解决方案

方案1、如果项目不需要数据库相关信息就排除此类的autoconfig

在@SpringBootApplication注解上加上exclude,解除自动加载DataSourceAutoConfiguration。

@SpringBootApplication(exclude= {DataSourceAutoConfiguration.class})

springboot启动类加上这个启动以后就可以正常运行。完整代码:

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
public class Application {
	public static void main(String[] args) {
		SpringApplication.run(Application, args);
	}
}
方案2、配置文件添加数据库链接信息

**. properties 文件添加数据库配置信息(以mysql为例):

druid.driver=com.mysql.jdbc.Driver
druid.url=jdbc:mysql://localhost:3306/data?serverTimezone=Asia/Shanghai&allowMultiQueries=true
druid.username= root
druid.password= root

**.yml文件添加数据库配置信息(已mysql为例):

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/data?serverTimezone=Asia/Shanghai&allowMultiQueries=true
    username: root
    password: root
    driver-class-name: com.mysql.jdbc.Driver
方案3、配置信息转义

//错误示例

druid.url= jdbc:mysql\://localhost\: 3306/data?serverTimezone=Asia/Shanghai&allowMultiQueries=true

//正确示例

druid.url= jdbc:mysql://localhost: 3306/data?serverTimezone=Asia/Shanghai&allowMultiQueries=true
方案4、配置pom.xml 中yml或者properties扫描

需要在pom文件中



    
        src/main/java
        
            **/*.yml
            **/*.properties
            **/*.xml
        
        false
    
    
        src/main/resources
        
            **/*.yml
            **/*.properties
            **/*.xml
        
        false
    

贡献者

  • IT实战联盟-Line
  • IT实战联盟-咖啡

更多精彩内容可以关注“IT实战联盟”公号哦~~~

你可能感兴趣的:(互联网技术,微服务架构,架构实践,SpringBoot2.0踩坑,java-web)