bakaxl启动器怎么导入整合包_SpringBoot 整合缓存技术 定时任务器

学习主题:SpringBoot

学习目标:

对应视频:

http://www.itbaizhan.cn/course/id/85.html

对应文档:

对应作业

1. Spring Boot整合Spring Data Redis-整合步骤

(1) 阐述Spring Boot整合Spring Data Redis整合步骤。

1,导入redis 启动器坐标

<!-- springdata redis 的启动器 -->

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-data-redis</artifactId>

</dependency>

2. 配置jedis配置类

/*

* JedisPoolConfig : 配置连接池信息

*

* */

@Bean

@ConfigurationProperties(prefix="spring.config.pool") //加载application.properties下前缀为spring.config.pool配置信息

public JedisPoolConfig jedisPoolConfig() {

JedisPoolConfig jedis = new JedisPoolConfig();

//

// jedis.setMaxIdle(20);

// jedis.setMinIdle(5);

// jedis.setMaxTotal(100);

System.out.println("默认值"+jedis.getMaxIdle());

System.out.println("默认值"+jedis.getMinIdle());

System.out.println("默认值"+jedis.getMaxTotal());

return jedis;

}

/*

* JedisConnectionFactory : 配置jedis 连接工厂

* */

@Bean

@ConfigurationProperties(prefix="spring.factory")

public JedisConnectionFactory jedisConnectionFactory (JedisPoolConfig jedisPoolConfig) {

System.out.println(jedisPoolConfig.getMaxIdle());

System.out.println(jedisPoolConfig.getMinIdle());

System.out.println(jedisPoolConfig.getMaxTotal());

JedisConnectionFactory jFactory = new JedisConnectionFactory();

jFactory.setPoolConfig(jedisPoolConfig);

// jFactory.setHostName("192.168.93.130");

// jFactory.setPort(6379);

// jFactory.setTimeout(30000);

return jFactory;

}

/*

* 配置jedis连接模板

* */

@Bean

public RedisTemplate<String, Object> redisTemplate(JedisConnectionFactory jedisConnectionFactory){

RedisTemplate<String, Object> redis = new RedisTemplate<>();

//连接 jedis连接工厂

redis.setConnectionFactory(jedisConnectionFactory);

redis.setKeySerializer(new StringRedisSerializer());

redis.setValueSerializer(new StringRedisSerializer());

return redis;

}

(1) @Configuration注解的作用是什么?

Springboot启动时 会去加载此类

(2) @Bean注解的作用是什么?

将对象注册到IOC容器中

3. Spring Boot整合Spring Data Redis-提取Redis的链接参数

(1) @ConfigurationProperties注解的作用是什么?

加载application.properties文件

spring.config.pool.max-idle=20

spring.config.pool.min-idle=5

spring.config.pool.max-total=100

spring.factory.host-Name=192.168.93.130

spring.factory.port=6379

spring.factory.timeout=20000

(2) @ConfigurationProperties注解中的prefix属性的作用是什么?

使用前缀是 ... 的配置信息

4. Spring Boot整合Spring Data Redis-存取Java对象

(1) 创建Users实体对象,包含id、name、age、address属性。

@Entity //标记实体类

@Table(name="t_user") //映射数据库中的表 ,如果开了正向索引就会创建此表

public class User implements Serializable{

@Id

@GeneratedValue(strategy=GenerationType.IDENTITY) //主键生成策略 , 此策略为数据库自动生成 (自动增长)

@Column(name="id")

private Integer id;

@Column(name="name")

private String name;

@Column(name="age")

private Integer age;

@Column(name="address")

private String address;

(2) 创建测试代码,在测试方法中重新设置序列化器,更换为jdk序列化器,并将Users对象缓存到Redis中。

// 存贮User对象 使用jdk序列化器将对象序列化为字节,转换为字符存储在redis库中

@Test

public void test3() {

User user = new User();

user.setAddress("wer");

user.setAge(12);

user.setName("wer");

redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer());

redisTemplate.opsForValue().set("user", user);

User user2=(User) redisTemplate.opsForValue().get("user");

System.out.println(user2);

}

