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

这篇具有很好参考价值的文章主要介绍了@SpringBootApplication注解的理解——如何排除自动装配 & 分布式情况下如何自动加载 & nacos是怎么被发现的。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

前言

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构建,打包 & 测试

引出


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

mybatis相关包导入没写配置

1.@SpringBootApplication注解

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

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

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

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

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

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

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);
    }
}

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

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

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

1.单体架构的一般模式

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

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 的分页拦截器

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

2.分布式架构的模式

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

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

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);
    }
}

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

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

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

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

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

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

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

排除在外相关

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

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

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

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

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,写相关内容;文章来源地址https://www.toymoban.com/news/detail-722137.html

到了这里,关于@SpringBootApplication注解的理解——如何排除自动装配 & 分布式情况下如何自动加载 & nacos是怎么被发现的的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 手写一个starter来理解SpringBoot的自动装配

    手写一个starter来理解SpringBoot的自动装配

    自动装配是指SpringBoot在启动的时候会自动的将系统中所需要的依赖注入进Spring容器中 我们可以点开 @SpringBootApplication 这个注解来一探究竟 点开这个注解可以发现这些 我们点开 @SpringBootConfiguration 这个注解 可以发现实际上 @SpringBootApplication 这个其实是一个配置类 再点开 @En

    2024年01月23日
    浏览(11)
  • 关于在 springboot 中使用 @Autowired 注解来对 TemplateEngine 进行自动装配时,无法注入的问题。

    关于在 springboot 中使用 @Autowired 注解来对 TemplateEngine 进行自动装配时,无法注入的问题。

    本文是基于江南一点雨的 Spring Boot+Vue 系列视频教程第 三 章的第三节,详情参考Spring Boot+Vue系列视频教程 在观看学习这一节时,发现当进行手动渲染 Thymeleaf 模板时,通过 @Autowired 注解来对 TemplateEngine 进行自动装配时,发现 idea 对其显示 No beans of \\\'TemplateEngine \\\' type of found。

    2024年02月02日
    浏览(14)
  • 【SpringBoot-注解】@SpringBootApplication

    @SpringBootApplication被用于激活@EnableAutoConfiguration、@ComponentScan、@Configuration三个注解的特性。 其中: @EnableAutoConfiguration 负责激活spring boot自动装配机制 @ComponentScan 负责激活@Component的扫描 @Configuration 负责声明被标注为配置类 可以说明@SpringBootApplication等同于@EnableAutoConfiguration、

    2024年02月16日
    浏览(35)
  • @SpringBootApplication注解

     启动类的 @SpringBootApplication 其中@SpringBootConfiguration 所以加上@SpringBootApplication之后,会被当做配置类 -------------------------------------------------------------------------------- @Configuration @Configuration注解 的value属性之上有注解@AliasFor( annotation = Component.class ) 在使用@Configuration(value=\\\"s\\\"),该属

    2023年04月23日
    浏览(8)
  • SpringBoot启动类@SpringBootApplication注解

    SpringBoot启动类@SpringBootApplication注解

    在springBoot的启动类中,提供了一个mai函数的程序入口,来启动加载SpringBoot程序,那么注解@SpringBootApplication,通过源码可以看到,它相当于@ComponentScan + @EnableAutoConfiguration + @SpringBootConfiguration。 通过@SpringBootConfiguration注解的源码得知,其配置了一个@Configuration注解,来声明这

    2024年02月08日
    浏览(16)
  • Spring Boot 的核心注解SpringBootApplication

    SpringBootApplication 包括的注解 组合了 @Configuration 注解,实现配置文件的功能。 打开自动配置的功能,也可以关闭某个自动配置的选项, 例如:java 如关闭数据源自动配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。 Spring组件扫描。

    2024年02月10日
    浏览(11)
  • @SpringBootApplication注解说明(InsCode AI 创作助手)

    @SpringBootApplication 是 Spring Boot 中的一个关键注解,用于标识一个类是 Spring Boot 应用程序的主应用程序类。在这篇文章中,我们将详细解释 @SpringBootApplication 注解以及它在 Spring Boot 应用程序中的作用。 @SpringBootApplication 注解是 Spring Boot 中的一个复合注解,它包含了以下三个重

    2024年02月07日
    浏览(15)
  • Spring Boot如何实现自动装配

    Spring Boot的自动装配是它的一大特点,可以大大提高开发效率,减少重复性代码的编写。本文将详细讲解Spring Boot如何实现自动装配。 在传统的Spring框架中,我们需要手动配置和管理Bean的依赖关系,但在Spring Boot中,大量的配置可以自动完成。这是因为Spring Boot中引入了自动装

    2024年02月04日
    浏览(12)
  • idea的springboot项目的SpringBootApplication注解是红色的因为什么

    在 IntelliJ IDEA 中,当 Spring Boot 项目的 @SpringBootApplication 注解变为红色时,通常是因为以下原因之一: 缺少 Spring Boot 相关依赖: @SpringBootApplication 注解是 Spring Boot 项目的核心注解之一,如果您的项目缺少相关的 Spring Boot 依赖,IDEA 将无法正确解析该注解,从而导致变为红色。

    2024年02月07日
    浏览(11)
  • 深入理解与运用Lombok的@Cleanup注解:自动化资源管理利器

    在Java编程中,正确地管理和释放诸如文件流、数据库连接等资源至关重要。若处理不当,可能会引发内存泄漏或系统资源耗尽等问题。为此,Lombok库提供了一个名为 @Cleanup 的便捷注解,它允许我们以简洁且安全的方式自动关闭实现了 java.io.Closeable 或 java.lang.AutoCloseable 接口的

    2024年01月22日
    浏览(17)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包