SpringBoot学习笔记(四)

news/2024/4/28 9:10:06/文章来源:https://blog.csdn.net/weixin_42594143/article/details/129677544

SpringBoot整合quartz

任务

  • 定时任务是企业级应用中的常见操作
  • 市面上流行的定时任务技术: Quartz、 Spring Task

相关概念:

  • 工作(Job):用于定义具体执行的工作
  • 工作明细(JobDetail):用于描述定时工作相关的信息
  • 触发器(Trigger):用于描述触发工作的规则,通常使用cron表达式定义调度规则
  • 调度器(Scheduler):描述了工作明细与触发器的对应关系

整合步骤

导入SpringBoot整合quartz的坐标

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-quartz</artifactId>
</dependency>

定义具体要执行的任务,继承QuartzJobBean

public class QuartzTaskBean extends QuartzJobBean {@Overrideprotected void executeInternal(jobExecutionContext context) throws JobExecutionException {System.out.println("quartz job run...");}
}

定义工作明细与触发器,并绑定对应关系

@Confifuration
public class QuartzConfig {@Beanpublic JobDetail printJobDetil(){return JobBuilder.newJob(QuartzTaskBean.class).storeDurably().build();}@Beanpublic Trigger printJobTrigger() {CronScheduleBuilder croScheduleBuilder = CronScheduleBuilder.cronSchedule("0/3 * * * * ?");return TriggerBuilder.newTrigger().forJob(printJobDetail()).withSchedule(cronScheduleBuilder).build();}
}

总结:

SpringBoot整合Quartz

  • 工作(job)
  • 工作明细(JobDetail)
  • 触发器(Trigger)
  • 调度器(Scheduler)

SpringBoot整合task

Spring Task

开启定时任务功能

@SpringBootApplication
@EnableScheduling
public class SpringbootTaskApplication {public static void main(String[] args) {SpringApplication.run(SpringbootTaskApplication.class,args);}
}

设置定时执行的任务,并设定执行周期

@Component
public class ScheduledBean {@Scheduled(cron = "0/5 * * * * ?")public void printtLog() {System.out.println(Thread.currentThread().getName()+":run...");}
}

定时任务相关配置

spring:task:scheduling:# 任务调度线程池大小 默认1pool:size: 1# 调度线程名称前缀 默认scheduling-thred-name-prefix: ssm_shutdown:# 线程池关闭时等待所有任务完成await-termination: false# 调度线程关闭前最大等待时间,确保最后一定关闭await-termination-period: 10s

总结:

Spring Task

  • @EnableScheduling
  • @Scheduled

发送简单邮件

SpringBoot整合JavaMail

导入SpringBoot整合JavaMail的坐标

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId>
</dependency>

配置JavaMail

spring:mail:host: smtp.qq.comusername: ********@qq.compassword: ********

密码,在qq邮箱,设置,开启如下图所示
在这里插入图片描述
开启定时任务功能

@Service
public class SendMailServiceImpl implement SendMailService {private String from = "*************@qq.com";      //发送人private String to = "**************@126.com";      //接收人private String subject = "测试邮件";                //邮件主题private String text = "测试邮件正文";               //邮件内容@Autowiredprivate JavaMailSender javaMailSender;@Overridepubilic void sendMail() {SimpleMailMessage mailMessage = new SimpleMailMessage();mailMessage.setFrom(from);mailessage.setTo(to);mailMessage.setSubjet(subject);mailMessage.setText(text);javaMailSender.send(mailMessage);}
}

总结:
SpringBoot整合JavaMail发送简单邮件


发送多部邮件

从126邮件发到qq邮箱

导入依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId>
</dependency>

配置JavaMail

spring:mail:host: smtp.126.comusername: ********@126.compassword: ********

密码,在126邮箱,设置,开启如下图所示
在这里插入图片描述

@Service
public class SendMailServiceImpl implement SendMailService {private String from = "*************@qq.com";      //发送人private String to = "**************@126.com";      //接收人private String subject = "测试邮件";                //邮件主题private String context = "<a hrep='https://www.itcast.cn'>点开有惊喜</a>";               //邮件内容@Autowiredprivate JavaMailSender javaMailSender;@Overridepubilic void sendMail() {try {MimeMessag message = javaMailSender.creatMimeMessage();MimeMessageHelper helper = new MimeMessageHelper(message, muitipart: true);helper.setFrom(to+"(路西法98)");helper.setTo(from );helper.setSubjet(subject);helper.setText(context, html: true);//添加附件File f1 = new File("D:\\workspace\\a.jar");File f2 = new File("D:\\workspace\\b.png")helper.addAttachment(f1.getName(),f1);helper.addAttachment("我是图片名称.png",f2);javaMailSender.send(message );} catch (Exception e) {e.printStackTrace();}}
}

