springboot 项目实战-02章
1.本章介绍(略)
2.如何快速生成Springboot项目(略)
3.本地代码关联远程仓库的git操作
git init->git add . -> git commit -m "备注信息" ->git remote add origin 你的远程仓库地址 -> git push -u origin master
4.springboot 项目新的认知
springboot项目是父子项目,体现在maven上
springboot项目是嵌入式容器,自动使用tomcat启动项目的
5.启动日志优化
5.1 logback 日志样式
springboot 2.2 版本以上的,直接新增一个文件logback-spring.xml 到resource文件夹下,只要是这个名儿,springboot就可以自动识别它。
文件的内容:
<?xml version="1.0" encoding="UTF-8"?> <configuration> <!-- 修改一下路径--> <property name="PATH" value="./log"></property> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <Pattern>%d{ss.SSS} %highlight(%-5level) %blue(%-30logger{30}:%-4line) %thread %green(%-18X{LOG_ID}) %msg%n</Pattern> </encoder> </appender> <appender name="TRACE_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${PATH}/trace.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <FileNamePattern>${PATH}/trace.%d{yyyy-MM-dd}.%i.log</FileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>10MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> <layout> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %-50logger{50}:%-4line %green(%-18X{LOG_ID}) %msg%n</pattern> </layout> </appender> <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${PATH}/error.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <FileNamePattern>${PATH}/error.%d{yyyy-MM-dd}.%i.log</FileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>10MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> <layout> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %-50logger{50}:%-4line %green(%-18X{LOG_ID}) %msg%n</pattern> </layout> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <root level="ERROR"> <appender-ref ref="ERROR_FILE" /> </root> <root level="TRACE"> <appender-ref ref="TRACE_FILE" /> </root> <root level="INFO"> <appender-ref ref="STDOUT" /> </root> </configuration>
解读文件:
<Pattern>
输出格式上,%d 表示时间,%highlight 表示高亮,%-5level 表示从左往右,显示5个字符,%blue
%d{ss.SSS}:日期格式,表示秒:毫秒 ,同样的,HH:mm:ss.SSS 则表示小时:分钟:秒:毫秒 ,不想要哪个时间单位,就去掉哪个就好。
%highlight(%-5level) :打印日志级别
%blue(%-30logger{30}:%-4line)
%thread:线程
%green(%-18X{LOG_ID})
%msg:日志信息
%n:换行</Pattern>
5.2 增加启动成功的日志
LOG.info("start success!");
LOG.info("地址: \thttp://127.0.0.1:{}",env.getProperty("server.port"));
用env.getProperty("属性名")获取application.properties里的配置属性即可。
5.3 启动图案修改
在resource下面新增一个名叫banner.txt的文件,在这里http://patorjk.com/software/taag/#p=display&h=2&v=1&f=Flower%20Power&t=XXXQ,在右边的框框里输入文字或者英文,选一个喜欢的图案样式,copy到banner.txt里面。再次启动Springboot服务,就可以看到新的启动图案了
6.开发helloworld的http接口
6.1 开发helloworld接口(略)
6.2 项目分层
接口:一般要放在controller层
注解:
@requestMapping("/test") ,路由
@restController 返回字符串类型。
@Controller 返回页面(前后端不分离的话,用这个注解,前后端分离的话,就基本是用不着了),本次实战用不着这个注解。
启动类里有个类注解@ComponentScan("com.xxx.wiki") 这个注解的作用是增加springboot 项目的扫描返回,比如我们知道,启动类在哪里,默认就扫描启动类的子目录下的内容,但是启动类如果不在默认位置,或者在默认位置,但是 还是希望扫描一些额外的不在启动类里面的子项目,我们就可以用注解@ComponentScan("com.xxx.wiki","com.xxx.wiki")来扩大扫描范围
7.idea自带 http client 测试接口
7.1 好处:减掉窗口切换导致的效率低下;解决浏览器不能访问post请求的问题
7.2 怎么用?
(1)在项目文件下新建一个.http 后缀的文件,文件名随意取,文件后缀一定要是.http 的,比如test.http
(2)在test.http文件夹里面 输入 gtr,生成一个不带入参的GET类型的http请求。
GET http://localhost:80/api/item
Accept: application/json
###
这个快捷键在idea的这里:idea-属性-live_templates 找到httprequest 打开 就可以看到idea已经准备好的 默认的请求模版,注意,如果test.http 文件中 要写多个http请求,那么要保留“###”,将多个请求隔离开来。当然 我们也可以自定义自己的模版,但是我目前不会
生成的http请求是个模版,改成适合自己项目的请求即可,然后发起请求(test.http文件,对每个请求的旁边有一个绿色三角启动键,启动就可以发起请求),发起的所有请求打的日志都在项目根目录下可以找到,比如找.idea/httpRequests里面,多个log文件,每一个文件代表了一次请求的日志。
8.Springboot 配置
8.1 默认配置文件
1.可自动识别 resource/application.properties的文件(这个是默认的),可以自动识别resource/config /application.properties(这个是自建的),这两个文件都有的时候,内层文件生效。
也可以自动识别 resource/application.yml,也可以自动识别resource/config /application.yml。
2.可自动识别bootstrap.properties,一般用于动态配置,线上可以实施修改实时生效,一般可配合nacos使用。
3.yaml和.properties 的转换:https://toyaml.com/index.html。
4.对1和2的总结:
springboot会自动识别下面这组文件,
application.properties/yml 文件 和 config/application.properties/yml
springcloud会自动识别下面这组文件,
bootstrap.properties/yml文件和config/bootstrap.properties/yml
8.2 自定义配置项
我们在application.properties里重新定义server.port=8088 ,覆盖掉了默认值8080
我们还可以在application.properties再配置一个:test.config=test
然后,在controller里这样使用:
@Value("${test.config}")// @value 注解,${}包裹配置name,
private String testConfig;//定义一下这个变量,value给这个变量用,具体看@value注解怎么用
@GetMapping("/test/config")//写一个接口,把读出来的配置value返回
public String test(){
return "test"+":"+testConfig;
}
写一个test.http 请求(gtr),测试一下
GET http://localhost:8088/test/config
Accept: application/json
###
测一下,结果为:
GET http://localhost:8088/test/config
HTTP/1.1 200
Content-Type: application/json
Content-Length: 9
Date: Wed, 19 Jan 2022 05:09:43 GMT
Keep-Alive: timeout=60
Connection: keep-alive
test:test
Response code: 200; Time: 105ms; Content length: 9 bytes
OK!测试通过
另外,默认配置这样写@Value("${test.config:defualt value}"),如果在配置文件中读不到配置value,就在这里读默认值。