Spring boot 文章list

基础项目构建

Spring Boot开启的2种方式

  1. 继承spring-boot-starter-parent项目
    在这里插入图片描述
  2. 导入spring-boot-dependencies项目依赖
    在这里插入图片描述

注意点:

  • 属性覆盖只对继承有效:Spring Boot依赖包里面的组件的版本都是和当前Spring Boot绑定的,如果要修改里面组件的版本,只需要添加如下属性覆盖即可,但这种方式只对继承有效,导入的方式无效。
    在这里插入图片描述
  • 如果导入的方式要实现版本的升级,达到上面的效果,这样也可以做到,把要升级的组件依赖放到Spring Boot之前。需要注意,要修改Spring Boot的依赖组件版本可能会造成不兼容的问题。
    在这里插入图片描述

运行Spring Boot的3种方式

  • 运行启动类的main方法。
  • 使用spring-boot:run命令。
  • 打成jar包后使用java -jar xx.jar命令。(???没有主清单属性???)

核心配置文件

  • 在 Spring Boot 中有以下两种配置文件:
    • bootstrap (.yml 或者 .properties):是应用程序的父上下文,由父 ApplicationContext 加载,比 applicaton 优先加载。 主要用于从额外的资源来加载配置信息。它们默认也不能被本地相同配置覆盖
    • application (.yml 或者 .properties):主要用于 Spring Boot 项目的自动化配置。
      • 备注:在命令行运行时,连续的两个减号–就是对application.properties中的属性值进行赋值的标识。所以,java -jar xxx.jar --server.port=8888命令,等价于我们在application.properties中添加属性server.port=8888
  • *.properties文件是key=value的形式
  • *.yml是key: value的形式

多环境配置

  • 在开发Spring Boot应用时,通常同一套程序会被应用和安装到几个不同的环境,比如:开发、测试、生产等。方法:
    • 针对各环境新建不同的配置文件application-dev.properties、application-test.properties、application-prod.properties(备注:这是命名约定的格式:application-{profile}.properties)
    • application.properties中设置spring.profiles.active=dev,就是说默认以dev环境设置
  • 更高级的用法:借助@Profile(“xxx”),xxx譬如为dev
    • @Profile注解使用范围:@Configration 和 @Component 注解的类及其方法,其中包括继承了@Component的注解:@Service、@Controller、@Repository等…
    • @Profile可接受一个或者多个参数,例如:
      在这里插入图片描述
    • @Profile 注解还可以取反,如下所示:
      在这里插入图片描述

查看自动配置报告

  • SpringBoot自动配置的实现原理阿里微服务专家手写Spring Boot 实现一个简单的自动配置模块 ???不起作用????被@ConfigurationProperties注解的文件,提示spring boot Configuration Annotation Processor not found in classpath????
    在这里插入图片描述
  • 怎么查看自己加的自动配置类有没有被加载,或者查看所有自动配置激活的和未激活的可以通过以下几种试查看。
    • mvn spring-boot:run运行的在对话框Enviroment中加入debug=true变量
    • java -jar xx.jar --debug
    • main方法运行,在VM Argumanets加入-Ddebug
    • 直接在application文件中加入debug=true
  • 控制台看到的自动配置报告信息:
    • Positive matches:已经启用的自动配置
    • Negative matches:未启用的自动配置

Spring Boot 2.x 启动全过程

小例子

Spring Boot 主类及目录结构

  • 打成可执行 jar 包后,我们来看下其中的 META-INF/MANIFEST.MF 文件。
    在这里插入图片描述
    在这里插入图片描述

Spring Boot Starters启动器

  • Starters可以理解为启动器,它包含了一系列可以集成到应用里面的依赖包,你可以一站式集成Spring及其他技术。Spring Boot官方的启动器都是以spring-boot-starter-命名的

为什么@SpringBootApplication exclude DataSourceAutoConfiguration.class

  • 因为它会读取application.properties文件的spring.datasource.*属性并自动配置单数据源。
    在这里插入图片描述

Spring Boot 最核心的 几 个注解

  • @Configuration 这是 Spring 3.0 添加的一个注解,用来代替 applicationContext.xml 配置文件,所有这个配置文件里面能做到的事情都可以通过这个注解所在类来进行注册。
  • @Bean 用来代替 XML 配置文件里面的 <bean …> 配置。
  • @ImportResource 如果有些通过类的注册方式配置不了的,可以通过这个注解引入额外的 XML 配置文件,对于有些老的配置文件无法通过 @Configuration 方式配置的非常管用。
    在这里插入图片描述
  • @Import 用来引入额外的一个或者多个 @Configuration 修饰的配置文件类。
  • @SpringBootConfiguration 这个注解就是 @Configuration 注解的变体,只是用来修饰是 Spring Boot 配置而已,或者可利于 Spring Boot 后续的扩展。
  • @ComponentScan 这是 Spring 3.1 添加的一个注解,用来代替配置文件中的 component-scan 配置,开启组件扫描,即自动扫描包路径下的 @Component 注解进行注册 bean 实例到 context 中。另外,@ComponentScans 是可重复注解,即可以配置多个,用来配置注册不同的子包。
  • @EnableAutoConfiguration 这是自 Spring Boot 诞生时添加的注解,用来提供自动配置。主要作用就是调用 Spring-Core 包里的 loadFactoryNames(),将 org.springframework.boot.autoconfigure包里的已经写好的自动配置spring.factories 加载进来。

