210727springboot官方文档open

文档

Getting started

默认情况下,Maven从src/main/java,因此您需要创建该目录结构,然后添加一个名为src/main/Java/MyAPPLication。Java包含以下代码:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@EnableAutoConfiguration
public class MyApplication {

    @RequestMapping("/")
    String home() {
        return "Hello World!";
    }

    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }

}

Using Spring Boot

1.构建系统

使用Maven或gradle构建系统,它们都支持依赖项管理,列举了许多应用程序启动器(starter)

2. 构建代码

当一个类不包含package声明,则被认为在默认包中(不推荐),会出问题。因为@ComponentScan,@ConfigurationPropertiesScan,@EntityScan,@SpringBootApplication注解是从每一个jar的每一个类读的

@SpringBootApplication放在主类

@SpringBootApplication
public class MyApplication {

    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }

}

典型布局
在这里插入图片描述

3.配置类

虽然可以用XML,不过还是用一个单独的带@configuration注解的类更好。定义main方法的类就可以拿来配置configuration

不用把所有的@configuration放在一个类中,@import注解可用于导入额外配置类,或通过@ComponentScan自动选取所有Spring组件包括@Configuration类
如果非要基于XML配置,可以先从@Configuration类开始,然后使用@ImportResource注解加载XML配置文件
只能添加一个@SpringBootApplication或@EnableAutoConfiguration到主@Configuration中

4.自动配置

自动配置是非侵入性的,定义自己的配置应可以替换自动配置的特定部分,如自己添加DataSource bean后,默认的嵌入式数据库就退避。
禁用特定的自动配置类

@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
public class MyApplication {
}

不在类路径上的类用excludeName注解指定完全的限定名称。也可以使用spring.autoconfigure.exclude属性控制要排除的自动配置类列表

5.Spring beans和依赖注入

通过构造函数注入来连接依赖项并通过@ComponentScan查找bean
所有应用程序组件(@Component,@Service,@Repository,@Controller)会自动注册成为springbean
示例:@service Bean使用构造函数注入来获取所需的RiskAssessor Bean。标为final意思不能随后更改

@Service
public class MyAccountService implements AccountService {

    private final RiskAssessor riskAssessor;

    public MyAccountService(RiskAssessor riskAssessor) {
        this.riskAssessor = riskAssessor;
    }

    // ...

}

具有多个构造函数的bean,就要用@Autowired注解标记希望spring使用的构造函数

@Service
public class MyAccountService implements AccountService {

    private final RiskAssessor riskAssessor;

    private final PrintStream out;

    @Autowired
    public MyAccountService(RiskAssessor riskAssessor) {
        this.riskAssessor = riskAssessor;
        this.out = System.out;
    }

    public MyAccountService(RiskAssessor riskAssessor, PrintStream out) {
        this.riskAssessor = riskAssessor;
        this.out = out;
    }

    // ...
}

6.使用@SpringBootApplication注解

@SpringBootApplication=@EnableAutoConfiguration(启动Spring Boot的自动配置机制)
+@ComponentScan(@Component在应用程序所在包上启动扫描)
+@SpringBootConfiguration(允许在上下文注册额外的bean或导入额外的配置类)
可以做单个替换,如不想启动组件扫描时

@SpringBootConfiguration(proxyBeanMethods = false)
@EnableAutoConfiguration
@Import({ SomeConfiguration.class, AnotherConfiguration.class })
public class MyApplication {

    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }

}

这样就不会监测@Component和@CofigurationProperties注解之外的类

7.运行

1.从IDE导入maven项目
2.打包用java -jar运行
3.使用maven插件 mvn spring-boot:run
使用gradle,JVM热插拔

8.开发者工具

通过依赖可将spring-boot-devtools模块包含到任何项目中以提供额外的开发功能

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <optional>true</optional>
    </dependency>
</dependencies>

运行完全打包的应用程序时会自动禁用开发者工具

Spring Boot Features

1. Spring Application

启动spring应用程序main()可以委托给静态SpringApplication.run方法

@SpringBootApplication
public class MyApplication {

    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }

}

启动应用后可以看见info,可以设置显示的级别,显示其他日志记录,或关闭日志信息
(spring.main.log-startup-info)
延迟初始化:延迟后bean将在需要时创建而非程序启动期间创建,但要注意JVM是否有内存容纳所有bean。
自定义banner:打印ascii画
SpringApplicationBuilder构建器可以让要链接的多个方法调用,包括parent和child来创建层次结构
侦听器:某些事件在ApplicationContext创建之前触发,故不能将这些事件注册为Bean,可以使用侦听器注册如SpringApplication.addListeners(…​)方法或SpringApplicationBuilder.listeners(…​)方法。也可以自动注册。
应用程序事件发送顺序(1.7)
某些事件在ApplicationContext创建之前就触发了,所以不能将侦听器作为bean注册在这些事件上。可以用其他方法注册(addListeners)
网络环境:mvc/webflux
访问应用程序参数:注入给一个ApplicationArguments bean
启动后运行特定代码: ApplicationRunner 或 CommandLineRunner,如需按顺序执行使用order
退出:bean退出时调用ExitCodeGenerator可在SpringApplication.exit()时传递状态码
管理:admin.enabled
启动跟踪:可以使用ApplicationStartup跟踪应用程序启动顺序

