【SpringCloud详细教程】-02-微服务环境搭建

 精品专题:

01.《C语言从不挂科到高绩点》课程详细笔记

https://blog.csdn.net/yueyehuguang/category_12753294.html?spm=1001.2014.3001.5482

02. 《SpringBoot详细教程》课程详细笔记

https://blog.csdn.net/yueyehuguang/category_12789841.html?spm=1001.2014.3001.5482

03.《SpringBoot电脑商城项目》课程详细笔记

https://blog.csdn.net/yueyehuguang/category_12752883.html?spm=1001.2014.3001.5482

04.《VUE3.0 核心教程》课程详细笔记 

https://blog.csdn.net/yueyehuguang/category_12769996.html?spm=1001.2014.3001.5482

05. 《SSM详细教程》课程详细笔记 

https://blog.csdn.net/yueyehuguang/category_12806942.html?spm=1001.2014.3001.5482

================================

||     持续分享系列教程,关注一下不迷路 ||

||                视频教程:墨轩大楼               ||

================================

在上一章节中我们已经大体了解了微服务以及微服务的实现技术,本教程主要讲解SpringCloud Alibaba的技术栈。

🌲 2.1 案例准备

🌿 2.1.1 技术选型

maven:3.6.3

数据库:mysql 8.0

持久层框架:mybatis 2.3.1、mybatisPlus

SpringBoot版本:2.7.17

cloud:SpringCloud Alibaba 技术栈 3.4.1

🌿 2.1.2 模块设计

父工程:spring-cloud

公共模块:shop-common 【工具类、实体类】

用户微服务:shop-user 【端口:801x】

商品微服务:shop-product 【端口:802x】

订单微服务:shop-order 【端口:803x】

🌿 2.1.3 微服务调用

在微服务架构中,最常见的场景就是微服务之间的相互调用。我们以电商系统中常见的用户下单为例来演示微服务的调用:客户向订单微服务发起一个下单的请求,在进行保存订单之前需要调用商品微服务查询商品的信息。

我们一般把服务的主动调用方称为服务消费者,把服务的被调用方称为服务提供者

在这种场景下,订单微服务就是一个服务消费者, 商品微服务就是一个服务提供者。

🌲 2.2 创建父工程

创建一个SpringBoot2.7.17版本项目,添加相关依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.17</version><relativePath/> <!-- lookup parent from repository --></parent><packaging>pom</packaging><groupId>com.moxuan</groupId><artifactId>spring_cloud</artifactId><version>0.0.1-SNAPSHOT</version><name>spring_cloud</name><description>Demo project for Spring Boot</description><properties><java.version>17</java.version><spring-cloud.version>2021.0.3</spring-cloud.version><spring-cloud-alibaba.version>2021.0.4.0</spring-cloud-alibaba.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><type>pom</type><version>${spring-cloud-alibaba.version}</version><scope>import</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter-test</artifactId><version>2.3.1</version><scope>test</scope></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.1</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.16</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.8.1</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.56</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

🌲 2.3 创建公共模块

创建公共模块shop-common,在pom.xml中将父模块设置为前面创建的spring-cloud模块。pom.xml具体如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.moxuan</groupId><artifactId>spring_cloud</artifactId><version>0.0.1-SNAPSHOT</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.moxuan</groupId><artifactId>shop-common</artifactId><version>0.0.1-SNAPSHOT</version><name>shop-common</name><description>Demo project for Spring Boot</description><properties><java.version>17</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

创建实体类,将项目中所需要的实体类都创建到这个模块里面

package com.moxuan.shopcommon.entity;import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;@Data
@TableName("t_user")
public class User {private Integer uid;private String email;private String password;private String nickname;
}
package com.moxuan.shopcommon.entity;import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@NoArgsConstructor
@TableName("t_product")
public class Product {@TableId(type= IdType.AUTO)private Integer pid;private String pname;// 商品名称private Double pprice; // 商品价格private Integer stock; // 库存public Product(String pname, Double pprice, Integer stock) {this.pname = pname;this.pprice = pprice;this.stock = stock;}
}
package com.moxuan.shopcommon.entity;import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;@Data
@TableName("t_order")
public class Order {// 订单id@TableId(type = IdType.AUTO)private Long oid;private Integer uid; // 用户idprivate String username;// 用户名private Integer pid;// 商品idprivate String pname;  // 商品名称private Double pprice; // 商品价格private Integer num;// 购买数量
}

创建向前端统一返回数据的工具类

