2. SpringBoot 配置文件、日志及web相关

一、配置文件介绍

  SpringBoot使用一个全局的配置文件,配置文件位置固定:src/main/resources,名称固定:application.propertiesapplication.yml

  注:若两种配置文件都存在(properties/yml),程序都会读取其内容,若存在同一配置项,以properties文件为准。

  properties和yml文件有不同的格式要求,见下。

1. 文件语法

  相关注解:@ConfigurationProperties、@Value、@PropertySource 在 1. SpringBoot 初认识 有所介绍。

1.1 properties 文件语法

  1. # 单行注释
  2. 格式:K=V
  3. 一行只能有一个键值对,不要写在同一行,要不然只会当作一个键值对处理
  4. 字符串不用标注双引号("")
  5. 不能有重复的键,否则会发生覆盖
  6. 该文件默认编码,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>

  格式要求

  1. 格式:K:空格 V,表示键值对,注意冒号与V之间有空格
  2. 空格缩进控制层级关系,左对齐的一列数据都是同一层级的
  3. 大小写敏感
  4. # 表示 单行注释
  5. 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)
  1. 日期和时间:毫秒精度,易于排序
  2. 日志级别:ERROR、WARN、INFO、DEBUG、TRACE
  3. 进程ID
  4. 一个 - - - 分离器来区分实际日志消息的开始
  5. 线程名称:用方括号括起来
  6. 记录器名称:通常是源类名称
  7. 日志消息

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)

举例说明:

操作普通CRUDRestfulCRUD
查询getEmpemp—GET方式请求
添加addEmpemp—POST方式请求
修改updateEmpemp—PUT方式请求
删除deleteEmpemp-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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值