Runner启动器

  • 如果你想在Spring Boot启动的时候运行一些特定的代码,你可以实现接口 ApplicationRunner或者 CommandLineRunner,样例
  • 如果启动的时候有多个ApplicationRunner和CommandLineRunner,想控制它们的启动顺序
    在这里插入图片描述

读取配置文件的几种方式

  • @Value注解读取方式
    -
  • @ConfigurationProperties注解读取方式
    在这里插入图片描述
  • 读取非默认的配置文件,需要加上@PropertySource
    • @PropertySource+@Value,下图有例
    • @PropertySource+@ConfigurationProperties
      在这里插入图片描述
  • Environment读取方式:以上所有加载出来的配置都可以通过Environment注入获取到
    在这里插入图片描述

配置加载顺序

  • 优先级从高到低
    • 命令行指定的参数,如 java -jar springboot.jar --name="xxxx”
    • 操作系统环境变量参数
    • JAR包外面的配置文件参数(application-{profile}.properties(YAML)
    • JAR包里面的配置文件参数(application-{profile}.properties(YAML)
    • JAR包外面的配置文件参数(application.properties(YAML)
    • JAR包里面的配置文件参数(application.properties(YAML)
    • @Configuration配置文件上 @PropertySource 注解加载的参数

Spring Boot Server容器配置

  • server.xx开头的是所有servlet容器通用的配置(譬如server.port),server.tomcat.xx开头的是tomcat特有的参数,其它类似。
  • 所有参数绑定配置类:org.springframework.boot.autoconfigure.web.ServerProperties
  • spring-boot-starter-web自动携带了tomcat依赖,但也可以替换成jetty和undertow,下面是一个替换jetty的示例。
    在这里插入图片描述

Spring Boot定制启动图案

Spring Boot整合Thymeleaf模板引擎

热部署

  • 1、引入包依赖
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
			<optional>true</optional>
		</dependency>
  • 2、自定义配置热部署
# 热部署开关,false即不启用热部署
spring.devtools.restart.enabled=true
# 指定热部署的目录
spring.devtools.restart.additional-paths=src/main/java
# 指定目录不更新
spring.devtools.restart.exclude=test
  • 3、Intellij Idea修改:
    • (1)勾上自动编译或者手动重新编译:File > Settings > Compiler>Build Project automatically
    • (2)注册:ctrl + shift + alt + / > Registry > 勾选compiler.automake.allow.when.app.running
  • 注意:
    • 1、生产环境devtools将被禁用,如java -jar方式或者自定义的类加载器等都会识别为生产环境。
    • 2、打包应用默认不会包含devtools,除非你禁用SpringBoot Maven插件的 excludeDevtools属性。

Spring Boot 发布 jar 包转为 war 包

  • Spring Boot是支持发布jar包和war的,但它推荐的是使用jar形式发布,附录:如何配置打war包
  • 备注:jar包与war包区别
    • jar包就是class文件和一些resource的压缩包
    • war包是一个web模块,其中需要包括WEB-INF,是可以直接运行的WEB模块,直接放到tomcat的webapps目录下,直接启动tomcat即可,这个包可以自动进行解压,也就是你的web目录,相当于发布了。war包根目录下一般包含有Html和Jsp文件或者包含这两种文件的目录,另外还会有一个WEB-INF目录,这个目录很重要。通常在WEB-INF目录下有一个web.xml文件和一个classes目录,web.xml是这个应用的配置文件,而classes目录下则包含编译好的Servlet类和Jsp或Servlet所依赖的其它类(如JavaBean)。通常这些所依赖的类也可以打包成JAR放到WEB-INF下的lib目录下。

Spring Boot 集成 Mybatis 实现双数据源

Spring Boot 配置随机数那些小技巧

spring boot 日志

  • spring-boot-starter启动器包含spring-boot-starter-logging启动器并集成了slf4j日志抽象(日志门面)及Logback日志框架。如果你使用starters启动器,Spring Boot将使用Logback作为默认日志框架。无论使用哪种日志框架,Spring Boot都支持配置将日志输出到控制台或者文件中。
  • 目前关于日志输出,主要有两类工具:一类是日志框架,主要用来进行日志输出的,比如输出到哪个文件,日志格式等。另一类是日志门面,主要一套通用API,用来屏蔽各个日志框架之间的差异的。所以,请不要在代码中出现任何Log4j等日志框架的API的使用,而是应该直接使用SLF4J(simple logging facade for java)这种日志门面。
  • 往resources资源目录下创建一个logback-spring.xml即可。强烈推荐使用logback-spring.xml作为文件名(日志框架就不能直接加载日志的配置项,由SpringBoot解析日志配置。可以使用SpirngBoot的高级Profile功能),因为logback.xml加载太早(直接就被日志框架识别)。

16 条实践经验

  • 在Spring Boot中,Controller和Service是默认是单例。如果你不小心,这会引入可能的并发问题。
  • Spring Boot 2.x 至少需要 JDK 8 的支持。

保护 Spring Boot 应用的安全性

你自己写的其他读书笔记

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值