(3) 创建测试代码,获取缓存的Users对象。

redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer());

User user2=(User) redisTemplate.opsForValue().get("user");

5. Spring Boot定时任务-@Scheduled的使用

(1) Scheduled是什么?

定时任务器

(2) @Scheduled注解的作用是什么?

设置定时任务

(3) @Scheduled的cron属性的作用是什么?

Cron 表达式 ,定时任务触发是时间的一个字符串表达形式

(4) 什么是cron表达式?

Cron 表达式是一个字符串,分为6或7个域,每一个域代表一个含义

结构:

Corn从左到右(用空格隔开:秒 分 小时 月份中的日期 月份 星期中的日期 年份)

(5) @EnableScheduling注解的作用是什么?

开启定时任务器

6. Spring Boot定时任务-cron表达式

(1) Cron表达式的语法格式有几种?

两种

Seconds Minutes Hours Day Month Week Year

Seconds Minutes Hours Day Month Week

(2) Cron表达式的结构是什么样的?

Corn 从左到右(用空格隔开) : 秒 分 小时 月份中的日期 月份 星期中的日期 年份

(3) Cron表达式各字段的含义是什么?

5e977e9dc4152266e888f654be3cd8d9.png

(4) 在Cron表达式中(*)、(?)、(-)、(,)、(/)、(#)分别表示什么含义?

(5) 在Cron表达式中L、W、LW、C分别表示什么含义?

a0d7814aa1522c643efa8716fd3dd12a.png

分享/讲解/扩展思考

点名提问从第一节课到最后一节课分别学到了什么,直到同学们把所有的知识点都说出来并且保证无误。

第222次(SpringBoot

学习主题:SpringBoot

学习目标:

对应视频:

http://www.itbaizhan.cn/course/id/85.html

对应文档:

对应作业

7. Spring Boot定时任务-Quartz介绍

(1) 什么是Quartz?

一个开源的定时任务框架

(2) Quartz的使用思路是什么?

1. job - 任务 - 你要做什么事?

2. Trigger - 触发器 - 你什么时候去做?

3. Scheduler - 任务调度 - 你什么时候需要去做什么事?

8. Spring Boot定时任务-SpringBoot整合Quartz

(1) 阐述Spring Boot整合Quartz整合步骤。

1. 修改pom.xml文件 添加 Quartz的坐标

<!-- Quartz 坐标 -->

<dependency>

<groupId>org.quartz-scheduler</groupId>

<artifactId>quartz</artifactId>

<version>2.2.1</version>

<exclusions>

<exclusion>

<artifactId>slf4j-api</artifactId>

<groupId>org.slf4j</groupId>

</exclusion>

</exclusions>

</dependency>

<!-- Sprng tx 坐标 -->

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-tx</artifactId>

</dependency>

2. 创建job类(任务类)

/*

* 定义job 任务类

* */

public class Quartzjob implements Job{

/*

* 任务被触发时所执行的方法

* */

@Override

public void execute(JobExecutionContext arg0) throws JobExecutionException {

System.out.println("Execute..."+new Date());

}

3. 编写 Quartz 配置类

@Configuration //让springBoot启动时来初始化此类

public class QuartzMain {

/*

* 创建Job对象

*/

@Bean

public JobDetailFactoryBean jobDetailFactoryBean() {

JobDetailFactoryBean factory = new JobDetailFactoryBean();

//与job类建立联系

factory.setJobClass(QuartzDemo.class);

return factory;

}

/*

* 创建Trigger对象 简单的trigger对象

*/

@Bean

public SimpleTriggerFactoryBean simpleTriggerFactoryBean(JobDetailFactoryBean jobDetailFactoryBean){

SimpleTriggerFactoryBean factory = new SimpleTriggerFactoryBean();

//关联 JobDetail 对象

factory.setJobDetail(jobDetailFactoryBean.getObject());

//该参数表示一个执行的毫秒数

factory.setRepeatInterval(2000);

//重复次数

factory.setRepeatCount(5);

return factory;

}

/*** 3.创建 Scheduler 对象 */

@Bean

public SchedulerFactoryBean schedulerFactoryBean(SimpleTriggerFactoryBean simpleTriggerFactoryBean,MyAdaptableJobFactory myAdaptableJobFactory){

SchedulerFactoryBean factory = new SchedulerFactoryBean();

//关联 trigger

factory.setTriggers(simpleTriggerFactoryBean.getObject());

return factory;

(2) @EnableScheduling注解的作用是什么?

开启定时任务

9. Spring Boot定时任务-Job类对象注入

(1) 阐述Job类注入时生异常的原因。

168112f3d8cba4cb1b8ae9a15aee7bc7.png

UserService对象的注入就没有获取

(2) 如何解决该异常?

需要将JOb.class 类也加入到sprngIOC容器中 ,

@Component("myAdaptableJobFactory") //将该类注册到SpringIOC容器中

public class MyAdaptableJobFactory extends AdaptableJobFactory{

//AutowireCapableBeanFactory 可以将一个对象添加到SpringIOC容器中,并且完成该对象注入

@Autowired

private AutowireCapableBeanFactory autowireCapableBeanFactory;

/*

* 该方法需要将实例化的任务对象手动添加到SpringIOC容器中并且完成对象的注入

* */

@Override

protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {

Object obj =super.createJobInstance(bundle);

autowireCapableBeanFactory.autowireBean(obj);

return obj;

}

(3) AutowireCapableBeanFactory对象的作用是什么?

可以将一个对象添加到SpringIOC容器中,并且完成该对象注入

10. 单体架构

(1) 什么是单体架构?

单体架构也称之为单体系统或者是单体应用,就是一种把系统中所有的功能,模块耦合在一个应用中的架构方式

(2) 单体架构有哪些特点?

1. 打包成一个独立的单元(导成一个唯一的jar包或者是war包)

2. 会一个进程的方式来进行

6907bdb7973545bbdbc55ee3b5f2b417.png

(3) 单体架构的优缺点是什么?

优点:

1. 项目易于管理

2. 部署简单

缺点:

测试成本高

可伸缩性差

可靠性差

迭代困难

跨语言程度差

团队协作难

11. 微服务架构

(1) 什么是微服务?

微服务是一种架构风格,一个大型的复杂软件应用,由一个或多个微服务组成.系统中的各个微服务可被独立部署,各个微服务直接是松耦合的,每个微服务仅关注于完成一件任务并很好的完成该任务

(2) 常见的架构风格有哪些?

1. 客户端于服务端的

2. 基于组件模型的架构

3. 分层架构

4. 面向服务架构

(3) 微服务架构有哪些特点?

系统是由多个服务构成

每个服务可以单独独立部署

每个服务之间是松耦合的,服务内部是高内聚的,外部是低耦合的,高内聚就是每个服务只关注完成一个功能

(4) 微服务架构的优缺点是什么?

优点:

测试容易

可伸缩性强

可靠性强

跨语言程度会更加灵活

团队协作容易

系统迭代容易

缺点:

运维成本过高,部署数量较多

接口兼容多版本

分布式系统的复杂性

分布式事务

12. 常见软件架构方式的区别

(1) 什么是MVC架构?

其实MVC架构就是一个单体架构

代表技术: Struts2,SpringMVC,Spring,Mybatis等等

(2) 什么是RPC架构?

RPC 远程过程调用 ,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议

代表技术: Thrift , Hessian等

(3) 什么是SOA架构?

SOA : 面向服务架构

ESB: 企业服务总线,服务中介,主要是提供了一个服务与服务之间的交互

ESB包含的功能 : 负载均衡,流量控制,加密处理,服务的监控.异常处理.监控告急等等

代表技术 : Mule ,WSO2

5. 微服务架构

微服务就是一个轻量级的服务治理方案

13. AKF拆分原则

(1) 设计微服务的原则是什么?

AKF 拆分原则

前后端分离原则

无状态服务

RestFul的通信风格

(2) 什么是AKF拆分原则?

通过加机器就可以解决容量和可用性问题 (一台不够就两台

ae75b47a6be920c6580206fddd4a43d5.png

)

(3) AKF拆分原则中的Y轴表示什么?

功能 - 关注应用中功能划分,基于不同的业务拆分

Y轴扩展会将庞大的整体应用拆分为多个服务,每个服务实现一组相关的功能,如订单管理,客户管理等, 例子: 服务化架构(SOA)

834ed2653593cf8a97002fbc9210fdd0.png

引发的问题 : 当服务数量增多时,服务调用关系变得复杂,为系统添加一个新功能 ,要调用的服务数也变得不可控 ,由此引发服务管理上的混乱

所以一般情况下,需要采取服务注册的机制形成服务网关来进行服务治理,系统的架构就会变成这样

5875d08b818b8154ce3b579c051ffa2e.png

(4) AKF拆分原则中的X轴表示什么?

水平扩展 -- 关注水平扩展 ,也就是 “加机器解决问题”

通过绝对平等地复制服务与数据,以解决容量和可用性的问题 就是将微服务运行多个实例,做集群加负载均衡的模式

87fa06263f9b9797bb2e06342f9ddbbc.png

(5) AKF拆分原则中的Z轴表示什么?

数据分区 -- 关注服务和数据的优先级划分,如地域划分

Z 轴扩展通常是指基于请求者或用户独特的需求,进行系统划分,并使得划

分出来的子系统是相互隔离但又是完整的。以生产汽车的工厂来举例:福特公司

为了发展在中国的业务,或者利用中国的廉价劳动力,在中国建立一个完整的子

工厂,与美国工厂一样,负责完整的汽车生产。这就是一种 Z 轴扩展。

96707d3dc44b7cf0e792c29786b96a60.png

14. 前后端分离原则

(1) 什么是前后端分离原则?

f10f58688ac9efe306958b05fbacc180.png

何为前后端分离?前后端本来不就分离么?这要从尴尬的 jsp 讲起。分工精细化从来都

是蛋糕做大的原则,多个领域工程师最好在不需要接触其他领域知识的情况下合作,才可能

使效率越来越高,维护也会变得简单。jsp 的模板技术融合了 html 和 java 代码,使得传统

MVC 开发中的前后端在这里如胶似漆,前端做好页面,后端转成模板,发现问题再找前端,

前端又看不懂 java 代码......前后端分离的目的就是将这尴尬局面打破。

前后端分离原则,简单来讲就是前端和后端的代码分离,我们推荐的模式是最好采用物

理分离的方式部署,进一步促使更彻底的分离。如果继续直接使用服务端模板技术,如:jsp,

java、js、html、css 都堆到一个页面里,稍微复杂一点的页面就无法维护了。

a0dcfbd7aa8fd3534535e13d23eadb43.png

这种分离方式有几个好处

1. 前后端技术分离,可以由各自的专家来对各自的领域进行优化,这样前端的用户体验优化效果更好

2. 分离模式下,前后端交互界面更清晰,就剩下了接口模型.后端的接口简单明了

3. 前端多渠道集成场景更容易实现,后端服务无需变更,采用统一的数据和模型,可以支持多个前端

15. 无状态服务

(1) 什么是无状态服务?

简单来说 就是对数据的处理就是无状态服务 ,对数据的操作 放入缓存数据库啥的就是有状态服务

16. RestFul通信风格

(1) 什么是RestFul通信风格?

641636a55ff9c65a0e2e4ac509a4da04.png

作为一个原则来讲本来应该是个”无状态通信原则”,在这里我们之间推荐一个实践优选的Restful通信风格

好处:

1. 无状态协议 HTTP ,具备先天优势,扩展能力很强,

2. JSON报文序列化,轻量简单,学习成本低

3. 语言无关 ,各大热门语言都提供Restful框架

分享/讲解/扩展思考

点名提问从第一节课到最后一节课分别学到了什么,直到同学们把所有的知识点都说出来并且保证无误。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值