一、配置文件介绍
SpringBoot使用一个全局的配置文件,配置文件位置固定:src/main/resources,名称固定:application.properties 或 application.yml
注:若两种配置文件都存在(properties/yml),程序都会读取其内容,若存在同一配置项,以properties文件为准。
properties和yml文件有不同的格式要求,见下。
1. 文件语法
相关注解:@ConfigurationProperties、@Value、@PropertySource 在 1. SpringBoot 初认识 有所介绍。
1.1 properties 文件语法
- # 单行注释
- 格式:K=V
- 一行只能有一个键值对,不要写在同一行,要不然只会当作一个键值对处理
- 字符串不用标注双引号("")
- 不能有重复的键,否则会发生覆盖
- 该文件默认编码,Eclipse是ISO-8859-1,IDEA是GBK,故最好指定文件编码为UTF-8(方便注释中文不乱码)。
server.port=8080
1.2 Yaml 文件语法
在使用yaml文件时,pom文件应先引入一个依赖,否则不生效。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
格式要求
- 格式:K:空格 V,表示键值对,注意冒号与V之间有空格
- 以空格缩进控制层级关系,左对齐的一列数据都是同一层级的
- 大小写敏感
- # 表示 单行注释
- V 可以是字面量、对象、数组
server:
port:8080
# 1. V 字面量(数字、字符串、布尔)
# 字符串默认不加引号,但加上双引号(”“)会进行转义
name: "zhangshan \n lisi" # 输出:zhangsan 换行 lisi
name: 'zhangshan \n lisi' # 输出:zhangshan \n lisi
# 2. V 对象、map(键值对)
# 两种写作手法
person:
name: zhangwei
age: 18
person: {name: zhangwei, age: 18}
# 3. 数组(List、Set)
# 两种写作手法
ages:
- 18
- 19
- 20
ages: [18,19,20]
1.3 占位符(两类配置文件都适用)
${random.value} # 随机密钥
${random.uuid} # uuid
${random.int(10)} # 随机比10小的数
${random.int(10,20)} # 随机10~20 之间的数
${random.long} # 随机long类型数值
${random.int} # 随机int类型数值
server:
port:8080
${server.port} # 引用已声明过的属性值
${server.port:8081} # 引用已声明过的属性值(server.port),若不曾声明过该属性,将8081赋值该属性
2. Profile
SpringBoot 有对不同环境提供不同配置功能的支持,可以通过激活,指定参数等方式快速切换环境。
2.1 多Profile文件(推荐)
新建配置文件(properties或yml),文件名:application-{profile}.{properties|yml}。
项目一般有3种Profile:dev(开发环境)、prod(生产环境)、test(测试环境)
2.2 yml 支持多文档块模式(—分隔)
只有一个文件:application.yml
server:
port: 1111
spring:
profiles:
active: prod
---
server:
port: 2222
spring:
profiles: dev
---
server:
port: 3333
spring:
profiles: prod
---
server:
port: 4444
spring:
profiles: test
2.3 激活Profile
上面两种方式最好不要一起用,都配置,最后生效的也是多Profile文件方式。激活profile有两种方式:
# 1. 配置文件激活(yaml、properties都可以)
# yaml 配置
spring:
profiles:
active: prod
# properties 配置
spring.profiles.active=dev
# 2. 命令行激活
java -jar xxx.jar --Dspring.profiles.active=dev
二、日志
1. 日志框架
Spring Boot 提供了Java Util Logging(JDK日志),Log4J2和Logback的默认配置。Spring-boot-starter-logging 包(默认导入的日志包)采用slf4j+logback的形式构建日志框架。
日志门面 | 日志实现 |
---|---|
JCL(Jakarta Commons Logging) SLF4j(Simple Logging Facade for java) jboss-logging | Log4j JUL Log4j2 Logback |
2. 默认日志格式
2021-05-06 00:29:58.298 INFO 13204 --- [ restartedMain] o.s.b.a.w.s.WelcomePageHandlerMapping : Adding welcome page: class path resource [static/index.html]
2021-05-06 00:29:58.376 INFO 13204 --- [ restartedMain] o.s.b.d.a.OptionalLiveReloadServer : LiveReload server is running on port 35729
2021-05-06 00:29:58.412 INFO 13204 --- [ restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 1111 (http) with context path '/abc'
2021-05-06 00:29:58.432 INFO 13204 --- [ restartedMain] c.e.springone.SpringoneApplication : Started SpringoneApplication in 2.914 seconds (JVM running for 4.568)
- 日期和时间:毫秒精度,易于排序
- 日志级别:ERROR、WARN、INFO、DEBUG、TRACE
- 进程ID
- 一个 - - - 分离器来区分实际日志消息的开始
- 线程名称:用方括号括起来
- 记录器名称:通常是源类名称
- 日志消息
3. 日志使用
// 1. 获取日志记录器
Logger logger = LoggerFactory.getLogger(getClass());
// 2. 控制日志输出级别(级别从小到大,默认开启级别:INFO)
logger.trace("trace级别");
logger.debug("debug级别");
logger.info("info级别");
logger.warn("warn级别");
logger.error("error级别");
4. 日志相关配置项
见附录,下面的日志配置项有的只适用与Logback。若想使用Log4J2,请搭配相对应的xml文件。
三、web相关
1. 静态资源
SpringBoot默认情况下就做了很多自动化配置,我们只需遵守其规则即可。
静态资源文件夹见下:SpringBoot会自动扫描以下文件目录。(classpath: 等同于 /src/mian/resource)。鉴于自动扫描,所以浏览器在访问静态资源时是不需要加/static/… 的,它们都可被/**映射。
/META-INF/resources/",
"classpath:/resources/",
"classpath:/static/",
"classpath:/public/
1.1 前端框架静态资源
只需将资源(xxx.js,xx.css)放在其上文件夹下即可,但这种方式并不推荐。可以借助一网站:webjars,将其引入pom依赖即可。
1.2 欢迎页
在静态资源文件夹下放置 index.html 文件即可。
1.3 配置图标
在静态资源文件夹下放置favicon.ico文件。
在html 头部标签 中加入以下语句
<link rel="icon" th:href="@{/favicon.ico}" type="image/x-icon"/>
2. 模板引擎Thymeleaf
常见模板引擎:JSP、Velocity、Freemaker、Thymeleaf。SpringBoot 默认使用Thymeleaf
2.1 准备工作
# 引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<!-- html 标签加入xmlns:th -->
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<link rel="icon" th:href="@{/favicon.ico}" type="image/x-icon"/>
<title>Title</title>
</head>
<body>
测试Spring boot 项目
</body>
</html>
只需将html放置在classpath:/templates下,thymeleaf会自动渲染相关页面。
2.3 使用及语法
之后补充
3. 配置类(视图解析器举例)
SpringBoot在自动配置许多组件时,会先看容器中有没有用户自己配置的(@Bean、@Component)如果有就用用户配置的,如果没有,才自动配置。有些组件可以有多个就会将用户配置和默认配置相组合。
配置类前要加注解@Configuration,在方法前加@Bean注解,可将其加载至容器中,当然也可以扩展WebMvcConfigurer接口,该接口有interceptors(拦截器)formatters(格式化程序)view controllers(视图控制器),我们只需重写方法,即可生效。
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class MvcConfiguration implements WebMvcConfigurer {
// 重写addViewControllers,增加视图解析器,当访问/ 或 /index.html 会跳转页面helloworld.html
@Override
public void addViewControllers(ViewControllerRegistry registry) {
// TODO Auto-generated method stub
registry.addViewController("/").setViewName("helloworld");
registry.addViewController("/index.html").setViewName("helloworld");
}
// 如果只是想增加视图器或拦截器,推荐使用上一种方式
// 使用@Bean 方式进行URL映射,会将方法名 webMvcConfigurer 作为bean加载至容器中,注意方法名是不允许随意更改的,否则配置不生效。
// @Bean
// public WebMvcConfigurer webMvcConfigurer() {
// WebMvcConfigurer wmc =new WebMvcConfigurer() {
// @Override
// public void addViewControllers(ViewControllerRegistry registry) {
// registry.addViewController("/").setViewName("login.html");
// registry.addViewController("/index.html").setViewName("login.html");
// }
// };
// return wmc;
// }
}
4. IDEA 热部署
热部署文档。我测试了一下,可用,但是不太好用。
5. Restful-CRUD
网页功能主要是增,读,更,删(CRUD),所以设计上,用RESTful来约定CRUD,即将浏览器的运行动作post、put、delete、get与CRUD统一。
新增 (create,使用 POST )
读取 (read,使用 GET )
更新 (update,使用 PUT )
删除 (destroy,使用 DELETE)
举例说明:
操作 | 普通CRUD | RestfulCRUD |
---|---|---|
查询 | getEmp | emp—GET方式请求 |
添加 | addEmp | emp—POST方式请求 |
修改 | updateEmp | emp—PUT方式请求 |
删除 | deleteEmp | emp-DELETE方式请求 |
6. 定制错误页面
在templates文件夹下创建error文件夹,并在其下创建404.html。当然也支持4xx.html,5xx.html 来匹配4/5 开头的错误。
附录:常见配置项
官网地址:通用应用程序属性
配置 | 解释 |
---|---|
server.port | 服务端口 |
server.servlet.context-path | 应用程序的上下文路径(2.0版本之后) |
spring.profiles.active | 指定 profiles |
logging.level.* | 指定全部或个别包或组下的配置文件 如:logging.level.org.springframework=DEBUG |
logging.file.name | 指定文件名,可以是绝对路径或相对路径 |
logging.file.path | 指定日志文件目录,如/var/log, 不可与logging.file.name同时使用 默认日志文件名:spring.log |
logging.pattern.console | 控制台输出格式 |
logging.pattern.file | 文件输出格式 |
logging.logback.rollingpolicy.clean-history-on-start | 是否在启动时清除存档日志文件,默认false |
logging.logback.rollingpolicy.file-name-pattern | 过渡日志文件名的模式,默认带年月日 |
logging.logback.rollingpolicy.max-file-size | 最大日志文件大小 |
logging.logback.rollingpolicy.max-history | 归档日志文件的最大保留天数 |
logging.group.* | 设定日志组,如:(逗号分隔) logging.group.tomcat=org.apache.catalina,org.apache.tomcat |