SpringBoot目的是为了简化Spring应用开发中过于繁琐问题。
Spring全家桶时代:
SpringBoot→J2EE一站式解决方案
SpringCloud→分布式整体解决方案
优点
缺点:
2014年,Martin fowler
微服务:是一种架构风格,一个应用应该是一组小型服务。
每一个功能元素最终都是一个可独立替换和独立升级的软件单元。
微服务文档
spring-boot-starter-web:
spring-boot-starter:spring-boot场景启动器;帮我们导入了web模块正常运行所以来的组件;
spring Boot 将所有的功能场景都抽取出来,做成一格格的starters启动器,只需要在项目里面引入这些starter相关场景的素有依赖都会导入进来,要用什么功能就导入什么场景的启动器。
package com.ohyes.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
@SpringBootApplication
//@ComponentScan("com.ohyes.demo")
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
@SpringBootApplication
Spring Boot 应用个标注在某个类上说明这个类时主配置类,SpringBoot就应该运行这个类的main方法来启动SpringBoot应用;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
@SpringBootConfiguration
:表示这个类是SpringBoot配置类;
@Configuration
表示Spring的配置类
@EnableAutoConfiguration
:开启自动配置功能;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {
@AutoConfigurationPackage
:自动配置包
类似于@Import(AutoConfigurationPackages.Registrar.class);
Spring的底层注解@Import,给容器导入一个组件;
将主配置类所在包下的所有子包的所有组件扫描到Spring容器中;
@Import(AutoConfigurationImportSelector.class)
给容器中导入自动配置类并将其配置好
SpringBoot从类路径下的保重获取EnableAutoConfiguration指定的值,将这些值导入到自动配置类中,自动配置功能就生效了。
SpringBoot使用一个全局配置文件
配置文件的作用:修改SpringBoot 自动配置的默认值,SpringBoot在底层会直接配置好。
yml
是YAML Ain't Markup Language
的缩写,是一个标记语言,一数据为中心,比json、xml更适合做配置语言。
key: value:表示一个键值对,必须有空格;
以空格缩进来控制层级关系;只要是左对齐的一列数据,都是统一层级。
属性和值也是大小写敏感。
key: value:字面直接来写
字符串上不用加上单引号或者双引号;
双引号:不会转义字符串里面的特殊字符,特殊字符会作为本身想表示的意思;
单引号:会转义特殊字符,特殊字符最终只是一个普通字符串数据;
key:value:在下一行来写对象的属性和值得关系,注意缩进即可。
friends:
name: jim
age: 32
行内写法:
friends: {name: jim. age: 32}
@value
获取值和@ConfigurationProperties
获取值比较@ConfigurationProperties |
@value |
|
---|---|---|
功能 | 批量注入配置文件中的属性,在类上标明注解即可 | 只能一个一个的去指定值 |
松散绑定(松散语法) | 支持 | 不支持 |
SpEL | 不支持 | 支持 |
JSR303校验 | 支持 | 不支持 |
复杂类型封装 | 支持 | 不支持 |
配置文件YML还是properties他们都能获取到值;
如果在某一个业务逻辑中需要获取值的话可以用@Value
如果专门有一个JavaBean类来进行映射,最好使用@ConfigurationProperties
@PropertySource
&@ImportResource
@PropertySource
加载指定的配置文件:
@PropertySource(value = {“classpath : ABC.properties”})
@ImportResource
导入Spring的配置文件,让配置文件里面的内容生效;
SpringBoot里面没有Spring的配置文件,我们自己编写的配置文件也不能够自动识别;
想让Spring的配置文件生效需要加载进来。
SpringBoot中推荐使用@Bean来给容器中添加组件。