springBOOT学习笔记

springBOOT学习笔记


springBOOT介绍

SpringBoot是什么?

SpringBoot是一个内嵌Web容器(tomcat/jetty)的可执行程序(jar)的框架。
你开发的应用程序不需要作为war包部署到web容器,而是作为一个可执行(jar)。
启动时把web容器配置好,加载起来。
一句话概括,它是一个可执行程序(jar)框架,内嵌了web容器。

SpringBoot推出之前,编码存在什么问题?

2.	整合第三方框架的配置问题
3.	低效的开发效率和部署效率

SpringBoot解决了什么问题?

1.	SpringBoot使配置变简单
2.	SpringBoot使编码变简单
3.	SpringBoot使部署变简单
4.	SpringBoot使监控变简单

springboot配置

端口属性配置

#固定端口
server.port=9090
#随机端口
#server.port=${random.int[1024,9999]}

value注解的使用

#自定义配置属性 taiji.msg=hi,hello world!

@RestController
public class HelloController {

    @Value("${taiji.msg}")
    private String taijiMsg;

    @GetMapping("hello1")
    public String hello(){
        return "hello";
    }

    @GetMapping("msg")
    public String getMsg(){
        return taijiMsg;
    }

}

Spring Boot也是引用了JSON解析包Jackson,那么自然我们就可以在Demo对象上使用 Jackson提供的json属性的注解,对时间进行格式化,对一些字段进行忽略等等

controller上面增加
@RestController

yml和properties的区别

proeprties的写法
server.port=9090

yml的写法
属性前面两个空格,值前面一个空格
server:
  port: 9090
taiji:
  msg: hi,hello world!

springBOOT的日志框架
logback,logo4j,slf4j

logo4j,logback是日志实现框架就是实现了怎么记录日志
slf4j:提供了java所有日志框架的简单抽象(日志的门面设计模式),说白了就是一个日志API,没有实现类
不能单独使用,故必须结合logoback和logo4j一起使用
springBoot2.0默认采用了slf4j+logback的组合使用
默认日志级别是info,通过配置设置日志级别

设置日志的存储路径和日志名称
在实际开发中,不可能一直看着控制台,把日志存储在指定目录下

logging.level.com.example.demo=trace
logging.file.path=output/log
logging.pattern.console=%d{yyyy-MM-dd} [%thread] %-5level %logger{50} -%msg%n
logging.pattern.file=%d{yyyy-MM-dd} === [%thread] == %-5level == %logger{50}= %msg%n

为什么要用lombok,它解决了什么问题?

它解决了开发人员少些代码,提升开发效率。
它使开发人员不要去写javabean的getter/setter方法,写构造器、equals等方法,最方便的事你对javaBena
的属性增删改,你不用在重新生成getter/setter方法,省去一大堆麻烦事

##spring Boot 异步框架

为什么要使用异步框架,它解决了什么问题?

在Spring Boot 的日常开发中,一般都是同步调用的,但经常有特殊业务需要做异步来处理,例如:注册新用户
送100积分或者下单成功,发送push信息等等。
就拿注册新用户为什么要异步处理?
第一原因:容错性,如果送积分出现异常,不能因为送积分而导致用户注册失败;
因为用户注册时主要功能,送积分是次要功能,即使送积分异常也要提示用户注册成功,然后后面针对积分异常做补偿处理
。
第二原因:提升性能,例如注册用户花20毫秒,送积分花50毫秒,如果同步的话,总耗时70毫秒,做异步的话,无需等待积分
故耗时20毫秒。
异步能解决两个问题,容错性和性能。

异步框架调用



 @Async
   public void addScore() {
     try {
       Thread.sleep(1000 * 5);
       log.info("------------处理积分---------------");
     } catch (Exception e) {
       e.printStackTrace();
     } finally {
     }
   }

Asyn自定义线程池,为什么要自定义?

@Asyn在默认情况下是使用的是SimpleAsyncTaskExecutor线程池,该线程池不是真正意义上线程池,因为线程不重用
每次调用都会新建一个线程池,通过控制台调用可以看出来每次都是task-1 task-2 递增的
020-03-31 13:45:55.661  INFO 18136 --- [nio-8080-exec-1] c.t.t.controller.UserController          : --------------注册用户-----------------
2020-03-31 13:46:00.670  INFO 18136 --- [         task-1] c.t.taijibootweb.service.SourceService   : ------------处理积分---------------
2020-03-31 13:46:04.176  INFO 18136 --- [nio-8080-exec-2] c.t.t.controller.UserController          : --------------注册用户-----------------
2020-03-31 13:46:09.178  INFO 18136 --- [         task-2] c.t.taijibootweb.service.SourceService   : ------------处理积分---------------


SimpleAsyncTaskExecutor 不是真的线程池,这个类不重用,每次调用都会新建
SyncTaskExecutor:这个类没有实现异步调用,只是一个同步操作,只适用于不需要多线程的地方。
ConcurrentTaskExecutor:Executor的适配类,不推荐使用,如果ThreadPoolTaskExecutor不满足要求时,才用考虑使
用这个类
ThreadPoolTaskScheduler:可以使用cron表达式
ThreadPoolTaskExecutor:推荐使用,推荐,其实质对java.util.concurrent.ThreadExecutor的包装

使用swagger来生成接口文档

随着springBoot、springCloud等微服务的流行,在微服务的设计下,小公司微服务小的几十个,大公司大的几百上万的微服务。
这么多微服务必定会产生大量的接口调用,而接口的调用必定要写接口文档。
在微服务的盛行下,成千上万的接口文档编写,不可能考人力来编写,故swagger就产生了,它采用自动化实现并解决了
人力编写接口文档的问题
Swagger 提供一个全新的维护API文档的方式,有4大优点:
1.自动生成文档:只需要少量的注解,Swagger就可以根据代码自动生成API文档,很好的保证了文档的时效性。
2.跨语言,支持40多种语言。
3.Swagger UI 呈现出来一份可交互的API文档,我们可以直接在文档页面尝试API的调用,省去了准备复杂的调用参数过程。
4.还可以将文档规范导入相关的工具(例如 SoapUI),这些工具将会为我们自动地创建自动化测试。

加入依赖包
 <dependency>
      <groupId>io.springfox</groupId>
      <artifactId>springfox-swagger2</artifactId>
      <version>2.9.2</version>
    </dependency>
    <dependency>
      <groupId>io.springfox</groupId>
      <artifactId>springfox-swagger-ui</artifactId>
      <version>2.9.2</version>
    </dependency>
修改配置文件

##myBatis 的集成

为什么集成myBatis
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。
MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。
MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,
将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录

什么是永通的tk mapper?

在使用MyBatis的同时,建议大家再搭配使用"通用TK mapper4",它是一个可以实现任意MyBatis
通用方法的框架,项目提供了常用的增删改操作以及Example的相关表单操作,通用Mapper是为了解决MyBatis使用中90%
的操作,使用它可以很方便的进行开发,可以节省开发人员大量的时间。

那为什么需要需要通用的tk mapper?

mybatis最大的一个问题,就是要写大量的SQL在XML中,因为除了必须的特殊复杂业务逻辑SQL外,还要为大量的类似
增删改查SQL。另外数据库结构变更时,所有对应的SQL和实体类都得更改一遍,那个过程极其痛苦,故通用tk mapper应运而生。
简称一句话概括,用了它,不用写jdbc代码,也不用写SQL。互联网公司,97%不用写SQL,剩下3%要写多表查询逻辑。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值