2.外化配置

将配置外部化可以在不同环境使用相同的应用程序代码,外部配置源包括 Java 属性文件、YAML 文件、环境变量和命令行参数。
优先级由低到高

默认属性(由 setting 指定SpringApplication.setDefaultProperties)。

@PropertySource你的@Configuration类的注释。请注意,Environment在刷新应用程序上下文之前,不会将此类属性源添加到。现在配置某些属性(例如在刷新开始之前读取的logging.*和)为时已晚spring.main.*。

配置数据(如application.properties文件)

一RandomValuePropertySource,只有在拥有性能random.*。

操作系统环境变量。

Java 系统属性 ( System.getProperties())JNDI 属性来自java:comp/env.

ServletContext 初始化参数。

ServletConfig 初始化参数。

来自SPRING_APPLICATION_JSON(嵌入在环境变量或系统属性中的内联 JSON)的属性。

命令行参数。

properties属性在您的测试中。可用于测试应用程序的特定部分@SpringBootTest的测试注释。

@TestPropertySource 测试中的注释。

$HOME/.config/spring-boot当 devtools 处于活动状态时,目录中的Devtools 全局设置属性。

配置数据文件

打包在 jar 中的应用程序属性(application.properties和 YAML 变体)。

打包在 jar 中的特定于配置文件的应用程序属性(application-{profile}.properties和 YAML 变体)。

打包 jar 之外的应用程序属性(application.properties和 YAML 变体)。

打包的 jar(application-{profile}.properties和 YAML 变体)之外的特定于配置文件的应用程序属性。

.properties>.yml

2.1命令行属性(–server.port=9000)转换为property,优先于基于文件的属性源
2.2一组属性可编码为一个json,以命令行、json文件等方式。
尽管null来自 JSON 的值将添加到生成的属性源中,但PropertySourcesPropertyResolver会将null属性视为缺失值。这意味着 JSON 无法使用null值覆盖来自低阶属性源的属性。
2.3spring启动就会自动查找加载application.properties和application.yaml,查找顺序:
在这里插入图片描述
可从多个文件读取配置

$ java -jar myproject.jar --spring.config.location=\
    optional:classpath:/default.properties,\
    optional:classpath:/override.properties

同个目录下的配置文件可以用通配符,如/config/redis/application.properties和/config/mysql/application.properties
通配符位置为config/*/, 将导致两个文件都被处理。默认会搜索config/*的jar之外的所有子目录。通配符位置必须仅包含一个*并以*/目录结尾或*/文件搜索位置结尾。
配置文件不存在时,加上optional前缀也可启动,不加就会抛出ConfigDataLocationNotFoundException且不启动
忽略所有ConfigDataLocationNotFoundException:spring.config.on-not-found属性设置为ignore
无扩展名导入:将扩展提示放在方括号中
属性占位符:${name}属性占位符语法可用于值内的任何地方,如设置app.description为“MyApp is a Spring Boot application”:

app.name=MyApp
app.description=${app.name} is a Spring Boot application

YAML文件会被展平,YamlPropertiesFactoryBean负载YAML作为Properties,YamlMapFactoryBean负载YAML作为Map。
配置随机值:RandomValuePropertySource
类型安全配置属性:bean属性绑定,构造函数绑定,@ConfigurationProperties注释(这个注释可用于第三方组件的属性绑定)
绑定map需要用括号表示
环境变量绑定:点替换为下划线,删除所有破折号,转为大写
属性转换:绑定到@ConfigurationProperties bean时会将外部应用程序强制转为正确的类型,也可自定义转换。
可以转换时间,数据大小
验证:使用@Validated注解,或通过validator创建一个bean来添加自定义configurationPropertiesValidator,该bean方法应为static,静态方法创建bean无需实例化configuration避免早期实例化导致的问题。

Profiles

提供一种分离应用程序配置部分,使其仅在某些环境种可用的方法。

@Configuration(proxyBeanMethods = false)
@Profile("production")
public class ProductionConfiguration {

    // ...

}

profile可通过命令行指定,写在.properties(.yml)中,修改spring.profiles.default属性,定义配置文件(组),用setAdditionalProfiles(…​)方法

日志