总结: SpringBoot整合JavaMail发送邮件技巧


消息简介

消息

企业级应用中广泛使用的三种异步消息传递技术

  • JMS
  • AMQP
  • MQTT

JMS

JMS(Java Message Service): 一个规范,等同于JDBC规范,提供了与消息服务相关的API接口

JMS消息模型

  • peer-2-peer: 点对点模型,消息发送到一个队列中,队列保存消息。队列的消息只能被一个消费者消费,或超时
  • public-subscribe:发布订阅模式,消息可以被多个消费者消费,生产者和消费者完全独立,不需要感知对方的存在

JMS消息种类

  • TextMessage
  • MapMessage
  • ByteMessage
  • StreamMessage
  • ObjectMessage
  • Message(只有消息头和属性)

JMS实现:ActiveMQ、Redis、HornetMQ、RabbitMQ、RocketMQ(没有安全遵守JM5规范)


### AMQP

AMQP(advanced message queuing protocol): 一种协议(高级消息队列协议,也是消息代理规范),规范了网络交换的数据格式,兼容JM5

优点:具有跨平台性,服务器供应商,生产者,消费者可以使用不同的语言来实现

AMQP消息模型

  • direct exchange
  • fanout exchange
  • topic exchange
  • headers exchange
  • system exchange

AMQP消息种类: byte[]

AMQP实现: RabbitMQ、StormMQ、RocketMQ


MQTT

MQTT(Message Queueing Telemetry Transport) 消息队列遥测传输,专为小设备设计,是物联网(IOT)生态系统中主要成分之一


Kafka

Kafka,一种高吞吐量的分布式发布订阅消息系统,提供实时消息功能。

消息

  • ActiveMQ
  • RabbitMQ
  • RocketMQ
  • Kafka

总结:

1.消息概念及作用
2.JMS
3.AMQP
4.MQTT


ActiveMQ安装

ActiveMQ

下载地址:https://activemq.apache.org/components/classic/download/

安装:解压缩

启动服务

activemq.bat

访问服务器

http://127.0.0.1:8161/
  • 服务端口:61616,管理后台端口:8161
  • 用户名&密码:admin

总结:
1.ActiveMQ下载与安装
2.ActiveMQ服务启动(控制台)


SpringBoot整合ActiveMQ

SpringBoot整合ActiveMQ

配置ActiveMQ(采用默认配置)

spring:activemq:broker-url: tcp://localhost:61616jms:pub-sub-domain: truetemplate:default-destination: itheima

生产与消费信息(使用默认消息存储队列)

@Service
public class MessageServiceActivemqImpl implements MessageService {@Autowiredprivate JmsMessagingTemplate jmsMessagingTemplate;public void sendMessage(String id) {System.out.println("使用Active将待发送消息的订单纳入处理队列,id:"+id);jmsMessagingTemplate.convertAndSend(id);}public String doMessage() {return jmsMessagingTemplate.receiveAndConvert(String.class);}
}

生产与消费信息(指定消息存储队列)

@Service
public class MessageServiceActivemqImpl implements MessageService {@Autowiredprivate JmsMessagingTemplate jmsMessagingTemplate;public void sendMessage(String id) {System.out.println("使用Active将待发送消息的订单纳入处理队列,id:"+id);jmsMessagingTemplate.convertAndSend("order.sm.queue.id",id);}public String doMessage() {return jmsMessagingTemplate.receiveAndConvert("order.sm.queue.id",String.class);}
}

使用消费监听器对消息队列监听

@Component
public class MessageListener {@JmsListener(destination = "order.sm.queue.id")public void receive(String id) {System.out.println("已完成短信发送业务,id"+id);}
}

流程性业务消息消费完转入下一个消息队列

@Component
public class MessageListener {@JmsListener(destination = "order.sm.queue.id")@SendTo("order.other.queue.id")public String receive(String id) {System.out.println("已完成短信发送业务,id:"+id);return "new:"+id;}
}

总结:

SpringBoot整合ActiveMQ


RabbitMQ安装