package com.moxuan.shopcommon.util;import java.util.HashMap;
import java.util.Map;/**** 返回码*/
public enum ReturnCode {/*********************************************全局ReturnCode(请勿改动)*********************************************/SUCCESS("0000", "成功完成操作"),BUSSINESS_EXCEPTION("10000", "业务系统异常"),NO_RESULT("10001", "查询无结果"),MULTI_RESULT("10002", "查询结果不唯一"),EXPORT_EXCEL_ERROR("10004", "导出Excel异常"),USER_NOT_LOGIN("90000", "用户未登录"),ACCESS_FORBIDDEN("90001","无访问权限"), AUTHENTICATION_FAILURE("90002","认证失败"), TOKEN_FORBIDDEN("90003","无访问口令,请先登陆后获取"), TOKEN_EXPIRE("90004","Token失效,需要重新登陆"), TOKEN_ERROR("90005","Token创建出错,请联系管理员"),USER_LOGIN_ERROR("90006","账号或者密码错误"),SYSTEM_ERROR("99999", "系统繁忙,请稍后再试.");/*** 返回码*/private String code;/*** 返回信息*/private String msg;ReturnCode(String code, String msg) {this.code = code;this.msg = msg;}public String code() {return this.code;}public String msg() {return this.msg;}public Map<String, String> toMap() {Map<String, String> map = new HashMap<>();map.put("msg", this.msg);map.put("code", this.code);return map;}
}
package com.moxuan.shopcommon.util;import com.alibaba.fastjson.JSON;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;/*** 封装结果的工具类*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Result {private String Code;private Object data;// 数据源private String msg;public static Result sendResult(ReturnCode returnCode) {Result result = new Result();result.setCode(returnCode.code());result.setMsg(returnCode.msg());return result;}public static Result sendResult(ReturnCode returnCode,Object data){Result result = sendResult(returnCode);String jsonData = JSON.toJSONString(data);result.setData(jsonData);return result;}
}

🌲 2.4 创建用户微服务

新建一个 shop-user 模块,然后进行下面操作

  1. 导入依赖,需要引入父模块以及公共模块
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.moxuan</groupId><artifactId>spring_cloud</artifactId><version>0.0.1-SNAPSHOT</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.moxuan</groupId><artifactId>shop-user</artifactId><version>0.0.1-SNAPSHOT</version><name>shop-user</name><description>Demo project for Spring Boot</description><properties><java.version>17</java.version></properties><dependencies><dependency><groupId>com.moxuan</groupId><artifactId>shop-common</artifactId><version>0.0.1-SNAPSHOT</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
  1. 添加配置文件
server.port=8011
spring.application.name=service-user
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/cloud
spring.datasource.username=root
spring.datasource.password=123456

🌲 2.5 创建商品微服务

创建一个名为 shop_product 的模块,并添加springboot依赖、父模块、公共模块

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.moxuan</groupId><artifactId>spring_cloud</artifactId><version>0.0.1-SNAPSHOT</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.moxuan</groupId><artifactId>shop-product</artifactId><version>0.0.1-SNAPSHOT</version><name>shop-product</name><description>Demo project for Spring Boot</description><properties><java.version>17</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>com.moxuan</groupId><artifactId>shop-common</artifactId><version>0.0.1-SNAPSHOT</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

添加配置文件

server.port=8021
spring.application.name=service-product
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/cloud
spring.datasource.username=root
spring.datasource.password=123456

创建ProductMapper

package com.moxuan.shopproduct.dao;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.moxuan.shopcommon.entity.Product;public interface ProductMapper extends BaseMapper<Product> {
}

在启动类中开启MP接口扫描

package com.moxuan.shopproduct;import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
@MapperScan("com.moxuan.shopproduct.dao")
public class ShopProductApplication {public static void main(String[] args) {SpringApplication.run(ShopProductApplication.class, args);}}

创建ProductService以及实现类

package com.moxuan.shopproduct.service;import com.moxuan.shopcommon.util.Result;public interface ProductService {Result getProductById(int pid);Result saveProductBeach();
}
package com.moxuan.shopproduct.service.impl;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.moxuan.shopcommon.entity.Product;
import com.moxuan.shopcommon.util.Result;
import com.moxuan.shopcommon.util.ReturnCode;
import com.moxuan.shopproduct.dao.ProductMapper;
import com.moxuan.shopproduct.service.ProductService;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.ArrayList;
import java.util.List;@Service
public class ProductServiceImpl extends ServiceImpl<ProductMapper,Product> implements ProductService {@Autowiredprivate ProductMapper productMapper;public Result getProductById(int pid) {QueryWrapper<Product> qw = new QueryWrapper<>();qw.lambda().eq(Product::getPid,pid);Product product = productMapper.selectOne(qw);if(product==null){return Result.sendResult(ReturnCode.NO_RESULT);}return Result.sendResult(ReturnCode.SUCCESS,product);}/*** 批量插入数据* @return*/public Result saveProductBeach() {List<Product> productList = new ArrayList<>();productList.add(new Product("小米",1000.0,5000));productList.add(new Product("华为",2000.0,5000));productList.add(new Product("苹果",3000.0,5000));productList.add(new Product("OPPO",2000.0,5000));boolean flag = saveBatch(productList);if(!flag){return Result.sendResult(ReturnCode.BUSSINESS_EXCEPTION);}return Result.sendResult(ReturnCode.SUCCESS);}
}

