Springboot 总结

SpringBoot基于Spring4.0设计,不仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程。另外SpringBoot通过集成大量的框架使得依赖包的版本冲突,以及引用的不稳定性等问题得到了很好的解决。

SpringBoot的特性:

1)可以创建独立的Spring应用程序,并且基于其Maven或Gradle插件,可以创建可执行的JARs和WARs;
2)内嵌Tomcat或Jetty等Servlet容器;
3)提供自动配置的“starter”项目对象模型(POMS)以简化Maven配置;
4)尽可能自动配置Spring容器;
5)提供准备好的特性,如指标、健康检查和外部化配置;
6)绝对没有代码生成,不需要XML配置

 来源 Spring Boot_百度百科

1.开启springboot特性

1)继承 spring-boot-starter-parent

2)导入  spring-boot-dependencies

2.bootstrap vs application

boostrap 被父ApplicationContext加载,加载顺序优先与application[使用ApplicationContext加载],boostrap中配置的信息无法被修改覆盖【常用于Springcloud配置中心,加解密秘钥等配置】,application中的配置信息可以被修改覆盖【用于项目的自动化配置】。

3.核心注解

@SpringBootApplication(启动相关) = @SpringBootConfiguration(@Configuration) + @EnableAutoConfiguration + @ComponentScan(可无 手动加载Bean)


@SpringBootConfiguration     配置加载注解
@EnableAutoConfiguration    自动化配置注解
@ComponentScan                 扫描+加载Bean

@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 {

}

4.自动化配置流程

@EnableAutoConfiguration
=> @Import({AutoConfigurationImportSelector.class})
=> AutoConfigurationImportSelector.selectImports
=> AutoConfigurationImportSelector.getAutoConfigurationEntry
=> AutoConfigurationImportSelector.getCandidateConfigurations
=> SpringFactoriesLoader.loadFactoryNames        扫描具有META-INF/spring.factories包

 MybatisPlus spring.factories 示例

# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
  com.baomidou.mybatisplus.autoconfigure.MybatisPlusLanguageDriverAutoConfiguration,\
  com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration

5.容器配置

内置tomcat容器,Tomcat历史悠久的Appache重量级服务器,jetty、undertow新生代轻量级服务器。在负载不大的情况jetty优于undertow与tomcat,随着负载增大undertow与tomcat的稳定性强于jetty【吞吐量、成功率】。

5.1集成undertow

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <!-- 移除 默认Tomcat -->
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<!-- 添加 Undertow -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-undertow</artifactId>
</dependency>

<!-- 在springboot2.x之后的版本需要补充依赖 -->
<dependency>
	<groupId>io.undertow</groupId>
	<artifactId>undertow-core</artifactId>
	<version>2.0.16.Final</version>
</dependency>

<dependency>
	<groupId>io.undertow</groupId>
	<artifactId>undertow-servlet</artifactId>
	<version>2.0.16.Final</version>
</dependency>

<dependency>
	<groupId>io.undertow</groupId>
	<artifactId>undertow-websockets-jsr</artifactId>
	<version>2.0.16.Final</version>
</dependency>
server:
  undertow:
    # 设置IO线程数, 它主要执行非阻塞的任务,它们会负责多个连接, 默认设置每个CPU核心一个线程
    # 不要设置过大,如果过大,启动项目会报错:打开文件数过多
    io-threads: 4
    # 阻塞任务线程池, 当执行类似servlet请求阻塞IO操作, undertow会从这个线程池中取得线程
    # 它的值设置取决于系统线程执行任务的阻塞系数,默认值是IO线程数*8
    worker-threads: 20
    # 以下的配置会影响buffer,这些buffer会用于服务器连接的IO操作,有点类似netty的池化内存管理
    # 每块buffer的空间大小,越小的空间被利用越充分,不要设置太大,以免影响其他应用,合适即可
    buffer-size: 1024
    # 每个区分配的buffer数量 , 所以pool的大小是buffer-size * buffers-per-region
    # 是否分配的直接内存
    direct-buffers: true
  port: 8008

6.@Value注解使用

6.1 yml 配置文件

value:
    integer: 1
    long: 10000
    float: 3.14
    double: 3.14159
    boolean: true
    string: adcd
    array: 1,2,3
    list: 1,2,3
    set: 1,2,3
    map: {name:"zha", age:18}

6.2 Java 代码块

@Value("${value.integer}")
private Integer intValue;

@Value("${value.long}")
private Long longValue;

@Value("${value.float}")
private Float floatValue;

@Value("${value.double}")
private Double doubleValue;

@Value("${value.boolean}")
private Boolean booleanValue;

@Value("${value.string}")
private String stringValue;

@Value("#{'$value.array}'.split(',')}")
private String[] values;

@Value("#{'${value.list}'.split(',')}")
private List<String> valueList;

@Value("#{'${value.set}'.split(',')}")
private Set<String> valueSet;

@Value("#{${value.map}}")
private Map<String, Object> valueMap;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值