RabbitMQ

RabbitMQ基于Erlang语言编写,需要安装Erlang

Erlang:
    下载地址:https://www.erlang.org/downloads
    安装:一键傻瓜式安装,安装完毕需要重启,需要依赖Windows组件
    环境变量配置
        ERLANG_HOME
        PATH

RabbitMQ:
    下载地址:https://rabbitmq.com/install-windows.html
    安装:一键傻瓜式安装

    启动服务

rabbitmq-service.bat start

    关闭服务

rabbitmq-service.bat stop

    服务管理可视化(插件形式)

    查看已安装的插件列表

rabbitmq-plugins.bat list

    开启服务管理插件

rabbitmq-plugins.bat enable rabbitmq_management

    访问服务器

http://localhost:15672

        服务端口:5672,管理后台端口:15672
        用户名&密码:guest

总结:

1.Erlang下载与安装(环境变量配置)
2.RabbitMQ下载与安装
3.RabbitMQ服务启动(服务)
4.RabtitMQ服务管理


SpringBoot整合RabbitMQ

导入SpringBoot整合Rabbit MQ坐标

<dependency><groupId>org.springftamework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

配置RabbitMQ(采用默认配置)

spring:rabbitmq:host: localhostport: 5672

定义消息队列(direct)

@Configuration
public class RabbitDirectConfig {@Beanpublic Queue queue() {return new Queue("simple_queue");}
}
@Configuration
public class RabbitDirectConfig {@Beanpublic Queue queue() {// durable:是否持久化,默认false// exclusive:是否当前连接专用,默认false,连接关闭后队列即被删除// autoDelete:是否自动删除,当生产者或消费者不再使用此队列,自动删除return new Queue("simple_queue",true,false,false);}
}
@Configuration
public class RabbitDirectConfig {@Beanpublic Queue directQueue() {return new Queue("direct_queue");}@Beanpublic Queue directQueue() {return new Queue("direct_queue2");}@Beanpublic DirectExchange directExchange(){return new DirectExchange("directExchange");}@Beanpublic Binding bindingDirect(){return BindingBuilder.bind(directQueue()).to(directExchange()).with("direct");@Beanpublic Binding bindingDirect2(){return BindingBuilder.bind(directQueue()).to(directExchange()).with("direct2");
}

生产与消费消息(direct)

@Service
public class MessageServiceRabbitmqDirectImpl implements MessageService {@Autowiredprivate AmqpTemplate amqpTemplate;@Overridepublic void sendMessage(String id){System,out.println("使用Rabitmq将待发送的订单纳入处理列队,id:"+id);amqpTemplate.convertAndSend("directExchange","direct",id);}
}

使用消费监听器对消息队列监听(direct)

@Component
public class RabbitMessageListener {@RabbitListener(queues = "direct_queue")public void receive(String id){System.out.println("已完成短信发送业务,id:"+id);}
}

使用多消息监听器对消息队列监听进行消息轮循处理(direct)

@Component
public class RabbitMessageListener2 {@RabbitListener(queues = "direct_queue")public void receive(String id) {System.out.println("已完成短信发送业务(two),id:"+id);}
}

总结:

SpringBoot整合RabbitMQ直连交换机模式


SpringBoot整合RabbitMQ(topic模式)

SpringBoot整合RabbitMQ

定义消息队列(topic)


@Configuration
public class RabbitTopicConfig {@Beanpublic Queue topicQueue(){return new Queue("topic_queue");}@Beanpublic Queue topicQueue2(){return new Queue("topic_queue2");}@Beanpublic TopicExchange topicExchange(){return new TopicExchange("topicExchange");}@Beanpublic Binding bindingTopic(){return BindingBuilder.bind(topicQueue()).to(topicExchange()).with("topic.*.*");}@Beanpublic Binding bindingTopic2(){return BindingBuilder.bind(topicQueue2()).to(topicExchange()).with("topic.#");}
}

绑定键匹配规则
    (星号):用来表示一个单词,且单词是必须出现的

