springboot全家桶

一 核心注解

只使用了一个@SpringBootApplication注解来启动应用, 这个注解有两个作用: 配置和启动引导,相当于3个注解组成:

@Configuration : 标明spring基于java的配置
@ComponentScan:  启动组件扫描,把相关@Component @Controller @Service @Repository等注解的Bean扫描到并实例化到上下文容器中
@EnableAutoConfiguration: 开始自动配置

说明:
1)@ComponentScan 可以通过basePackages 来定制化自动扫描的范围,如果不指定的,则默认会从@ComponentScan所在类的package进行扫描;所以,springboot的启动类最好放在root package下,这样就能扫描所有的bean
2) @EnableAutoConfiguration是一个复合注解, 也是借助@Import 将复合自动配置条件的bean加载到IOC容器中,具体会扫描classpatch下所有的spring.factories文件获取其中的自动配置类,根据@EnableConfigurationProperties 注解为配置类初始化属性

二 起步依赖

使用某个依赖,会把相关所有依赖都自动引入,且这些组合的依赖都是经过测试验证的。

当出现起步依赖传递过程有冲突,解决办法:覆盖掉要传递的依赖,如下:

<dependency>
  <groupId>****</groupId>
  <artifactId>****</artifactId>

  //排除掉传递的依赖
  <exclusions>
    <exclusion>
       <groupId>com.fasterxml.jackson.core</groupId>
    </exclusion>
  </exclusions>
</dependency>

排除掉传递依赖的版本,如果想引入其他版本2.4.3的依赖,可以直接在pom.xml中声明,如下:

<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-databind</artifactId>
  <version>2.4.3</version>
</dependency>

三 自动配置

springboot把常用的配置类统一维护起来,通过@EnableAutoConfiguration注解来实现加载所有配置类。

自动配置原理参考: https://blog.csdn.net/u014745069/article/details/83820511

自动配置原理总结:
Spring Boot启动的时候会通过@EnableAutoConfiguration注解找到META-INF/spring.factories配置文件中的所有自动配置类,并对其进行加载,而这些自动配置类都是以AutoConfiguration结尾来命名的,它实际上就是一个JavaConfig形式的Spring容 器配置类,它能通过以Properties结尾命名的类中取得在全局配置文件中配置的属性如:server.port,而XxxxProperties类是通过@ConfigurationProperties注解与全局配置文件中对应的属性进行绑定的。在自动配置类中使用@EnableConfigurationProperties把绑定到XxxxProperties类的bean导入到Spring容器中。

四 自定义配置

有两种方式实现自定义配置,一个是对原来自动配置的覆盖,一个是新写一个属性文件配置类作为一个新配置类来单独使用。

1. 覆盖springboot自动配置

自动配置类有注解@ConditionalOnMissingBean(JdbcOperations.class) 如果想覆盖这个配置类,可以增加一个应用配置类去配置JdbcOperations的Bean因为Spring Boot的设计是加载应用级配置,随后再考虑自动配置类, 自动配置类在加载的时候发现JdbcOperations已经存在Bean就不会在实例化了,从而实现了覆盖的目的。

注意并不是所有的方式都可以使用自定义配置类来覆盖自动配置类,也可以使用外置属性文件新生成一个配置类来单独使用。

2.属性文件外置配置

1)可以使用@ConfigurationProperties 为Bean 中属性初始化

从技术上来说,单独的@ConfigurationProperties注解不会生效,除非先向Spring配置类添加@EnableConfigurationProperties注解。 但通常springboot全部自动配置类
都已经加上了@EnableConfigurationProperties注解。

自定义配置可以使用@Bean结合使其生效,如下:(此方式推荐)

@Bean(name = "baseConfigDataSource")
    @ConfigurationProperties(prefix = "datasource.baseConfig")
    public DataSource getBaseConfigDataSource() {
       return new DruidDataSource();
     }

或者和@Component 注解一起使用,被扫描到后就会被注入到容器中,如下:
在这里插入图片描述
2)区分不同环境的配置可以使用Profile
springboot可以为不同环境配置不同的配置文件, 遵循applicatoin-{profile}.properties ,例如: dev环境的就是 application-dev.properties

激活profile有3种方式:

a 选择不同环境的时候,可以在命令行激活profile,例如:
java -jar *.jar  --spring.profiles.active=dev

b 在appliction.properties中激活profile,例如:
spring.profiles.active=dev

c 也可以配置环境变量方式实现,例如:
SPRING_PROFILES_ACTIVE=dev

五 springboot中配置文件的优先级和加载顺序

1 加载application.properties配置文件顺序规则

SpringApplication会从以下路径加载所有的application.properties文件:

1)classpath:/(classpath根目录)
2)classpath:/config/(classpath下的config目录)
3)file:./(当前目录)
4)file:./config/(当前目录下的config文件夹)

加载配置文件优先级由上至下。
注意:
优先级是指扫描优先级路径的顺序,最后加载的配置会覆盖掉优先加载的相同配置。例如classpath:/config/和file:./config/都存在配置文件,那么加载过程会加载classpath:/config/路径下配置文件的所有属性,然后再加载file:./config/路径下配置文件的属性并替换已有的属性。此外,如果你在相同优先级位置同时有application.properties和application.yml,那么application.yml里面的属性就会覆盖application.properties里的属性。

如果你不想使用application.properties的格式命名配置文件,那么可以通过环境变量spring.config.name来设置文件名称,例如:
$ java -jar myproject.jar --spring.config.name=zhy-sys.properties此时,要加载的配置文件名为zhy-sys.properties。除了修改名称。

还可以使用 spring.config.location 来添加要加载的路径。例如我们以这个命令启动JVM:
$ java -jar myapp.jar --spring.config.location=classpath:/myconfig/,file:./myconfig/
那么加载application.properties文件的路径以及优先级会变为:

1)classpath:/
2)classpath:/config/
3)file:./
4)file:./config/
5)classpath:/myconfig/
6)file:./myconfig/

总结:
springboot的加载顺序,先classpath下 / /config/ 在加载当前目录的 ./ ./config/, 后加载的相同配置会覆盖掉优先加载的配置。
(由内而外加载application.properties,后加载的覆盖之前的加载配置,一般把git配置仓库中的配置最后加载,这样运维只需要改动此配置就能全局生效)

2 application.yml 和bootStrap.yml加载顺序

若application.yml 和bootStrap.yml 在同一目录下,则bootStrap.yml 的加载顺序要高于application.yml,即bootStrap.yml 会优先被加载。

原理:
bootstrap.yml 用于应用程序上下文的引导阶段。
bootstrap.yml 由父Spring ApplicationContext加载。
•bootstrap.yml 可以理解成系统级别的一些参数配置,这些参数一般是不会变动的。
•application.yml 可以用来定义应用级别的,如果搭配 spring-cloud-config 使用 application.yml 里面定义的文件可以实现动态替换。

六 启动原理

SpringApplication.run(FundRepaymentBoot.class, args); 执行的过程如下:
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值