【IDEA】springboot启动报错、异常(排除某个模块):Failed to configure a DataSource(数据库database错误)_failed to configure a database-程序员宅基地

技术标签: spring boot  工具  intellij-idea  数据库  

一、背景

springboot的出现,让项目搭建变得更方便快捷,同时简化掉很多的样板化配置代码,提高开发效率。

通过idea生成springboot项目,启动报错:Failed to configure a DataSource: ‘url’ attribute is not specified and no embedded datasource could be configured.
在这里插入图片描述

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).

通过错误不难看出是因为dataSource的url配置缺失导致,但是新生成的项目并没有使用到jdbc,为什么会报出这个问题呢?

二、分析

其实这就是spring boot最核心的内容:自动配置

由于在生成项目的过程中勾选了mybatis以及mysql,所以pom中引入myBatis的jar包:
在这里插入图片描述
spring boot就会默认加载org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration类, 在该类中我们可以看到加载了datasource的相关配置
在这里插入图片描述

三、解决

知道问题的原因后,解决方法有两种:

1、配置正确的数据源信息,在application.yml中增加如下内容:
在这里插入图片描述
启动项目,成功。

2、在看SpringBootApplication源码的时候发现,其实是有“exclude”属性的,那我们是否可以通过该属性指定排除加载类呢?

在这里插入图片描述
答案是肯定的,如下所示:

@SpringBootApplication(exclude={
    DataSourceAutoConfiguration.class})

或者

@SpringBootApplication(exclude={
    DruidDataSourceAutoConfigure.class})

取决于具体的数据源,也可以通过逗号分割,都填上:

@SpringBootApplication(exclude={
    DruidDataSourceAutoConfigure.class, DataSourceAutoConfiguration.class})

在这里插入图片描述
服务启动成功。

另一种方法

前面我们通过exclude语法强制排除掉某个依赖,但是毕竟涉及到代码了,不太友好,需要重新编码,对于spring cloud的很多模块来说,可以再配置文件中去掉某个模块,以nacos为例:

spring:
  application:
    name: xxx
  cloud:
    nacos:
      discovery:
        enabled: true     '默认值为true,可不填'
        server-addr: 127.0.0.1:8848

只要引入了spring-cloud-starter-alibaba-nacos-discovery-2.2.5.RELEASE.jar,即使不配置nacos信息:

spring:
  application:
    name: xxx
  cloud:

也会默认去127.0.0.1:8848寻找nacos服务器,此时可以通过enabled=false来排除nacos模块,不用重新编码。

或者你可以配置成:

@SpringBootApplication(exclude={
     NacosDiscoveryAutoConfiguration.class})

原理

一般某个模块都有一个AutoConfiguration,查看其源码:

@ConditionalOnDiscoveryEnabled
@ConditionalOnNacosDiscoveryEnabled
public class NacosDiscoveryAutoConfiguration {
    

@ConditionalOnDiscoveryEnabled或@ConditionalOnNacosDiscoveryEnabled分别对应前提条件:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@ConditionalOnProperty(value = "spring.cloud.discovery.enabled", matchIfMissing = true)
public @interface ConditionalOnDiscoveryEnabled {
    

配置项 @ConditionalOnProperty(value = “spring.cloud.discovery.enabled”, matchIfMissing = true) 就是相应的前提条件

参考:
《springboot启动报错:Failed to configure a DataSource》

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_45406092/article/details/110938586

智能推荐

CentOS8 与 CentOS7 的区别_centos 8-程序员宅基地

文章浏览阅读2.9w次,点赞19次,收藏50次。CentOS8 与 CentOS7 的区别。_centos 8

NLP(3): 问答系统介绍,文本处理流程_nlp知识库问答判断输入内容是否在知识库中-程序员宅基地

文章浏览阅读691次。1、P vs NP vs NP Hard vs NP Complete按照时间复杂度将问题分类 ,p是常数多项式复杂度 O(p^n) :不可以解决的问题,归类于NP Hard/Np Complete1、对于小型的问题,仍然可以采用NP: 可以在多项式复杂度内可以verify的,给定一个解,判断这个解是不是想要的。评估解的过程只需要多项式复杂度,是个判断过程。2、approximate algorithm:不保证获得精确的解- 提出近似算法- 指出时间复杂度多少- 给出近似算法最后给出_nlp知识库问答判断输入内容是否在知识库中

使用HTTPD做内部访问转向-程序员宅基地

文章浏览阅读235次。#使用HTTPD做内部访问转向 1.添加二级域名解析,并能成功ping通 2.安装httpd服务 yum install httpdyum install httpd-devel.x86_64 3.修改httpd的配置文件 cd /etc/httpd/confvim http..._httpd内部访问的例子

程序员的浪漫,用Python制作一个烟花代码!-程序员宅基地

文章浏览阅读1w次,点赞19次,收藏64次。距离跨年还有一个半月啦!今天分享用python实现一场烟花秀!话不多说。

【OpenCV 例程200篇】64. 图像锐化——Sobel 算子_opencv sobel算子进行图像锐化-程序员宅基地

文章浏览阅读9.8k次,点赞8次,收藏48次。图像锐化的目的是增强图像的灰度跳变部分,使模糊的图像变得清晰。图像锐化也称为高通滤波,通过和增强高频,衰减和抑制低频。图像锐化常用于电子印刷、医学成像和工业检测。Sobel 算子是一种离散的微分算子,是高斯平滑和微分求导的联合运算,抗噪声能力强。Sobel 梯度算子很容易通过卷积操作 cv.filter2D 实现,OpenCV 也提供了函数 cv.Sobel 实现 Sobel 梯度算子。_opencv sobel算子进行图像锐化

【Window系统】安装FFmpeg教程_windows安装ffmpeg-程序员宅基地

文章浏览阅读4.1k次,点赞4次,收藏10次。到这里ffmpeg的配置就完成了。我们调用命令行(windows+R输入cmd)输入“ffmpeg –version”,如果出现以下结果则说明配置成功。记得点下方的确定,再关闭当前窗口再点确定,这样才能保存,千万记得不能点击取消。选择新建,把刚刚复制的bin路径粘贴进去,点击确定。_windows安装ffmpeg

随便推点

机器视觉 OpenCV—python目标跟踪(光流)_python 目标 跟踪-程序员宅基地

文章浏览阅读2.4w次,点赞38次,收藏345次。一、运动检测1.1 检测思路目标跟踪是对摄像头视频中的移动目标进行定位的过程。实时目标跟踪是许多计算机视觉应用的重要任务,如监控、基于感知的用户界面、增强现实、基于对象的视频压缩以及辅助驾驶等。好久之前做过一次人脸检测,里面涉及到了目标跟踪。这次实现一般的运动物体检测,关于实现视频目标跟踪的方法有很多,当跟踪所有移动目标时,帧之间的差异会变的有用;当跟踪视频中移动的手时,基于皮肤颜色的均值..._python 目标 跟踪

虚幻四Gameplay Ability System入门(5)-冲刺奔跑和深入Attribute_getgameplayattributevaluechangedelegate-程序员宅基地

文章浏览阅读1k次,点赞3次,收藏3次。在这篇文章开始前,先分享一个惨痛的经历,就因为在虚幻四的源码中加了两句注释,项目的编译就走向了拥有3000+ Errors的不归路 T T,这是啥原理啊。这次我们要实现的功能是角色的冲刺奔跑,操作就是点击shift后角色的移动速度会增加。这个能力的实现应该是挺简单的,但是我会扩展一部分的GAS源码,深入一下GAS的Attribute,希望能够帮助到一部分读者。有问题也希望大家可以在评论或者私信告诉我。接下来进入正题,首先还是讲解一下加速跑的实现过程:shift点击后activiate加速跑技能。加_getgameplayattributevaluechangedelegate

NachOS线程ID的实现、最大线程数的实现和优先级的添加_nachos线程调度调度时,线程的产生和调度须同时进行,并且要构建它们的线程家族树。-程序员宅基地

文章浏览阅读3.4k次,点赞13次,收藏48次。NachOS线程的描述和优先级1.实验目的(1)通过阅读相关源码,掌握NachOS运行原理和编译方法;(2)完善NachOS下线程描述的内容。2.实验内容(1)为NachOS线程添加线程ID,并设置系统最大线程数;(2)为NachOS线程调度添加优先级,为实现基于优先级的调度做准备。3.实验方法(实验步骤)(1)理解NachOS线程的运行与调度原理,找到需要修改的代码(注:以下所有修改代码的部分,均是由vim修改完成);(2)对thread.h进行修改:在头文件处定义线程最大数MAX_SI_nachos线程调度调度时,线程的产生和调度须同时进行,并且要构建它们的线程家族树。

Vue - 关闭项目 ESlint 校验(非 Vscode 插件)_非vscode eslint-程序员宅基地

文章浏览阅读2.1k次。如果您最初创建项目时(或别人的项目)带有ESlint代码规范校验,本文为您带来如何一行代码进行关闭。_非vscode eslint

15.mvc和分页_mvc用vue分页-程序员宅基地

文章浏览阅读644次,点赞2次,收藏5次。MVC和分页第一节 MVC模式简介1.1 MVC概念​ 首先我们需要知道MVC模式并不是javaweb项目中独有的,MVC是一种软件工程中的一种设计模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller),即为MVC。它是一种软件设计的典范,最早为Trygve Reenskaug提出,为施乐帕罗奥多研究中心(Xerox PARC)的Sma..._mvc用vue分页

CentOS 7 安装 Hive_centos7.5安装hive-程序员宅基地

文章浏览阅读1.4k次。操作系统:CentOS 7Hive版本:2.3.6JDK版本:1.8Mysql版本:5.7安装前准备保证 hadoop 正常运行保证 Mysql 正常运行确保JDK 正常安装yum install java-1.8.0-openjdk创建hive数据库并为其授权在msyql数据库中创建hive的元数据库create database hive;..._centos7.5安装hive

推荐文章

热门文章

相关标签