返回顶部
首页 > 资讯 > 精选 >Spring Boot怎么排除自动加载数据源
  • 874
分享到

Spring Boot怎么排除自动加载数据源

2023-06-22 02:06:42 874人浏览 安东尼
摘要

本篇内容介绍了“spring Boot怎么排除自动加载数据源”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言有些老项目使用Spr

本篇内容介绍了“spring Boot怎么排除自动加载数据源”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

前言

有些老项目使用Spring mvc里面有写好的数据库连接池,比如redis/mongodb/mybatis(mysql其他oracle同理)。在这些项目迁入Spring Boot框架时,会报错。

原因是我们业务写好了连接池,但spring boot在jar包存在的时候会主动加载spring boot的autoconfiguration创建连接池,但我们并未配置Spring Boot参数,也不需要配置。

1. mongoDB

monGodb自动配置错误如下:

org.mongodb.driver.cluster : Exception in monitor thread while connecting to server localhost:27017
com.mongodb.MongoSocketOpenException: Exception opening socket
Caused by: java.net.ConnectException: Connection refused (Connection refused)

但是我没有引入spring-boot-starter-data-mongodb的jar包,后来发现我引入了spring-data-mongodb的jar

检查spring-boot-starter-data-mongodb的jar,包括3部分,如下:

Spring Boot怎么排除自动加载数据源

我的jar包都有,相当于这些jar拼装成了 spring-boot-starter-data-mongodb

在Spring Boot中自动引入了自动配置功能

Spring Boot怎么排除自动加载数据源

Spring Boot怎么排除自动加载数据源

需要手动排除自动配置的数据源,在SpringBootApplication中exclude

@SpringBootApplication(exclude = {MongoAutoConfiguration.class, MongoDataAutoConfiguration.class})

启动不再报错连接localhost:27017,业务正常。原理见Spring Boot官方文档

Spring Boot怎么排除自动加载数据源

2. mybatis

mybatis同理

Failed to auto-configure a DataSource: 'spring.datasource.url' is not specified and no embedded data

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

Description:

Cannot determine embedded database driver class for database type NONE

Action:

If you want an embedded database please put a supported one on the classpath. If you have database settings to be loaded from a particular profile you may need to active it (no profiles are currently active).

需要排除

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})

3. 原理讲解

原理是EnableAutoConfiguration

Spring Boot怎么排除自动加载数据源

进一步跟踪:

Spring Boot怎么排除自动加载数据源

AutoConfigurationImportSelector这个类有自动加载与排除的逻辑

public String[] selectImports(AnnotationMetadata annotationMetadata) {if (!isEnabled(annotationMetadata)) {return NO_IMPORTS;}AutoConfigurationMetadata autoConfigurationMetadata = AutoConfigurationMetadataLoader.loadMetadata(this.beanClassLoader);AutoConfigurationEntry autoConfigurationEntry = getAutoConfigurationEntry(autoConfigurationMetadata,annotationMetadata);return StringUtils.toStringArray(autoConfigurationEntry.getConfigurations());}

注意加载代码

getAutoConfigurationEntry(autoConfigurationMetadata, annotationMetadata);
protected AutoConfigurationEntry getAutoConfigurationEntry(AutoConfigurationMetadata autoConfigurationMetadata,AnnotationMetadata annotationMetadata) {if (!isEnabled(annotationMetadata)) {return EMPTY_ENTRY;}AnnotationAttributes attributes = getAttributes(annotationMetadata);List<String> configurations = getCandidateConfigurations(annotationMetadata, attributes);configurations = removeDuplicates(configurations);Set<String> exclusions = getExclusions(annotationMetadata, attributes);checkExcludedClasses(configurations, exclusions);configurations.removeAll(exclusions);configurations = filter(configurations, autoConfigurationMetadata);fireAutoConfigurationImportEvents(configurations, exclusions);return new AutoConfigurationEntry(configurations, exclusions);}

里面

getExclusions(annotationMetadata, attributes);
protected Set<String> getExclusions(AnnotationMetadata metadata, AnnotationAttributes attributes) {Set<String> excluded = new LinkedHashSet<>();excluded.addAll(asList(attributes, "exclude"));excluded.addAll(Arrays.asList(attributes.getStringArray("excludeName")));excluded.addAll(getExcludeAutoConfigurationsProperty());return excluded;}

看到了,exclude或者excludeName,当然还有一种方法

private List<String> getExcludeAutoConfigurationsProperty() {if (getEnvironment() instanceof ConfigurableEnvironment) {Binder binder = Binder.get(getEnvironment());return binder.bind(PROPERTY_NAME_AUTOCONFIGURE_EXCLUDE, String[].class).map(Arrays::asList).orElse(Collections.emptyList());}String[] excludes = getEnvironment().getProperty(PROPERTY_NAME_AUTOCONFIGURE_EXCLUDE, String[].class);return (excludes != null) ? Arrays.asList(excludes) : Collections.emptyList();}

通过application.properties文件配置spring.autoconfigure.exclude

private static final String PROPERTY_NAME_AUTOCONFIGURE_EXCLUDE = "spring.autoconfigure.exclude";

“Spring Boot怎么排除自动加载数据源”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: Spring Boot怎么排除自动加载数据源