创建控制器类Controller

package com.moxuan.shopproduct.controller;import com.moxuan.shopcommon.entity.Product;
import com.moxuan.shopcommon.util.Result;
import com.moxuan.shopproduct.service.ProductService;
import com.moxuan.shopproduct.service.impl.ProductServiceImpl;import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.ArrayList;
import java.util.List;@RestController
@Slf4j
public class ProductController {@Autowiredprivate ProductService productService;@GetMapping("/product/{pid}")public Result product(@PathVariable("pid") int pid){Result result = productService.getProductById(pid);log.info("查询到商品:"+result);return result;}@PostMapping("/product/sa")public Result saveProductBeach(){Result result = productService.saveProductBeach();return result;}}

启动项目,先访问http://localhost:8021/product/sa 批量添加数据

然后再访问: http://localhost:8021/product/1 看能否查询到数据

🌲 2.6 创建订单微服务

创建一个名为 shop-order 的模块,并添加springboot依赖、父模块、公共模块

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.moxuan</groupId><artifactId>spring_cloud</artifactId><version>0.0.1-SNAPSHOT</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.moxuan</groupId><artifactId>shop-order</artifactId><version>0.0.1-SNAPSHOT</version><name>shop-order</name><description>Demo project for Spring Boot</description><properties><java.version>17</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>com.moxuan</groupId><artifactId>shop-common</artifactId><version>0.0.1-SNAPSHOT</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

添加配置文件

server.port=8031spring.application.name=service-productspring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/cloud
spring.datasource.username=root
spring.datasource.password=123456

创建OrderMapper接口

package com.moxuan.shoporder.dao;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.moxuan.shopcommon.entity.Order;
import org.apache.ibatis.annotations.Mapper;@Mapper
public interface OrderMapper extends BaseMapper<Order> {}

在启动类中开启mp注解扫描,并添加RestTemplateBean,方便后续微服务之间的数据通信

package com.moxuan.shoporder;import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;@SpringBootApplication
@MapperScan("com.moxuan.shoporder.dao")
public class ShopOrderApplication {public static void main(String[] args) {SpringApplication.run(ShopOrderApplication.class, args);}/*** org.springframework.web.client.RestTemplate;* 可以用来调用其他微服务* @return*/@Beanpublic RestTemplate getRestTemplate(){return new RestTemplate();}
}

创建OrderService以及实现类

package com.moxuan.shoporder.service;import com.moxuan.shopcommon.entity.Order;
import com.moxuan.shopcommon.util.Result;public interface OrderService {Result saveOrder(Order order);
}
package com.moxuan.shoporder.service.impl;import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.moxuan.shopcommon.entity.Order;
import com.moxuan.shopcommon.util.Result;
import com.moxuan.shopcommon.util.ReturnCode;
import com.moxuan.shoporder.dao.OrderMapper;
import com.moxuan.shoporder.service.OrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements OrderService {@Autowiredprivate OrderMapper orderMapper;@Overridepublic Result saveOrder(Order order) {int num = orderMapper.insert(order);if(num==0){return Result.sendResult(ReturnCode.BUSSINESS_EXCEPTION);}return Result.sendResult(ReturnCode.SUCCESS);}
}

创建OrderController

