@SpringBootApplication注解的理解——如何排除自动装配 分布式情况下如何自动加载 nacos是怎么被发现的

前言

spring作为主流的 Java Web 开发的开源框架,是Java 世界最为成功的框架,持续不断深入认识spring框架是Java程序员不变的追求。

本篇博客介绍SpringBootApplicant注解的自动加载相关内容

其他相关的Spring博客文章列表如下:

Spring基础(核心容器)——从配置文件到注解开发 & 创建对象+成员变量赋值IOC & 增强方法AOP

在这里插入图片描述
Spring进阶(AOP的理解)——静态/动态代理 & 面向切面编程AOP(Aspect Oriented Programming) & 日志记录 & 增强方法

在这里插入图片描述

Spring进阶(AOP的应用)—— 动态代理AOP后controller层的private方法访问失效的问题

在这里插入图片描述

Spring基础(Web-MVC)——在idea中新建springWeb项目 & 浏览器请求 和 服务器响应 & SpringMvc文件相关

在这里插入图片描述
SpringMvc框架——【深入】SpringMVC 的运行流程:从客户端发送请求request到springMvc框架返回响应response的全流程分析 & DispatcherServlet

在这里插入图片描述

SpringBoot基础——追根溯源servlet是啥,tomcat是啥,maven是啥 & springBoot项目初步,maven构建,打包 & 测试

在这里插入图片描述

目录

  • 前言
  • 引出
  • mybatis相关包导入没写配置
    • 1.@SpringBootApplication注解
    • 2.如果没有写url等相关配置
  • 分布式架构下如何加载其他模块的类
    • 1.单体架构的一般模式
    • 2.分布式架构的模式
      • 另一种方式:设置自动装配
    • 问题:使用nacos的时候怎么发现的?
  • 总结

引出


1.mybatis相关包导入没写配置,@SpringBootApplication注解加入排除自动装配的相关内容;
2.在分布式架构下,如果某个模块想要其他模块下的类,需要加入@ComponentScan(basePackages = “com.tianju.domain”)进行包的扫描;
3.如果不加包扫描的注解,则需要在想要被注入到spring容器中的模块的resource下,即根目录下新建文件夹META-INF,新建文件spring.factories,写相关内容;

mybatis相关包导入没写配置

1.@SpringBootApplication注解

在这里插入图片描述

2.如果没有写url等相关配置

导入了mysql,mybatis,druid的依赖,但是application.yml文件中没有写相关的数据源url等的配置

在这里插入图片描述

此时,需要在注解@SpringBootApplication中加入排除自动装配的相关内容;加入排除后,再次启动项目,不再报错。

在这里插入图片描述

package com.tianju;import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;@SpringBootApplication(exclude ={DruidDataSourceAutoConfigure.class,DataSourceAutoConfiguration.class}
)
public class TestApp {public static void main(String[] args) {SpringApplication.run(TestApp.class);}
}

分布式架构下如何加载其他模块的类

在这里插入图片描述

