zoukankan      html  css  js  c++  java
  • 【Java异常】Spring boot 项目启动报错 Failed to configure a Datasource:‘url‘ attribute is not specified.....

    本文目录

    一、现象描述

    二、问题原因

    2.1 原因分析

    2.2 问题排查

    三、解决方案

    3.1 方案一

    3.2 方案二

    3.3 方案三

    3.4 方案四


    一、现象描述

    最近在写一个微服务项目,此项目需要调用其他服务提供的接口,很多接口只需要透传即可,并不需要写业务逻辑之类的,也不需要与数据库打交道,所以并不用配置数据库连接池等信息。但是Spring boot项目启动却报如下错误信息:

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

    二、问题原因

    2.1 原因分析

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

    2.2 问题排查

    2.2.1 DataSourceAutoConfiguration自动加载了,然后没有配置数据源相关信息;

    2.2.2 配置文件中没有配置 spring - datasource - url 属性;

    2.2.3 spring - datasource - url 地址配置格式有误;

    2.2.4 配置 spring - datasource - url 文件没有加载(yml或者properties文件可能没有被扫描到)。

    三、解决方案

    以下总结了四种解决方案,分别对应上面的每个问题,可参考对照,每一种方案都可解决问题。

    3.1 方案一

    在启动类上加@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class}),启动后就可以正常运行了

    3.2 方案二

    在配置文件*.yml中添加spring - datasource - url 属性

    spring:
      datasource:
        url: jdbc:mysql://localhost:3306/read_data?useUnicode=true&characterEncoding=UTF-8&useSSL=false
        username: root
        password: 123456
        driver-class-name: com.mysql.jdbc.Driver

    3.3 方案三

    按照正确的配置方式配置url

    spring:
      datasource:
        url: jdbc:mysql://localhost:3306/read_data?useUnicode=true&characterEncoding=UTF-8&useSSL=false

    3.4 方案四

    yml或者properties文件没有被扫描到,需要在pom文件中<build></build>添加如下.来保证文件都能正常被扫描到并且加载成功。

    <!-- 如果不添加此节点mybatis的mapper.xml文件都会被漏掉。 -->
    <resources>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.yml</include>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
            <filtering>false</filtering>
        </resource>
        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>**/*.yml</include>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
            <filtering>false</filtering>
        </resource>
    </resources>

    完结!

  • 相关阅读:
    解决web服务器乱码问题
    Reporting services 打印
    moss用户管理
    乱弹超级女声。。。。。。。。。。。。
    微软项目管理[EPM]数据库应用举例1: 找到所有正在进行的项目
    ajax中另一种装载数据页面的方法
    微软项目管理[EPM]数据库剖析4:项目大纲代码的四张表
    微软项目管理[EPM]数据库应用举例2: 取得一个项目的某大纲代码的值
    支持多表头、滚动条可排序的DataGrid控件[Free]
    微软项目管理[EPM]数据库剖析3:如何取得某个项目的某个大纲代码的值
  • 原文地址:https://www.cnblogs.com/no8g/p/13415494.html
Copyright © 2011-2022 走看看