【SpringBoot】基础+运维知识点记录

索引

  • 过滤指定目录和文件
  • REST风格API
  • 路径变量和注解的简写
  • YML语法联想失效
  • 在Java程序中读取YML中定义的值
  • 使用数据类装填YML中的属性对象
  • 引入JUnit进行单元测试
  • 引入MyBatisPlus
  • 引入Druid数据源
  • Lombok关于构造方法的使用
  • 关于业务层、数据层实现的几个知识点
  • 数据格式统一
  • yml配置文件级别
  • SpringBoot多开发环境配置
  • Logback的相关用法

过滤指定目录和文件

Setting > Editor > File Types > Ignored Files and Folders

比如这里我要把.idea目录过滤了

过滤后.idea目录就没了

REST风格API

相较于一般通过getXXX、setXXX作为接口访问名区别操作的方式,定义一套REST风格的API可以直接通过访问类型进行操作的定义,只需要在相应的接口文档里注明该接口的用途和用法就好

REST风格定义统一的接口访问路径
通过GET、POST、PUT、DELETE等请求形式来定义接口的用途
例子:http://localhost/users
GET: 查询用户信息
POST: 添加用户信息
PUT:更新用户信息
DELETE : 删除用户信息
书写的时候记得使用复数词,如user→users、book→books

@RestController
@RequestMapping("/books")
public class BookController {
    @Autowired
    private IBookService bookService;

    @PostMapping
    public ResultData addBook(@RequestBody Book book){
        boolean isAdd = bookService.addBook(book);
        if(isAdd){
            return ResultData.build(1);
        }else{
            return ResultData.build(0);
        }
    }

    @PutMapping
    public ResultData setBook(@RequestBody Book book){
        boolean isSet = bookService.setBook(book);
        if(isSet){
            return ResultData.build(1);
        }else{
            return ResultData.build(0);
        }
    }
    @DeleteMapping("{id}")
    public ResultData delBook(@PathVariable Integer id){
        boolean isDel = bookService.delBook(id);
        if(isDel){
            return ResultData.build(1);
        }else{
            return ResultData.build(0);
        }
    }
    @GetMapping("{id}")
    public ResultData getBook(@PathVariable Integer id){
        Book book = bookService.getBook(id);
        if(book != null){
            return ResultData.build(1,book);
        }else{
            return ResultData.build(0);
        }
    }
}

路径变量和注解的简写

路径变量参数注解@PathVariable , 需要把RequestMapping中的value修改为 "路径"+"/"+{具体的参数名}的形式
@RequestBody和@RequestMapping => 作为类注解就不用每个方法上都写了
@Controller + @ResponseBody => @RestController
@RequestMapping(method = RequestMothod.POST) => @PostMapping....

YML语法联想失效

Project > Project Structure > Facets > 找到对应的工程 > 点击add , 在文件里加入yml/yaml配置文件

在Java程序中读取YML中定义的值

在yml中配置数据,并在controller中读取的方式
简而言之是${一级属性名.二级属性名}

//读取单级字符串
@Value("${定义yml的值名字}")

//读取多级字符串,一般可以指的是类的对象
@Value("${父级.子级.xxxxx}")

//读取数组中指定位置的字符串
@Value("${数组[下标]}")

//读取一个数组对象下的数据 可以按上面的那个改 后面直接点xxx
@Value("${数组[下标].xxx属性}")

在yml中的值引用另一个值,例如引用一个基本的路径配置信息等
使用{属性名}进行应用 path :{parent}\data
其实跟在Java理用@Value一样,只是Java要用@Value来标记

使用一个对象取出想要的YML属性值

为yml资源定义统一的读取方式,不需要再一个个单独写Value,一个变量就可以读取想要的数据
@Autowired //自动装配
private Environment env ;

调用方式:
env.getProperty("一级属性.二级属性")
跟Value一样调
和使用Value不一样的是,这里不用写@{}

使用数据类装填YML中的属性对象

将yml中的数据批量的导入进java程序中
需要将yml的数据封装成一个结构数据,并且java这边定义一个模型类进行一对一封装


需要注意参数名和YML要保持一致

@Component
@ConfigurationProperties(prefix="此处为yml中的对象名")
public class Enterprise{
    private String name ; 
    private Integer age ; 
    private String[] subject ;
}