mybatisplus使用分页插件,拦截器策略,在在一个引入位置写拦截器,其它模块引入配置类,需要使用@ComponentScan(base="配置类所在的包)

1.单体架构的一般模式

在这里插入图片描述

package com.tinaju.bm.config;import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** 分页需要加一个拦截器*/
@Configuration
public class MybatisPlusConfig {@Bean // 放到容器中public MybatisPlusInterceptor mybatisPlusInterceptor(){MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor();paginationInnerInterceptor.setDbType(DbType.MYSQL);paginationInnerInterceptor.setOverflow(true);mybatisPlusInterceptor.addInnerInterceptor(paginationInnerInterceptor);return mybatisPlusInterceptor;}
}

在单体模式下,会自动扫描主启动类同级下面的注解,就扫描到了标了注解的@Configuration 的分页拦截器

在这里插入图片描述

2.分布式架构的模式

在分布式架构下,如果某个模块想要其他模块下的类,需要加入@ComponentScan(basePackages = “com.tianju.domain”)进行包的扫描

在这里插入图片描述

package com.tianju.smovie.genre;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;import org.springframework.context.annotation.ComponentScan;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;@SpringBootApplication
@EnableDiscoveryClient
//@EnableJpaRepositories // 不加会报错 Not a managed type: class com.tianju.domain.entity.Genre
@EntityScan(basePackages = "com.tianju.domain.entity") // TODO:jpa需要加这个
@ComponentScan(basePackages = "com.tianju.domain")
public class GenreApp {public static void main(String[] args) {SpringApplication.run(GenreApp.class);}
}

如果不加的话,就不会加载到容器中

在这里插入图片描述

另一种方式:设置自动装配

如果不加上面包扫描的注解,则需要在想要被注入到spring容器中的模块的resource下,即根目录下新建文件夹META-INF,新建文件spring.factories,写相关内容。

在这里插入图片描述

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\com.tianju.domain.config.MybatisPlusConfig

在这里插入图片描述

排除在外相关

在这里插入图片描述

问题:使用nacos的时候怎么发现的?

如下图所示,nacos里面就有文件夹META-INF,下面有个文件spring.factories,里面的东西就会被加载进来

在这里插入图片描述

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\com.alibaba.cloud.nacos.discovery.NacosDiscoveryAutoConfiguration,\com.alibaba.cloud.nacos.endpoint.NacosDiscoveryEndpointAutoConfiguration,\com.alibaba.cloud.nacos.registry.NacosServiceRegistryAutoConfiguration,\com.alibaba.cloud.nacos.discovery.NacosDiscoveryClientConfiguration,\com.alibaba.cloud.nacos.discovery.reactive.NacosReactiveDiscoveryClientConfiguration,\com.alibaba.cloud.nacos.discovery.configclient.NacosConfigServerAutoConfiguration,\com.alibaba.cloud.nacos.loadbalancer.LoadBalancerNacosAutoConfiguration,\com.alibaba.cloud.nacos.NacosServiceAutoConfiguration,\com.alibaba.cloud.nacos.util.UtilIPv6AutoConfiguration
org.springframework.cloud.bootstrap.BootstrapConfiguration=\com.alibaba.cloud.nacos.discovery.configclient.NacosDiscoveryClientConfigServiceBootstrapConfiguration
org.springframework.boot.SpringApplicationRunListener=\com.alibaba.cloud.nacos.logging.NacosLoggingAppRunListener

总结

1.mybatis相关包导入没写配置,@SpringBootApplication注解加入排除自动装配的相关内容;
2.在分布式架构下,如果某个模块想要其他模块下的类,需要加入@ComponentScan(basePackages = “com.tianju.domain”)进行包的扫描;
3.如果不加包扫描的注解,则需要在想要被注入到spring容器中的模块的resource下,即根目录下新建文件夹META-INF,新建文件spring.factories,写相关内容;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/94613.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2023 年热门的大型语言模型 (LLMs)汇总【更新至9月26】

一、全景地图 整理了一张大语言模型的血缘图谱,如下图所示: 图中的大语言模型,都是自己做过评测的,主观了点,但是原汁原味,有好的可以推荐给我。 二、ChatGPT系列 ChaTGP是商业版本大语言模型的正统&…

逆强化学习

1.逆强化学习的理论框架 1.teacher的行为被定义成best 2.学习的网络有两个,actor和reward 3.每次迭代中通过比较actor与teacher的行为来更新reward function,基于新的reward function来更新actor使得actor获得的reward最大。 loss的设计相当于一个排序问…

visual studio禁用qt-vsaddin插件更新

visual studio里qt-vsaddin插件默认是自动更新的,由于qt-vsaddin插件新版本的操作方式与老版本相差较大,且新版本不稳定,容易出Bug,所以需要禁用其自动更新,步骤如下:     点击VS2019菜单栏上的【扩展】–…

基于Java的毕业设计选题管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding)有保障的售后福利 代码参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

实现springboot的简单使用~

在之前学习SpringSpringMVCMybatis框架时,我们学习了多种配置spring程序的方式,例如:使用XML,注解,Java配置类,或者是将它们结合使用,但配置文件配置起来依然过于复杂,而我们接下来要…

虚拟机VMware的使用流程以及出现的问题附解决方法

虚拟机VMware的使用流程以及出现的问题附解决方法 下载安装 略。。。 创建虚拟机 虚拟机的设置如下:注意网络适配器为NAT 如果出现ip addr 命令:不显示IP地址的话: 解决方式如下: 首先设置网卡:先查看一下onboot是…

软件工程与计算总结(三)示例项目描述