    #(井号):用来表示任意数量

匹配键topic..topic.#
topic.order.idtruetrue
order.topic.idfalsefalse
topic.sm.order.idfalsetrue
topic.sm.idfalsetrue
topic.id.ordertruetrue
topic.idfalsetrue
topic.orderfalsetrue

生产与消费信息(topic)

@service
public class MessageServiceRabbitmqTopicmp1 implements MessageService {@Autowiredprivate AmqpTemplate amqpTemplate;@Ovrridepublic void sendMessage(String id){System.out.println("使用Rabbitmq将待发送短信的订单纳入处理队列,id:"+id);amqpTemplate.convertAndSend("topicExchange","topic.order.id",id);}
}

使用消息监听器对消息队列监听(topic)

@Component
public class RabbitTopicMessageListener {@RabbitListener(queues = "topic_queue")public void receive(String id) {System.out.println("已完成短信发送业务,id:"+id);}@RabbitListener(queues = "topic_queue2")public void receive(String id) {System.out.println("已完成短信发送业务(two),id:"+id);}
}

总结:

SpringBoot整合RabbitMQ主题交换机模式


Rocket MQ安装

下载地址:https://rocketmq.apache.org/

安装:解压缩

    默认服务端口:9876

环境变量配置
    ROCKETMQ_HOME
    PATH
    NAMESRV_ADDR(建议):127.0.0.1:9876

启动命名服务器

mqnamesrv

启动broker

mqbroker

服务器功能测试:生产者

tools org.apache.rocketmq.example.quickstart.Producer

服务器功能测试:消费者

tools org.apache.rocketmq.example.quickstart.Consumer

SpringBoot整合RocketMQ坐标

<dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId><version>2.2.1</version>
</dependency>

配置RocketMQ(采用默认配置)

rocketmq:name-server: localhost:9876producer:group: group_rocketmq

生产消息

@Service
public class MessageServiceRocketmqImpl implements MessageService {@Autowiredprivate RocketMQTemplate rocketMQTemplate;@Overridepublic void sendMessage(String id) {rocketMQTemplate.convertAndSend("order_sm_id",id);System.out.println("使用Rabbitmq将待发送短信的订单纳入处理队列,id",id);}
}

生产异步消息

@Service
public class MessageServiceRocketmqImpl implements MessageService {@Autowiredprivate RocketMQTemplate rocketMQTemplate;@Overridepublic void sendMessage(String id) {SendCallback callback = new SendCallback() {@Overridepublic void onSuccess(SendResult sendResult) {System.out.println("消息发送成功");}@Overridepublic void onException(Throwable throwable) {System.out.println("消息发送失败!!!");}};System.out.println("使用Rabbitmq将待发送短信的订单纳入处理队列,id:"+id);rocketMQTemplate.asyncSend("order_sm_id",id,callback);}
}

使用消息监听器对消息队列监听

@Component
@RocketMQMessageListener(topic="order_sm_id",consumerGroup="group_rocketmq")
public class RocketmqMessageListener implements RocketMQListener<String> {@Overridepublic void onMessage(String id) {System.out.println("已完成短信发送业务,id"+id);}
}

总结:

SpringBoot整合RocketMQ


Kafka安装

Kafka

下载地址: http://kafka.apache.org/downloads
    windows系统下3.0.0版本存在BUG,建议使用2.X版本
安装:解压缩

启动zookeeper

zookeeper-server-start.bat ..\..\config\zookeeper.properties

    默认端口:2181

启动kafka

kafka-server-start.bat ..\..\config\server.properties