2019-03-05 10:57:51.112 INFO 45469 — [main] org.apache.catalina.core.StandardEngine:启动 Servlet 引擎:Apache Tomcat/7.0.52
日期时间(毫秒精度) 日志级别(ERROR,WARN,INFO,DEBUG,或TRACE),进程标识 ,—(后面是实际日志消息),[线程名称](可能会被截断),记录器名称(源类名称,通常缩写):日志消息
默认只输出到控制台,输出到日志文件需要设置logging.file.nameorlogging.file.path属性,日志文件大小、日志级别都可以设置。
可以在定义组后直接修改一组(如tomcat)的日志级别

国际化

可以设置message的语言

json

spring boor提供了三个json映射库:Gson,Jackson,JSON-B,其中Jackson是默认的

web应用程序

大部分web应用程序通过spring-boot-starter-web快速启动运行
Spring MVC 允许您创建特殊的bean@Controller或@RestControllerbean 来处理传入的 HTTP 请求。控制器中的方法通过使用@RequestMapping注释映射到 HTTP
spring boot为spring mvc提供了自动配置
基于springbootmvc增加自定义mvc:添加自定义@Configuration的类型类,WebMvcConfigurer但不添加 @EnableWebMvc。
完全控制spring mvc就添加注解@EnableWebMvc
HttpMessageConverters:自定义http请求转换器
Json序列化和反序列化:使用@JsonComponent注解直接在JsonSerializer、JsonDeserializer或KeyDeserializer实现。所有的JsonComponent bean都会自动注册Jackson,且因为Component是JsonComponent的元继承,因此会自动扫描。
静态内容:来自类路径/static(或/public或/resources或/META-INF/resources)的目录或来自ServletContext
欢迎页面:先在静态内容位置找index.html,没找到就自己生成一个模板
路径匹配默认禁用后缀模式匹配,用查询参数来实现请求,如将"GET /projects/spring-boot?format=json"映射到@GetMapping("/projects/spring-boot")
模板引擎:spring mvc支持多种模板技术,spring boot包括对多个模板引擎的自动配置支持。避免使用JSP,和嵌入式servlet容器一起使用有限制。默认模板引擎会自动从src/main/resources/templates加载
错误处理:spring boot提供一个/error以合理方式处理所有错误映射,生成包含错误详细信息、HTTP 状态和异常消息的 JSON 响应的页面。自定义错误处理需要实现ErrorController并注册该类型的bean,或添加一个ErrorAttributes类的bean在现有机制上仅替换内容
自定义错误页面:静态页面或模板构建的,添加到error目录,文件名为确切的状态代码或系列掩码
404
在这里插入图片描述
5xx
在这里插入图片描述
不使用spring mvc就用ErrorPageRegistrar接口直接注册错误页
spring boot为超文本的spring HATEOAS提供自动配置
CORS:跨域资源共享,允许浏览器向跨域服务器发出XMLHttpRequest请求从而克服了AJAX只能同源使用的限制
spring mvc可以通过自定义方法注册bean来定义全局CORS配置

spring webflux
新的响应式web框架,与mvc不同的是,不需要servlet API,完全异步,非阻塞
两种风格:函数式,基于注解(非常接近MVC)
Spring WebFlux 使用HttpMessageReader和HttpMessageWriter接口来转换 HTTP 请求和响应,可以创建自定义CodecCustomizer组件添加或自定义编解码器。
静态内容:类路径中名为/static(或/public或/resources或/META-INF/resources)的目录
欢迎页面:先在静态内容位置找index.html,没找到就自己生成一个模板
模板引擎:默认支持的几种会从src/main/resources/templates自动加载(比mvc少个Groovy)
错误处理:错误处理和自定义错误页面同mvc
网页过滤器:webflux提供一个webfilter实现过滤http请求-响应交换的接口。

嵌入式Servlet容器支持
spring boot包括对Tomcat、Jetty和Undertow服务器的支持,通过starter获取完全配置的实例,默认端口8080。使用嵌入式servlet容器时,通过spring bean或扫描servlet组件注册servlet、过滤器和所有侦听器(如HttpSessionListener)。
servlet上下文初始化要注册一个实现org.springframework.boot.web.servlet.ServletContextInitializer接口的 bean。
ServletWebServerApplicationContext是一种特殊类型WebApplicationContext,通过搜索单个ServletWebServerFactorybean来引导自身,通常会自动配置。
可以通过application.properties或application.yaml文件自定义属性配置servlet容器。
Spring Boot 包括对以下嵌入式反应式 Web 服务器的支持:Reactor Netty、Tomcat、Jetty 和 Undertow。
当自动配置 Reactor Netty 或 Jetty 服务器时,Spring Boot 将创建特定的 bean 来为服务器实例提供 HTTP 资源:ReactorResourceFactory或JettyResourceFactory。开发人员可以通过提供自定义ReactorResourceFactory或JettyResourceFactorybean来覆盖 Jetty 和 Reactor Netty 的资源配置。