本节介绍一个标准的项目描述,大家可以作为蓝本学习~ 目录 一.背景 二.目标 三.系统用户 四.用户访谈要点 1.收银员 2.客户经理 3.总经理 4.系统管理员 五.项目实践过程 一.背景 A是一家刚刚发展起来的小型连锁商店,其前身是一家独立的小百货门面…

贪心算法+练习

正值国庆之际,祝愿祖国繁荣昌盛,祝愿朋友一生平安!终身学习,奋斗不息! 目录 1.贪心算法简介 2.贪心算法的特点 3.如何学习贪心算法 题目练习(持续更新) 1.柠檬水找零(easy&…

Altium Designer 批量添加元器件后缀

Altium Designer 批量添加元器件后缀 方法一方法二可能出现的问题要注意 方法一 您可以使用 Altium Designer 中的“批量修改元器件名称”功能来批量添加元器件后缀。具体步骤如下: 1.为了方便显示 操作流程,我这里复制了几个原理图的文件,粘…

剑指offer——JZ22 链表中倒数最后k个结点 解题思路与具体代码【C++】

一、题目描述与要求 链表中倒数最后k个结点_牛客题霸_牛客网 (nowcoder.com) 题目描述 输入一个长度为 n 的链表,设链表中的元素的值为 ai ,返回该链表中倒数第k个节点。 如果该链表长度小于k,请返回一个长度为 0 的链表。 数据范围&…

好奇喵 | Surface Web ---> Deep Web ---> Dark Web

前言 我们可能听说过深网(deep Web)、暗网(dark Web)等名词,有些时候可能会认为它们是一个东西,其实不然,两者的区别还是比较大的。 什么是deep web? 深网是网络的一部分,与之相对应的是表层网络(surface …

jsbridge实战2:Swift和h5的jsbridge通信

[[toc]] demo1: 文本通信 h5 -> app 思路: h5 全局属性上挂一个变量app 接收这个变量的内容关键API: navigation代理 navigationAction.request.url?.absoluteString // 这个变量挂载在 request 的 url 上 ,在浏览器实际无法运行,因…

获取上证50的所有股票代码

我们可以从网页(板块 - 上证50_ - 股票行情中心 - 搜狐证券)中获取, 然后打印出来: import requests from bs4 import BeautifulSoupurl "https://q.stock.sohu.com/cn/bk_4272.shtml" response requests.get(url) …

mysql面试题13:MySQL中什么是异步复制?底层实现?

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:讲一讲mysql中什么是异步复制?底层实现? MySQL中的异步复制(Asynchronous Replication)是一种复制模式,主服务器将数据写入二进制日志后,无…

mysql面试题14:讲一讲MySQL中什么是全同步复制?底层实现?

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:讲一讲mysql中什么是全同步复制?底层实现? MySQL中的全同步复制(Synchronous Replication)是一种复制模式,主服务器在写操作完成后,必须等待…

AI配套的技术: 矢量数据库的概念

一、说明 随着人工智能的快速采用和围绕大型语言模型发生的创新,我们需要在所有这些的中心,能够获取大量数据,将其上下文化,处理它,并使其能够有意义地搜索。 为原生整合生成式 AI 功能而构建的生成式 AI 流程和应用程…

JUC第十四讲:JUC锁: ReentrantReadWriteLock详解

JUC第十四讲:JUC锁: ReentrantReadWriteLock详解 本文是JUC第十四讲:JUC锁 - ReentrantReadWriteLock详解。ReentrantReadWriteLock表示可重入读写锁,ReentrantReadWriteLock中包含了两种锁,读锁ReadLock和写锁WriteLock&#xff…

Day-05 CentOS7.5 安装docker

参考 : Install Docker Engine on CentOS | Docker DocsLearn how to install Docker Engine on CentOS. These instructions cover the different installation methods, how to uninstall, and next steps.https://docs.docker.com/engine/install/centos/ Doc…

实战型开发--3/3,clean code

编程的纯粹 hmmm,一开始在这个环节想聊一些具体的点,其实也就是《clean code》这本书中的点,但这个就还是更流于表面; 因为编码的过程,就更接近于运动员打球,艺术家绘画,棋手下棋的过程&#x…

GPT系列论文解读:GPT-1

GPT系列 GPT(Generative Pre-trained Transformer)是一系列基于Transformer架构的预训练语言模型,由OpenAI开发。以下是GPT系列的主要模型: GPT:GPT-1是于2018年发布的第一个版本,它使用了12个Transformer…