package com.moxuan.shoporder.controller;import com.alibaba.fastjson.JSON;
import com.moxuan.shopcommon.entity.Order;
import com.moxuan.shopcommon.entity.Product;
import com.moxuan.shopcommon.util.Result;
import com.moxuan.shoporder.service.OrderService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;import java.util.HashMap;
import java.util.Map;@RestController
@Slf4j
public class OrderController {@Autowiredprivate OrderService orderService;@Autowiredprivate RestTemplate restTemplate;@GetMapping("/order/prod/{pid}")public Result order(@PathVariable("pid")Integer pid){log.info(">> 客户下单,这时候要调用商品微服务查询商品信息");// 通过restTemplate调用商品微服务Result result = restTemplate.getForObject("http://localhost:8021/product/"+pid,Result.class);log.info("商品信息>> 查询结果"+result.getData());//        Map<String,Object> pro =
//                (HashMap<String, Object>) result.getData();
//
//        Order order = new Order();
//        order.setUid(1);
//        order.setUsername("墨轩");
//        order.setPid((Integer)pro.get("pid"));
//        order.setPname((String)pro.get("pname"));
//        order.setPprice((Double)pro.get("pprice"));
//        order.setNumber(1);Product pro = JSON.parseObject(result.getData().toString(),Product.class);System.out.println(pro);Order order = new Order();order.setUid(1);order.setUsername("墨轩");order.setPid(pro.getPid());order.setPname(pro.getPname());order.setPprice(pro.getPprice());order.setNum(1);result = orderService.saveOrder(order);return result;}}

启动项目,测试生成订单

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

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

相关文章

BOM的详细讲解

BOM概述 BOM简介 BOM&#xff08;browser Object&#xff09;即浏览器对象模型&#xff0c;它提供了独立于内容而与浏览器窗口进行交互的对象&#xff0c;其核心对象是window。 BOM由一系列的对象构成&#xff0c;并且每个对象都提供了很多方法与属性 BOM缺乏标准&#xff…

Jenkins下载安装、构建部署到linux远程启动运行

Jenkins详细教程 Winodws下载安装Jenkins一、Jenkins配置Plugins插件管理1、汉化插件2、Maven插件3、重启Jenkins&#xff1a;Restart Safely插件4、文件传输&#xff1a;Publish Over SSH5、gitee插件6、清理插件&#xff1a;workspace cleanup system系统配置1、Gitee配置2、…

数据分析——Python绘制实时的动态折线图

最近在做视觉应用开发&#xff0c;有个需求需要实时获取当前识别到的位姿点位是否有突变&#xff0c;从而确认是否是视觉算法的问题&#xff0c;发现Python的Matplotlib进行绘制比较方便。 目录 1.数据绘制2.绘制实时的动态折线图3.保存实时数据到CSV文件中 import matplotlib.…

Unity 使用 ExcelDataReader 读取Excel表

文章目录 1.下载NuGet包2.通过NuGet包获取dll3.将dll复制unity Plugins文件夹下4.代码获取Excel表内容 1.下载NuGet包 通过NuGet下载&#xff1a; ExcelDataReaderExcelDataReader.DataSet离线下载方法 2.通过NuGet包获取dll 根据编译时程序集找到dll位置&#xff0c;找到与…

【vmware+ubuntu16.04】ROS学习_博物馆仿真克隆ROS-Academy-for-Beginners软件包处理依赖报错问题

首先安装git 进入终端&#xff0c;输入sudo apt-get install git 安装后&#xff0c;创建一个工作空间名为tutorial_ws&#xff0c; 输入 mkdir tutorial_ws#创建工作空间 cd tutorial_ws#进入 mkdir src cd src git clone https://github.com/DroidAITech/ROS-Academy-for-Be…

九、FOC原理详解

1、FOC简介 FOC&#xff08;field-oriented control&#xff09;为磁场定向控制&#xff0c;又称为矢量控制&#xff08;vectorcontrol&#xff09;&#xff0c;是目前无刷直流电机&#xff08;BLDC&#xff09;和永磁同步电机&#xff08;PMSM&#xff09;高效控制的最佳选择…

Linux的指令(三)

1.grep指令 功能&#xff1a; 在文件中搜索字符串&#xff0c;将找到的行打印出来 -i&#xff1a;忽略大小写的不同&#xff0c;所以大小写视为一样 -n&#xff1a;顺便输出行号 -v:反向选择&#xff0c;就是显示出没有你输入要搜索内容的内容 代码示例&#xff1a; roo…

2025蓝桥杯(单片机)备赛--扩展外设之DS1302的使用(九)

1.DS1302数据手册的使用 a. DS1302 features: 工作电压&#xff1a;2V-5.5V 通信协议&#xff1a;3线接口&#xff08;CE、IO、SCLK&#xff09; 计时&#xff1a;秒、分、小时、月日期、月、星期、年&#xff08;闰年补偿器期至2100年&#xff09; b.原理图接线说明&#xff…

在CentOS中,通过nginx访问php

其实是nginx反向代理到php-fpm&#xff0c;就像nginx反向代理到tomcat。 1、安装PHP-FPM 1.1 安装 yum install php yum install php-fpm php-common 这里只安装了php-fpm&#xff0c;根据需要安装php模块&#xff0c;比如需要访问mysql则添加安装 php-mysqlnd。 1.2 启动…

Photino:通过.NET Core构建跨平台桌面应用程序,.net国产系统

一、Photino.NET简介&#xff1a; 最近发现了一个不错的框架 Photino.Net 一份代码运行&#xff0c;三个平台 windows max linux &#xff0c;其中windows10,windows11,ubuntu 18.04,ubuntu 20.04 已测试均可以。mac 因为没有相关电脑没有测试。 github:https://github.com/t…

编辑器vim 命令的学习

1.编辑器Vim 1.vim是一个专注的编辑器 2.是一个支持多模式的编辑器 1.1见一见&#xff1a; vim 的本质也是一条命令 退出来&#xff1a;-> Shift:q 先创建一个文件 再打开这个文件 进入后先按 I 然后就可以输入了 输入完后&#xff0c;保存退出 按Esc --> 来到最后一…

Ubuntu22.04LTS 部署前后端分离项目

一、安装mysql8.0 1. 安装mysql8.0 # 更新安装包管理工具 sudo apt-get update # 安装 mysql数据库&#xff0c;过程中的选项选择 y sudo apt-get install mysql-server # 启动mysql命令如下 &#xff08;停止mysql的命令为&#xff1a;sudo service mysql stop&#xff0…

Python爬虫:如何从1688阿里巴巴获取公司信息

在当今的数字化时代&#xff0c;数据已成为企业决策和市场分析的重要资产。对于市场研究人员和企业分析师来说&#xff0c;能够快速获取和分析大量数据至关重要。阿里巴巴的1688.com作为中国最大的B2B电子商务平台之一&#xff0c;拥有海量的企业档案和产品信息。本文将介绍如何…

10 基于深度学习的目标检测

首次完成时间&#xff1a;2024 年 11月 20 日 1. 使用OpenCV的dnn模块实现图像分类。 1&#xff09;程序代码&#xff1a; import numpy as np import cv2# 解析标签文件 row open("model1/synset_words.txt").read().strip().split("\n") class_label …

Spring WebFlux 高级实战(3-2)

1、SpringBoot 使用 1.1、Spring Core 中的响应式 Spring 生态系统的核心模块是Spring Core 模块。Spring 5.x 引入对响应式流和响应式库的原生支持&#xff0c;其中&#xff0c;响应式库包含RxJava 1/2 和Project Reactor 3。 1.1.1、响应式类型转换支持 为了支持响应式流规…

河道水位流量一体化自动监测系统:航运安全的护航使者

在广袤的水域世界中&#xff0c;航运安全始终是至关重要的课题。而河道水位流量一体化自动监测系统的出现&#xff0c;如同一位强大的护航使者&#xff0c;为航运事业的稳定发展提供了坚实的保障。 水位传感器&#xff1a;负责实时监测河道的水位变化。这些传感器通常采用先进的…

RHCE的学习(21)

第三章 Shell条件测试 用途 为了能够正确处理Shell程序运行过程中遇到的各种情况&#xff0c;Linux Shell提供了一组测试运算符。 通过这些运算符&#xff0c;Shell程序能够判断某种或者几个条件是否成立。 条件测试在各种流程控制语句&#xff0c;例如判断语句和循环语句中…

uni-app Vue3语法实现微信小程序样式穿透uview-plus框架

1 问题描述 我在用 uni-app vue3 语法开发微信小程序时&#xff0c;在项目中使用了 uview-plus 这一开源 UI 框架。在使用 up-text 组件时&#xff0c;想要给它添加一些样式&#xff0c;之前了解到微信小程序存在样式隔离的问题&#xff0c;也在uview-plus官网-注意事项中找到…

数据结构(双向链表——c语言实现)

双向链表相比于单向链表的优势&#xff1a; 1. 双向遍历的灵活性 双向链表&#xff1a;由于每个节点都包含指向前一个节点和下一个节点的指针&#xff0c;因此可以从头节点遍历到尾节点&#xff0c;也可以从尾节点遍历到头节点。这种双向遍历的灵活性使得在某些算法和操作中&a…

论文分享 | FuzzLLM:一种用于发现大语言模型中越狱漏洞的通用模糊测试框架

大语言模型是当前人工智能领域的前沿研究方向&#xff0c;在安全性方面大语言模型存在一些挑战和问题。分享一篇发表于2024年ICASSP会议的论文FuzzLLM&#xff0c;它设计了一种模糊测试框架&#xff0c;利用模型的能力去测试模型对越狱攻击的防护水平。 论文摘要 大语言模型中…