8.优雅关机

正常关机
server.shutdown=graceful
超时时间
spring.lifecycle.timeout-per-shutdown-phase=20s
Jetty、Reactor Netty 和 Tomcat 将停止接受网络层的请求。Undertow 将接受请求,但会立即以服务不可用 (503) 响应进行响应。

9.RSocket

RSocket是一种用于字节流传输的二进制协议。它通过在单个连接上传递异步消息来启用对称交互模型。Spring Boot 自动配置一个RSocketStrategiesbean,该bean 提供编码和解码 RSocket 有效负载所需的所有基础设施。

10.安全

spring security在类路径上则默认情况下web应用程序是安全的。添加方法级别的安全性:@EnableGlobalMethodSecurity
默认UserDetailsService只有一个用户。用户名是user,密码是随机的,在应用程序启动时打印在INFO级别
好几个管mvc安全的,也可以自定义覆盖访问规则
webflux也可以
有spring-security-oauth2-client可以利用自动配置来设置,在这个前缀下注册多个oauth2客户端和程序
由于 Spring Boot 依赖于 Spring Security 的默认设置,CSRF 保护默认开启。这意味着需要POST(关闭和记录器端点)的执行器端点,PUT或者DELETE在使用默认安全配置时将收到 403 禁止错误。

11.嵌入式SQL数据库

不提供持久存储,启动时填充,应用程序结束时丢弃数据。
spring.datasource.*可以直接配置数据源
为了DataSource创建一个池,我们需要能够验证一个有效的Driver类是否可用.
SpringJdbcTemplate和NamedParameterJdbcTemplate类是自动配置的,您可以将@Autowire它们直接添加到您自己的 bean 中.
jpa:可让您将对象“映射”到关系数据库。该spring-boot-starter-data-jpaPOM提供了上手的快捷方式
Hibernate:最流行的 JPA 实现之一。
Spring Data JPA:帮助您实现基于 JPA 的存储库。
Spring ORM:来自 Spring 框架的核心 ORM 支持。

H2控制台默认路径:/h2-console

12.nosql

为多种nosql提供自动bean支持

13.缓存

缓存不提供实际存储,而是依赖于cache和cachemanager接口具体化的抽象

14.消息传递

Spring Boot 还为RabbitTemplate和 RabbitMQ提供了自动配置选项。Spring WebSocket 本身就包含对 STOMP 消息传递的支持,而 Spring Boot 通过启动器和少量自动配置对此提供支持。Spring Boot 还支持 Apache Kafka。

15.RestTemplate调用REST服务

16.WebClient 调用 REST 服务

17.验证

bean方法可以使用javax.validation对其参数或返回值的约束进行注释,注释是@Validated

//以下服务触发第一个参数的验证,确保其大小在 8 到 10 之间:
@Service
@Validated
public class MyBean {
    public Archive findByCodeAndAuthor(@Size(min = 8, max = 10) String code, Author author) {
        return ...
    }
}

18.发送电子邮件

JavaMailSender抽象接口,springboot提供自动配置及启动模块

19.JTA的分布式事务

atomikos:可以使用spring-boot-starter-jta-atomikosstarter 拉入适当的 Atomikos库。
JAVA EE托管事务管理器:如果将 Spring Boot 应用程序打包为一个war或ear文件并将其部署到 Java EE 应用程序服务器,则可以使用应用程序服务器的内置事务管理器。

20.Hazelcast

21.Quartz

Quartz可用则自动通过SchedulerFactoryBean抽象配置一个Scheduler
以下类型的 Bean 会被自动选取并与 关联Scheduler:
JobDetail: 定义一个特定的 Job。 JobDetail可以使用JobBuilderAPI构建实例。
Calendar.
Trigger:定义何时触发特定作业。
可以基于JDBC存储

22.任务执行和调度

自动配置了一个ThreadPoolTaskExecutor可以自动关联到异步(@EnableAsync)任务执行和spring mvc异步处理请求
可以修改线程池设置。

23.spring集成

Spring Boot 为使用Spring Integration提供了多种便利,包括spring-boot-starter-integration“Starter”,它通过@EnableIntegration注解进行初始化。

26. 测试

@SpringBootTest不会启动服务器
@Transactional在每个测试方法结束时会回滚事务
@MockBean可用模拟组件,来模拟不可用的远程服务,或某些难以触发的故障

29.自动配置@Conditional

Actuator

通过spring security可以使用审计框架发布事件(如身份验证成功/失败/访问被拒绝)
可以跟踪http请求响应。
可以对过程进行监控,激活写入pid文件的侦听器

部署spring boot 应用程序

部署到jar容器
部署到云端cloud foundry

cli命令行运行groovy脚本

可以根据注解抓取需要的库,也可以自定义依赖管理

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值