SpringBoot----01.SpringBoot基本配置
一、spring-boot-starter-parent
当我们通过 spring initializr 创建springboot项目时都会发现 spring-boot-starter-parent 的身影,那么他到底是干啥的呢?
这是 Spring Boot 的父级依赖,这样当前的项目就是 Spring Boot 项目了。spring-boot-starter-parent 是一个特殊的 starter,它用来提供相关的 Maven 默认依赖。使用它之后,常用的包依赖可以省去 version 标签。先来看 parent 的基本功能有哪些?
- Java的默认版本为1.8
- 编码格式默认为 UTF-8
- 自动的资源过滤和插件配置
- 执行打包操作的配置
- 继承自 spring-boot-dependencies,这个里边定义了依赖的版本,也正是因为继承了这个依赖,所以我们在写依赖时才不需要写版本号。
- 针对 application.properties 和 application.yml 的资源过滤,包括通过 profile 定义的不同环境的配置文件,例如 application-dev.properties 和 application-dev.yml。
但是并非所有的公司都需要这个 parent ,有的时候,公司里边会有自己定义的 parent ,我们的 Spring Boot 项目要继承自公司内部的 parent ,这个时候该怎么办呢?一个简单的办法就是我们自行定义 dependencyManagement 节点,然后在里边定义好版本号,再接下来在引用依赖时也就不用写版本号了,像下面这样:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.2.2.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
这样写之后,依赖的版本号问题虽然解决了,但是关于打包的插件、编译的 JDK 版本、文件的编码格式等等这些配置,在没有 parent 的时候,这些统统要自己去配置。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>11</source> <!-- 源代码使用的JDK版本 -->
<target>11</target> <!-- 需要生成的目标class文件的编译版本 -->
</configuration>
</plugin>
</plugins>
</build>
maven是个项目管理工具,如果我们不告诉它我们的代码要使用什么样的jdk版本编译的话,它就会用maven-compiler-plugin默认的jdk版本来进行处理,这样就容易出现版本不匹配,以至于可能导致编译不通过的问题。maven的默认编译使用的jdk版本貌似很低,使用maven-compiler-plugin插件可以指定项目源码的jdk版本,编译后的jdk版本,以及编码。
二、@SpringBootApplication
之前我们使用的是3个注解注解他们的main类。分别是@SpringBootConfiguration(这个注解的作用与@Configuration作用相同),@EnableAutoConfiguration,@ComponentScan。由于这些注解一般都是一起使用,spring boot提供了一个统一的注解@SpringBootApplication。
@SpringBootApplication = (默认属性)@Configuration + @EnableAutoConfiguration + @ComponentScan。
- @Configuration:提到@Configuration就要提到他的搭档@Bean。使用这两个注解就可以创建一个简单的spring配置类,可以用来替代相应的xml配置文件。
- @EnableAutoConfiguration:能够自动配置spring的上下文,试图猜测和配置你想要的bean类,通常会自动根据你的类路径和你的bean定义自动配置。
- 使用过spring框架的小伙伴都知道,spring里有四大注解:@Component, @Repository, @Service, @Controller用来定义一个bean。@ComponentScan注解就是用来自动扫描指定包下被这些注解标识的类,最终生成ioc容器里的bean。
三、banner
我们只需要在 springboot 项目的 resources 文件夹下面创建一个 banner.txt 文件,springboot 启动的时候会去加载这个文件。
这里有几个定制banner的网站,文字、图片都可以秀起来,怎么秀就看你的骚操作了:
http://patorjk.com/software/taag
http://www.network-science.de/ascii/
http://www.degraeve.com/img2txt.php
.-' _..`.
/ .'_.'.'
| .' (.)`.
;' ,_ `.
.--.__________.' ; `.;-'
| ./ /
| | /
`..'`-._ _____, ..'
/ | | | |\ \
/ /| | | | \ \
/ / | | | | \ \
/_/ |_| |_| \_\
|__\ |__\ |__\ |__\
四、WEB容器配置
在 springboot 项目中,可以内置Tomcat、Jetty、Undertow、Netty等容器,当添加了 spring-boot-starter-web
依赖之后,会默认使用 Tomcat 作为 web 容器。当我们需要对Tomcat进行配置的时候可以在 application.properties 配置文件中配置。
server.port=8084
server.error.path=/error
server.servlet.session.timeout=30m
server.servlet.context-path=/test01
server.tomcat.uri-encoding=utf-8
server.tomcat.max-threads=200
四、HTTPS配置
在JDK\bin下通过命令行生成数字证书,然后将文件复制到项目的根目录:
keytool -genkey -alias tomcathttps -keyalg RSA -keysize 2048 -keystore zhang.p12 -validity 365
然后在application.properties中配置
server.ssl.key-store=zhang.p12
server.ssl.key-alias=tomcathttps
server.ssl.key-store-password=123456
五、Jetty
Jetty 是一个开源的servlet容器,它为基于Java的web容器,例如JSP和servlet提供运行环境。Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布。开发人员可以将Jetty容器实例化成一个对象,可以迅速为一些独立运行(stand-alone)的Java应用提供网络和web连接。
特点:
- 异步的 Servlet,支持更高的并发量。
- 模块化的设计,更灵活,更容易定制,也意味着更高的资源利用率。
- 在面对大量长连接的业务场景下,Jetty 默认采用的 NIO 模型是更好的选择。
- 将jetty嵌入到应用中,使一个普通应用可以快速支持 http 服务。
配置 Jetty
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
</dependencies>
六、Undertow
Undertow 是红帽公司开发的一款基于 NIO 的高性能 Web 嵌入式服务器。
特点:
- 轻量级:它是一个 Web 服务器,但不像传统的 Web 服务器有容器概念,它由两个核心 Jar 包组成,加载一个 Web 应用可以小于 10MB 内存
- Servlet3.1 支持:它提供了对 Servlet3.1 的支持
- WebSocket 支持:对 Web Socket 完全支持,用以满足 Web 应用巨大数量的客户端
- 嵌套性:它不需要容器,只需通过 API 即可快速搭建 Web 服务器
配置 Undertow
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
</dependencies>
七、application.properties
在使用 Spring Boot 的过程中,除了可以在 pom.xml 中配置一些内容外,一些项目相关的配置也可以在 application.properties 中通过配置来完成。
配置文件4个位置及优先级高→低:
- 项目的根目录下的 config 文件夹中
- 项目根目录
- classpath 下的 config 文件夹中
- classpath 下
八、Springboot的常规属性配置和类型安全配置
- 类型常规配置:
通过在properties文件中注入键值对的方式,在java代码中通过@Value注解注入值 - 类型安全配置:
将要注入的属性包装成一个类,给类加上注解:@ConfigrationProperties(prefix="author")该注解用于绑定属性。prefix用来选择属性的前缀
九、YAML
YAML 是 "YAML Ain't markup language" 的缩写,是一种对人类设计友好的数据序列化语言,可以很好地与其它编程语言协同完成日常任务。它是JSON的一个严格超集。
基本规则:
- 文件名以.yaml(.yml)结尾
- 大小写敏感
- 不允许使用Tab。由于Tab的支持性不够普通,因此使用空格。
十、Profile
在项目的开发中,有些配置文件在开发、测试或者生产等不同环境中可能是不同的,例如数据库连接、redis的配置等等。那我们如何在不同环境中自动实现配置的切换呢?Spring给我们提供了profiles机制,下面看看在Spring Boot中是如何使用Profiles功能的。
激活指定profile:
- 我们在首先在Resource目录下新建两个配置文件,分别命名为application-dev.properties以及application-prod.properties。
- 配置 application.properties :
spring.profiles.active=dev