因为该数据实体需要被Spring管控,所以对于数据实体类,需要挂上@Component注解,否则无法进行@Autowrite依赖注入

引入JUnit进行单元测试

JUnit:做java程序测试的
引入JUnit后 其Test包内就会自动的把测试配置文件配置好,测试的工程是默认导入的,不用另外导
void contextLoad(){
这里的内容是直接可运行的,不用做更多的配置
}
@Repository 写在数据层上的 使这个类可以被SpringBoot管理

测试方法:
1、注入需要测试的对象@Autowrite
2、执行要测试的对象对应的方法

引入MyBatisPlus

gradle : 
compile group: 'com.baomidou', name: 'mybatis-plus-boot-starter', version: 'Latest Version'

Maven:
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>Latest Version</version>
</dependency>

引入Druid数据源

这个东西是给数据库用的,需要手动引入依赖坐标

Maven:
<dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid-spring-boot-starter</artifactId>
        <version>${druid-version}</version>
</dependency>

Gradle:
compile group: 'com.alibaba', name: 'druid-spring-boot-starter', version: 'Latest Version'

配置方式:将原先yml数据库配置中的spring.datasource.xxx改为spring.datasource.druid.xxx

Lombok关于构造方法的使用

@AllArgsConstructor: 全部参数的构造方法
@NoArgsConstructor : 无参构造方法(也可以不加,不加默认无参)

关于业务层、数据层实现的几个知识点

  • 业务层 数据层 要分层分开
  • 业务层接口service包,下属定义好需要用到的数据接口,如增删改查,放到光之收藏家的业务中去,比如用户模块,此时service中应该是getUser、checkLogin、getUserInfo、getForkUser等查询接口
  • 数据层impl包,指的是业务层接口具体的实现方式,这里通常就是要把Mapper等一些东西注入进来了,并且需要为其class加上@service注解让其受SpringBoot管理
  • 业务层方法必须要写测试用例
  • 接口前面要加I,比如IReaderService

数据格式统一

定义一个模型类,类似收藏家项目里的ResultData ,为其增加注解@Data(Lombok)

yml配置文件级别

定义多种级别的配置文件,在银行类的系统中,只允许程序员变更最低等级的配置,对于最高等级的配置比如银行数据库的账号密码,不允许读写,所以才有了配置文件分级的概念。

  1. file : config/application.yml 【最高级配置文件,比如银行的数据库信息就在此,通常会限制文件夹读写】
  2. file : application.yml 【运行根目录下的yml文件提供给运维人员编辑查看运维数据的时候使用】
  3. classpath : config/application.yml 【交由后端开发Leader进行控制的】
  4. classpath : application.yml 【日常开发人员使用的配置文件】

SpringBoot多开发环境配置

在日常开发中,我们总是遇到需要配置一套开发环境、测试环境和生产环境的情况,SpringBoot考虑到了我们的需求,为我们提供了多环境的配置文件,只需要将application.yml修改为application-prod/dev/test.yml即可

应用的时候可以在服务器上的JVM或启动参数上加上spring.profiles.active = prod 使其强制采用线上环境,保证不出错。在本地的代码中配置设置成dev环境即可。

使用配置组,配置多套配置文件

在代码开发的过程中可能会遇到以前的代码不能动,但又要改的情况,这时候可以在其配置文件后引用新的配置文件,让其新属性覆盖指定的旧属性即可

spring:
    profiles:
        active : dev
        group :
            "dev": devDB , devMVC ,xxx 

最后一个配置会覆盖前面的配置生效

Logback的相关用法

使用方式

  • 使用最普通的创建对象的方式初始化logback
    Logger log = LoggerFactory.getLogger(xxx.class);

  • 引用Lombok,在类上挂上@Slf4j就行, 加入注解后,Logger对象就叫log

输出格式
logging:
pattern :
console : "%d - %m%n"
%d:日期
%m :消息
%n : 换行
这里的日志输出格式,了解一下就好,用的时候再去查

记录日志文件
logging : file : name : 文件名.log
默认会在你项目的根目录底下

logging: file-name-pattern : 设置LOG文件名怎么记录
例:log.%d.%i.log => log.2022-03-27.0.log 前缀.日期.日志循环变量.log

logging : max-file-size : 设置最大文件大小 超过就不计了 一般设10M 超过了就打不开了

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345

推荐阅读更多精彩内容