    默认端口:9092

创建topic

kafka-topics.bat --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic itheima

查看topic

kafka-topics.bat --zookeeper 127.0.0.1:2181 --list

删除topic

kafka-topics.bat --delete --zookeeper localhost:2181 --topic itheima

生产者功能测试

kafka-console-producer.bat --broker-list localhost:9092 --topic itheima

消费者功能测试

kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic itheima --from-beginning

总结:

1.Kafka下载与安装(环境变量配置)
2.zookeeper启动(控制台)
3.kafka服务启动(控制台)
4.topic维护
5.消费生产消费测试


SpringBoot整合Kafka

消息

导入SpringBoot整合Kafka坐标

<dependency><groupId?org.springframework.kafka</groupId><artifactId>spring-kafka</artifactId>
</dependency>

配置Kafka(采用默认配置)

spring:kafka:bootstrap-server: localhost:9092consumer:group-id: order

生产消息

@Service
public class MessageServiceKafkaImpl implements MessageService {@Autowiredprivate KafkaTemplate<String,String> kafkaTemplate;@Overridepublic void sendMessage(String id) {System.out.println("使用kafka将待发送短信的订单纳入处理队列,id:"+id);kafkaTemplate.send("kafka_topic",id);}
}

使用消息监听器对消息队列监听

@Component
public class KafkaMessageListener {@KafkaListener(topic = {"kafka_topic"})public void onMessage(ConsumerRecord<?,?> record) {System.out.println("已完成短信发送业务,id:"+record.value());}
}

总结:

SpringBoot整合Kafka

大总结:

1.消息
2.ActiveMQ
3.RabbitMQ
4.RocketMQ
5.Kafka

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_283665.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity --- 3d数学 --- 坐标系统

1.世界坐标系是固定不动的 2.每一个游戏物体在世界坐标系中都有对应的坐标和方向 1.轴心点的位置不是固定的&#xff0c;是可以人为设定的 1.Screen Space --- 屏幕坐标 2.我们看到的屏幕其实就是相机所在的平面的位置 --- 而屏幕坐标系的Z其实就是游戏中的物体到相机平面的…

开源DataX集成可视化项目Datax-Web的使用

上一篇文章我们已经搭建好了 Datax-Web 后台&#xff0c;这篇文章我们具体讲一下如何通过Datax-Web来配置&#xff0c;同步MySQL数据库。 目标 MySql数据库全量同步 1.执行器配置 1、"调度中心OnLine:"右侧显示在线的"调度中心"列表, 任务执行结束后, 将会…

钢铁侠材质制作——2、线条轮廓部分的制作

钢铁侠Unlit光照Shader&#xff0c;三种效果变化返回目录大家好&#xff0c;我是阿赵&#xff0c;这里是钢铁侠材质制作第二部分&#xff0c;线条轮廓部分的制作 为了实现这个效果&#xff0c;可以把细节拆分成以下几个部分&#xff1a; 1、轮廓光 1.效果分析 这是一个很基…

C生万物 | 十分钟带你学会位段相关知识

结构体相关知识可以先看看这篇文章 —— 链接 一、什么是位段 位段的声明和结构是类似的&#xff0c;有两个不同&#xff1a; 位段的成员必须是 int、unsigned int 或signed int位段的成员名后边有一个冒号和一个数字 在下面&#xff0c;我分别写了一个结构体和一个位段&…

手动构建自己的docker容器镜像实战

前言 之前的实战中&#xff0c;我们实战中&#xff0c;我们使用的镜像都是镜像仓库已有的镜像。 已有的镜像都是别人已经开发好上传的。今天我们一起来看看如何构建自己的镜像并上传到镜像仓库中。 &#x1f3e0;个人主页&#xff1a;我是沐风晓月 &#x1f9d1;个人简介&…

【Python】字符串 ⑤ ( Python 字符串快速格式化 | 不考虑变量类型 | 不考虑精度控制 )

文章目录一、Python 字符串快速格式化1、语法说明2、代码示例 - 不考虑变量类型3、代码示例 - 不考虑精度控制4、快速格式化的优点一、Python 字符串快速格式化 1、语法说明 Python 字符串快速格式化 : 通过如下格式的代码 , 可以进行字符串的快速格式化 ; f"字符串内容{…

vscode代码片段生成

在刚学习vue的时候&#xff0c;有些代码片段是经常写的&#xff0c;在vscode中写一个代码片段可以帮助快速生成。 生成步骤&#xff1a; VSCode中的代码片段有固定的格式&#xff0c;所以我们一般会借助于一个在线工具来完成。 具体的步骤如下: 第一步&#xff0c;复制自己需…

〖Python网络爬虫实战⑨〗- 正则表达式基本原理

订阅&#xff1a;新手可以订阅我的其他专栏。免费阶段订阅量1000 python项目实战 Python编程基础教程系列&#xff08;零基础小白搬砖逆袭) 说明&#xff1a;本专栏持续更新中&#xff0c;目前专栏免费订阅&#xff0c;在转为付费专栏前订阅本专栏的&#xff0c;可以免费订阅付…

Mac PicGo可以上传GitHub但是不能显示

Mac PicGo可以上传到GitHub但是本地不能显示&#xff08;已经加载的&#xff09;图片 背景&#xff1a;使用Typora PicGo GitHub 图床。 文章目录Mac PicGo可以上传到GitHub但是本地不能显示&#xff08;已经加载的&#xff09;图片1. Bug表现2. 解决方法&#xff08;1&…

【好书推荐】认知觉醒:开启自我改变的原动力

书籍信息 书名&#xff1a;认知觉醒&#xff1a;开启自我改变的原动力 作者&#xff1a; 周岭 出版社&#xff1a; 人民邮电出版社 认知觉醒的基础 重新认识大脑 在我们的大脑里&#xff0c;由内到外至少有三重大脑&#xff1a;年代久远的本能脑、相对古老的情绪脑和非常年…

【C语言深入】逐汇编详解函数栈帧的创建和销毁过程

【C语言深入】逐汇编详解函数栈帧的创建和销毁过程一、图解大概过程二、函数栈帧的创建过程1、简介一些需要用到的汇编指令和寄存器2、调用main函数的函数3、局部变量的初始化4、形成临时拷贝5、函数调用6、形成栈帧7、提取临时拷贝8、return返回三、函数栈帧的销毁过程1、释放…

python:异常处理与文件操作(知识点详解+代码展示)

文章目录一、异常处理1、try...except语句2、finally语句二、断言1、定义2、举例例一&#xff1a;例二&#xff1a;三、文件操作1、写文件操作2、读文件操作&#xff08;当你心情低落时候&#xff0c;记得外面还有美好的风景&#xff01;&#xff09; 学习目标&#xff1a; 1、…

堆相关的面试题

文章目录1. 距离不超过k的推排序2. 最大线段重合问题1. 距离不超过k的推排序 题目&#xff1a;已知一个几乎有序的数组。几乎有序是指&#xff0c;如果把数组排好顺序的话&#xff0c;每个元素移动的距离一定不超过k&#xff0c;并且k相对于数组长度来说是比较小的。 请选择一…

WinRAR压缩解压文件

使用WinRAR压缩管理器压缩解压文件详细步骤如下&#xff1a; ■ 压缩文件 ① 鼠标右键需要压缩的文件&#xff0c;点击“添加到压缩文件”&#xff0c;具体操作步骤如图所示&#xff1a; ② 压缩后的对应文件压缩包会显示在桌面&#xff0c;如图所示&#xff1a; ■ 解压文件 …

如何设计一个高并发系统

目录 如何理解高并发系统 1. 分而治之&#xff0c;横向扩展 2. 微服务拆分&#xff08;系统拆分&#xff09; 3. 分库分表 4. 池化技术 5. 主从分离 6. 使用缓存 7. CDN——加速静态资源访问 8. 消息队列——削锋 9. ElasticSearch 10. 降级熔断 11. 限流 12. 异步…

【OpenLayers】VUE+OpenLayers+ElementUI加载WMS地图服务

【OpenLayers】VUEOpenLayersElementUI加载WMS地图服务准备工作安装vue创建vue项目安装OpenLayers安装ElementUI加载wms地图服务准备工作 需要安装好nodejs&#xff0c;nodejs下载地址&#xff0c;下载对应的版本向导式安装即可。 安装完成后&#xff0c;控制台输入node -v&a…

【CentOS 7安装MySQL 8的教程指南】

CentOS 7安装MySQL 8 添加MySQL官方源 wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm sudo rpm -ivh mysql80-community-release-el7-3.noarch.rpm安装MySQL 8 sudo yum install mysql-community-server安装失败执行下面的命令并再次执行安装…

进程与线程的区别和联系

进程与线程的区别和联系&#x1f50e;进程&#x1f50e;线程&#x1f50e;进程与线程的联系&#x1f50e;进程与线程的区别&#x1f50e;总结&#x1f50e; 结尾&#x1f50e;进程 进程简单来说就是运行着的程序 如果不太理解可以参考一下这篇文章 进程 &#x1f50e;线程 …

【MySQL--01】数据库基础

文章目录1.什么是数据库2.主流数据库2.1 MySQLMySQL架构实例3.基本使用3.1 MySQL的安装3.2 连接服务器3.3服务器管理4.服务器&#xff0c;数据库&#xff0c;表之间的关系5.使用数据库6.SQL分类7.存储引擎查看存储引擎存储引擎对比1.什么是数据库 数据库是用来存储数据的。那么…

Java BigDecimal学习

文章目录Java BigDecimal不损失精度的方法Java BigDecimal的几种舍入模式1、UP(BigDecimal.ROUND_UP)2、DOWN(BigDecimal.ROUND_DOWN)3、CEILING(BigDecimal.ROUND_CEILING)4、FLOOR(BigDecimal.ROUND_FLOOR)5、HALF_UP(BigDecimal.ROUND_HALF_UP)6、HALF_DOWN(BigDecimal.ROUN…