大乱炖-springboot

不记文档,白忙一场


0、整合模板引擎

1> 常见三种模板引擎,官方不推荐哪种,推荐哪种
2> 整合freemarker步骤
3> starter是什么
    starter包是一个工具包,是一个jar包的集合。引入一个就会把相关的依赖包都导入进来。
4> 整合freemarker的application.yml中属性有多少,常用的两个
    SpringBoot中整合了Freemarker之后,相关的配置有一百多个,可以到Spring的官网上进行查看。
    //常用的两个
    spring.freemarker.suffix=.ftl #文件后缀
    spring.freemarker.template-loader-path=classpath:/templates/ #路径

1、整合MyBatis

1> 原始java访问数据库
    1、注册驱动/加载驱动
        Class.forName("com.mysql.jdbc.Driver")
    2、建立连接
        Connection con =                                                                    DriverManager.getConnection("jdbc:mysql://localhost:3306/dbname","root","root");
2> 整合步骤
    1 加入依赖
        mybatis-spring-boot-starter
    2 加入配置文件application.yml
        type不配置,则默认使用hikari光数据源
    3 启动类增加mapper扫描
        @MapperScan("net.xdclass.base_project.mapper")
    4 开发mapper
3> Mybatis的sql文件有xml格式和注解格式,推荐用注解格式,因为springboot的宗旨就是化繁为简。
4> mapper中注解有:
    @Insert  @Select  @Update  @Delete
5> 事务
    分为:单机事务,分布式事务处理等。
    分布式事务:比较有技术含量,一般处理方式有"二次提交"和"最终一致性"。
6> 隔离级别
    详见"数据库章节"
7> 传播行为
    最常见的选择为:
    PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务。
    还有其他5种。记不太清了。
8> springboot事务控制   
    service层中使用:
    @Transactional(propagation = Propagation.REQUIRED)

2、整合redis

1> 安装redis所需三个依赖模块
    zlib openssl pcre
2> 整合单机redis
    1 加入依赖
        spring-boot-starter-data-redis
    2 加入application.yml
        redis连接信息等
    3 调用
        a. 使用StringRedisTemplate
            常用方法:opsForValue()、opsForList()、opsForHash()、opsForSet()、opsForZSet()
        b. 使用RedisTemplate
3> 整合redis主从+哨兵
    1 application.yml中增加spring.redis.sentinel
    2 如果redis使用lettuce连接池,则需要重新配置RedisConfig
4> 整合redis-cluster
    1 application.yml中增加spring.redis.cluster
    2 如果redis使用lettuce连接池,则需要重新配置RedisConfig
5> redis客户端创建的两种方式--lettuce和jedice;配置类的要点

3、整合定时任务

1> spring项目的话,就用Quartz;
    springboot项目的话,不用导入任何包,因为springboot已经默认整合了定时任务
2> 整合步骤:
    1 启动类里面 @EnableScheduling开启定时任务,自动扫描
    2 定时执行的方法加上注解 @Scheduled(fixedRate=2000) 定期执行一次
3> 常用定时任务表达式配置
    1、cron 定时任务表达式 @Scheduled(cron="*/1 * * * * *") 表示每秒
    2、fixedRate: 定时多久执行一次(上一次开始执行时间点后xx秒再次执行;)
    3、fixedDelay: 上一次执行结束时间点后xx秒再次执行
    4、fixedDelayString:  字符串形式,可以通过配置文件指定
4> fixedRate和fixedDelay区别:
    fixedRate: 定时多久执行一次(上一次开始执行时间点后xx秒再次执行;)
    fixedDelay: 上一次执行结束时间点后xx秒再次执行
5> cron表达式:
​
6> 异步任务
    场景:
        发送邮件、下单等
        下单后,需要执行的接口,有很多,如果'串行'执行,会花费很长时间,这时候就可以使用异步任务。
    原理:
        异步任务的原理是创建不同的'线程',springboot免去了你自己管理线程的麻烦。
7> 异步任务整合步骤 -- 不需要拿到结果
    1 启动类里面使用@EnableAsync注解开启功能,自动扫描
    2 定义异步任务类并使用@Component标记组件被容器扫描,异步方法所在类加上@Async
8> 异步任务整合步骤 -- 需要拿到结果
    1 启动类里面使用@EnableAsync注解开启功能,自动扫描
    2 异步任务类加@Component,异步任务类加@Async
    3 异步任务类加中方法返回Future<String>
    4 调用时候判断Futer<String>对象isDone()为true
        Future<String> task1 = resultTask.tasks1();
        if (task1.isDone()&&task2.isDone()&&task3.isDone())

4、整合日志

1> 日志级别:DEBUG < INFO < WARN < ERROR
2> logback简介:
    基于Log4j基础上大量改良,不能单独使用,推荐配合日志框架SLF4J来使用
    核心对象:
        Logger:日志记录器
        Appender:指定日志输出的目的地,目的地可以是控制台,文件
        Layout:日志布局 格式化日志信息的输出
3> 大量输出日志的话,会影响QPS
    这时,就需要慎重选择日志框架。logback+slf4j的性能要好过log4j。
    因为logback是在log4j的基础上优化而来的。

5、整合elasticsearch

1> es和mysql概念上区别
    mysql: database   table                 rocord
    es   : index      type(只能存在一个)    document
2> 安装注意
    1 相当占用内存。可以修改配置文件
    2 需要修改配置,允许外网访问
