不记文档,白忙一场
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、整合服务器监控