本文链接: https://lsjlt.com/news/301979.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Spring Boot怎么排除自动加载数据源
    本篇内容介绍了“Spring Boot怎么排除自动加载数据源”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言有些老项目使用Spr...
    99+
    2023-06-22
  • Spring Boot如何排除自动加载数据源
    目录前言1. mongodb2. mybatis3. 原理讲解总结解决方法前言 有些老项目使用Spring MVC里面有写好的数据库连接池,比如redis/mongodb/mybat...
    99+
    2024-04-02
  • spring boot启动加载数据原理分析
    实际应用中,我们会有在项目服务启动的时候就去加载一些数据或做一些事情这样的需求。为了解决这样的问题,spring Boot 为我们提供了一个方法,通过实现接口 CommandLineRunner 来实现。创建实现接口 CommandLine...
    99+
    2023-05-31
    spring boot 启动
  • Spring Boot 启动加载数据 CommandLineRunner的使用
    实际应用中,我们会有在项目服务启动的时候就去加载一些数据或做一些事情这样的需求。 为了解决这样的问题,spring Boot 为我们提供了一个方法,通过实现接口 CommandLineRunner 来实现。很简单,只需要一个类就可以,无需其...
    99+
    2023-05-31
    spring boot 加载
  • Spring Boot 排除某个类加载注入IOC的操作
    Spring Boot 排除某个类加载注入IOC 我们项目往往会引入其他项目的依赖,造成功能冲突的类,我们想把这些类排除掉,不注入到我们项目IoC容器中, 只加载自己的类 @Co...
    99+
    2024-04-02
  • 【Java】Spring Boot配置动态数据源
    SpringBoot配置动态数据源 一、动态多数据源的配置 1.1 创建动态数据源 通过实现Spring提供的AbstractRoutingDataSource类,可以实现自己的数据源选择逻辑,从而可...
    99+
    2023-09-15
    java spring boot 开发语言
  • 动态数据源dynamic-datasource-spring-boot-starter怎么使用
    这篇文章主要讲解了“动态数据源dynamic-datasource-spring-boot-starter怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“动态数据源dynamic-da...
    99+
    2023-07-05
  • Spring Boot怎么整合多数据源
    本篇内容主要讲解“Spring Boot怎么整合多数据源”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Spring Boot怎么整合多数据源”吧!前言:什么是多数据源最常见的...
    99+
    2023-06-30
  • 基于Spring Boot 排除自动配置的4个方法
    Spring Boot 排除自动配置 方法1 使用 @SpringBootApplication 注解,用 exclude 属性进行排除指定的类: @SpringBootAppl...
    99+
    2024-04-02
  • 基于Spring Boot排除自动配置的方法分享
    这篇文章主要讲解了“基于Spring Boot排除自动配置的方法分享”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“基于Spring Boot排除自动配置的方法分享”吧!Spring Boot...
    99+
    2023-06-20
  • Spring Boot如何排除某个类加载注入IOC的操作
    小编给大家分享一下Spring Boot如何排除某个类加载注入IOC的操作,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Spring Boot 排除某个类加载注入...
    99+
    2023-06-20
  • spring或spring boot怎么调整bean加载顺序
    今天小编给大家分享一下spring或spring boot怎么调整bean加载顺序的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起...
    99+
    2023-07-05
  • 多数据源怎么利用spring boot进行配置
    本篇文章给大家分享的是有关多数据源怎么利用spring boot进行配置,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。多数据源配置创建一个Spring配置类,定义两个DataS...
    99+
    2023-05-31
    springboot 多数据源
  • Spring Boot应用中如何使用Python进行数据加载?
    在现代应用程序的开发中,数据加载是一个非常重要的环节。无论是从数据库中读取数据、从API中获取数据,或者从文件中读取数据,数据加载都是应用程序中必不可少的一个环节。但是,有时候我们需要使用一些非常特殊的数据源来加载数据,比如使用Pytho...
    99+
    2023-10-24
    load linux spring
  • 解读动态数据源dynamic-datasource-spring-boot-starter使用问题
    目录dynamic-datasource-spring-boot-starter使用特性约定使用方法总结dynamic-datasource-spring-boot-starter使...
    99+
    2023-03-21
    解读动态数据源 dynamic-datasource-spring-boot-starter
  • Spring Boot怎么实现接口自动幂等
    今天小编给大家分享一下Spring Boot怎么实现接口自动幂等的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我...
    99+
    2024-04-02
  • pytorch加载自己的数据集源码分享
    目录一、标准的数据集流程梳理数据来源二、实现加载自己的数据集1. 保存在txt文件中(生成训练集和测试集,其实这里的训练集以及测试集也都是用文本文件的形式保存下来的)2. 在继承da...
    99+
    2024-04-02
  • Android自定义加载控件实现数据加载动画
    本文实例为大家分享了Android自定义加载控件,第一次小人跑动的加载效果眼前一亮,相比传统的PrograssBar高大上不止一点,于是走起,自定义了控件LoadingView...
    99+
    2022-06-06
    数据 动画 Android
  • Android ListView滚动到底后自动加载数据
    熟悉Android的朋友们都知道,不管是微博客户端还是新闻客户端,都离不开列表组件,可以说列表组件是Android数据展现方面最重要的组件,我们 今天就要讲一讲列表组件List...
    99+
    2022-06-06
    自动 数据 listview Android
  • ajax怎么动态加载json数据
    这篇文章将为大家详细讲解有关ajax怎么动态加载json数据,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。jsp代码<form >   姓...
    99+
    2023-06-08
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作