3> 整合步骤
    1 加入依赖
        spring-boot-starter-data-elasticsearch
    2 新建实体对象--对应es中的Document
        加上类注解 @Document(indexName = "blog", type = "article")
    3 定义接口,接口继承ElasticSearchRepository
        @Component
        public interface ArticleRepository extends ElasticsearchRepository<Article,Long> {
        }
    4 加入application
        连接信息等
    5 调用
        a.保存
            ElasticsearchRepository实现类对象save方法,参数是@Document注解的实体类
        b.查询
            ElasticsearchRepository实现类对象search方法,参数是QueryBuilder对象
    注* ElasticsearchRepository接口代表的是'仓库'

6、整合ActiveMQ

基础

1> 各MQ对比
    http://www.cnblogs.com/williamjie/p/9481780.html
2> 什么是JMS
    Java消息服务(Java Message Service),Java平台中关于面向消息中间件的接口
    JMS是一种与厂商无关的API,用来访问消息收发系统消息,它类似于JDBC
3> 使用场景
    多项目
    解耦
    分布式事务
    流量控制
        如果流量过多的时候,消息队列进行控制,不然所有流量一下子冲爆服务器。
4> JMS消息通常有两种类型:点对点(Point-to-Point)、发布/订阅(Publish/Subscribe)

点对点

1> 点对点(p2p):一个消息只能被一个消费者消费。
2> 步骤:
    1 加入依赖
        spring-boot-starter-activemq
        如果配置连接池则还需加入,activemq-pool
    2 配置application.yml
        连接信息等
    3 启动类加@EnableJms,开启支持jms
    4 编写生产者
        使用JmsMessagingTemplate对象发送消息,发送方法中有两个参数destination,msg
        注* Destination destination = new ActiveMQQueue("order.queue");
    5 编写消费者
        方法上加注解:
        @JmsListener(destination = "order.queue")
3> 两个端口
    8161是activemq的http默认端口,61616是activemq的tcp的默认端口。
    9200是elasticsearch的http默认端口,9300是java连接的默认端口一样。
    注* 因为他们都有管控台,又有java连接接口。

发布/订阅(只有)

1> springboot默认只支持点对点
    默认不能同时支持两种模式,需要修改它的容器工厂containerFactory
2> 步骤
    1 加入依赖
        spring-boot-starter-activemq
        如果配置连接池则还需加入,activemq-pool
    2 配置application.yml
        连接信息等
        spring.jms.pub-sub-domain=true
    3 启动类加@EnableJms,开启支持jms
    4> 编写发布者
        使用JmsMessagingTemplate对象发送消息,发送方法中有两个参数topic,msg
        注* private Topic topic = new ActiveMQTopic("video.topic");
    5> 编写订阅者
        方法上加注解:
        @JmsListener(destination = "video.topic")

整合ActiveMQ集群

application.yml中
Spring:
    activemq:
        #broker-url: tcp://39.105.32.104:61616
        #集群配置(失效备援)
        broker-url: failover:(tcp://39.105.32.104:61616,tcp://39.105.32.104:61617,
                              tcp://39.105.32.104:61618)
注* 代码完全不用动

7、整合RocketMQ

0> 特性
    1)支持拉pull和推push两种消息模式
    2)单一队列百万消息
    3)支持单master节点,多master节点,多master多slave节点
1> 概念
    Producer:消息生产者
    Producer Group:消息生产者组,发送同类消息的一个消息生产组
    Consumer:消费者
    Consumer Group:消费同个消息的多个实例
​
    Topic:主题
    Tag:标签,子主题(二级分类),用于区分同一个主题下的不同业务的消息
    Message:消息
    
    Broker:MQ程序,接收生产的消息,提供给消费者消费的程序
    Name Server:给生产和消费者提供路由信息,提供轻量级的服务发现和路由
2> 使用
    创建一个消息实例,包含 topic、tag 和 消息体
    Message message = new Message("testTopic", tag,                                             msg.getBytes(RemotingHelper.DEFAULT_CHARSET));
    创建一个生产者,需要NameServer 地址、生产者的组名
3> 可视化管控台
    github上下载源码

8、响应式编程

1> 简介
    Spring WebFlux是Spring Framework 5.0中引入的新的反应式Web框架与Spring MVC不同,
    它不需要Servlet API,完全异步和非阻塞,并 通过Reactor项目实现ReactiveStreams规范。
2> 通俗理解
    Mono 表示的是包含 0 或者 1 个元素的异步序列
        mono -> 单一对象 User     redis -> 用户ID -> 唯一的用户Mono<User>  
            
    Flux 表示的是包含 0 到 N 个元素的异步序列
        flux -> 数组列表对象 List<User>   redis -> 男性用户 -> Flux<User>

9、服务器端推送技术

1> 常用技术
    1、客户端轮询:ajax定时拉取
    2、服务端主动推送:WebSocket
        全双工,本质是一个额外的tcp连接,建立和关闭时握手使用http协议,其他数据传输不使用http协议
    3、服务端主动推送:SSE (Server Send Event)
        html5新标准,用来从服务端实时推送数据到浏览器端,
        直接建立在当前http连接上,本质上是保持一个http长连接,轻量协议
2> 整合see步骤:
    1 服务端
        @GetMapping(value = "/get_data", produces = "text/event-stream;charset=UTF-8")
        注* 需要把response的类型 改为 text/event-stream,才是sse的类型
    2 客户端
        var source = new EventSource("sse/get_data");
        source.onmessage = function (evt) { 
            //evt.data就是推送过来的数据
        }
3> 尝试一下HT上面用sse
    因为只是js中需要用到代码

10、整合服务器监控

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值