Dubbo集成Nacos作为注册中心

news2024/11/27 4:21:53

Nacos简介

什么是Nacos?

  • Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

  • Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

  • Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

  • 服务(Service)是 Nacos 世界的一等公民。Nacos 支持几乎所有主流类型的“服务”的发现、配置和管理:

    • Kubernetes Service
    • gRPC & Dubbo RPC Service
    • Spring Cloud RESTful Service

Nacos的关键特性

  • 服务发现和服务健康监测
  • 动态配置服务
  • 动态 DNS 服务
  • 服务及其元数据管理

说明:因为Dubbo和Nacos的应用场景一般都是在微服务项目中,所以接下来以SpringCloud项目为基础,展示Dubbo集成Nacos作为注册中心

Nacos 安装及入门

看我的另外一篇文章:https://blog.csdn.net/java_cpp_/article/details/128052696

项目目录总览

在这里插入图片描述
以上均是Maven项目

Step01-搭建SpringCloud父项目

使用IDEA创建一个普通的Maven项目,项目名自定义即可也可以跟我一样命名为pringCloud-Dubbo-Nacos,删除src目录
重点是配置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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.mxf</groupId>
    <artifactId>SpringCloud-Dubbo-Nacos</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    
    <modules>  <!-后续创建子项目才有以下配置-->
        <module>ShopService</module>
        <module>ShopService-Provider-8081</module>
        <module>ShopService-Provider-8082</module>
        <module>ShopService-Consumer-9091</module>
    </modules>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <spring.cloud.version>2021.0.5</spring.cloud.version>
        <spring.boot.version>2.6.13</spring.boot.version>
        <junit.version>4.12</junit.version>
        <log4j.version>1.2.17</log4j.version>
        <lombok.version>1.18.22</lombok.version>
        <mysql-connector-java.version>8.0.22</mysql-connector-java.version>
        <mybatis.plus.version>3.4.3.4</mybatis.plus.version>
        <spring.cloud.nacos.version>2021.0.4.0</spring.cloud.nacos.version><!--2.2.6.RELEASE-->
        <spring.cloud.dubbo.version>3.1.2</spring.cloud.dubbo.version>
        <nacos.version>2.1.1</nacos.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <!--spring-cloud依赖-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring.cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <!--spring-boot依赖-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring.boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <!--集成Nacos实现服务注册与发现-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
                <version>${spring.cloud.nacos.version}</version>
            </dependency>

            <!--集成Nacos实现动态配置管理-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
                <version>${spring.cloud.nacos.version}</version>
            </dependency>

            <dependency>
                <groupId>com.alibaba.nacos</groupId>
                <artifactId>nacos-client</artifactId>
                <version>${nacos.version}</version>
            </dependency>

            <!--sentinel:服务限流、降级、熔断-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
                <version>${spring.cloud.nacos.version}</version>
            </dependency>

            <!--集成Dubbo实现服务的远程调用-->
            <!--<dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-dubbo</artifactId>
                <version>${spring.cloud.dubbo.version}</version>
            </dependency>-->
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo-spring-boot-starter</artifactId>
                <version>${spring.cloud.dubbo.version}</version>
            </dependency>

            <!--数据库-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql-connector-java.version}</version>
            </dependency>
            
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>${lombok.version}</version>
            </dependency>
            <!--mybatis 启动器-->
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>${mybatis.plus.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

</project>

注意的是依赖版本尽量跟我一致,否则后续项目启动的时候会出现迷惑性bug(例如:启动时dubbo、nacos报出现循环依赖的问题),到此SpringCloud父项目就搭建完毕

Step02-服务接口模块

服务接口,我是一个购物服务为背景设计相关接口的,本模块可自定义,不一定要按照我的来
总览
在这里插入图片描述
重点是服务接口的定义

public interface ShopService {

    // 查询所有商品
    List<Goods> queryAll();

    // 根据名称模糊搜索
    List<Goods> queryByName(String name);

    // 添加商品
    int addGoods(Goods goods);

    // 根据ID删除商品
    int delGoods(int id);

    // 购买商品
    int shopping(int id);

    // 测试使用
    String hello(String name);
}

业务实体类(自由发挥):

@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
public class Goods implements Serializable {

    private Integer id;

    private String name;

    private Double price;

    private Integer nums; // 库存

    private String description;
}

服务接口主要是定义后续的服务功能,比较简单

Step03-服务提供者模块

该模块主要是去实现前面编写的服务接口,用来完成具体的业务逻辑
总览
在这里插入图片描述

首先在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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>SpringCloud-Dubbo-Nacos</artifactId>
        <groupId>com.mxf</groupId>
        <version>1.0-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>ShopService-Provider-8081</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.mxf</groupId>
            <artifactId>ShopService</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

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

        <!--集成Nacos实现服务注册与发现-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

        <!--集成Nacos实现动态配置管理-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-client</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
        </dependency>

        <!--集成Dubbo实现服务的远程调用-->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
        </dependency>

        <!--数据库-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

        <!--mybatis 启动器-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
        </dependency>
    </dependencies>

</project>

依赖成功引入后,就先编写配置文件application.yaml,上面截图中有个bootstrap.yml,该文件是后续使用Nacos作为配置中心时才需要的,我会更新后续教程,暂时把所有配置配置到本地项目即可
application.yaml

server:
  port: 8081
mybatis-plus:
  mapper-locations: classpath:mapper/*.xml
spring:
  application:
    name: provider_application_8081
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://192.168.11.219:3306/test?useSSL=true&characterEncoding=utf-8&serverTimeZone=Asia/Shanghai&useUnicode=true
    username: root
    password: 123456
# dubbo的配置
dubbo:
  application:
    name: provider_application_8081	#配置应用名是为了加以区分不同的服务提供者
  protocol:
    name: dubbo
    port: -1 # 端口设置为-1 是让dubbo自动在[20880, 65536]之间找一个可用的端口
  registry:
    id: nacos-registry
    address: nacos://192.168.11.233:8848	# 在此配置nacos服务的IP地址及端口
  config-center:	# 可选
    address: nacos://192.168.11.233:8848
  metadata-report:	# 可选
    address: nacos://192.168.11.233:8848

下面重点介绍服务实现类ShopServiceImpl

/**
 * 用 @DubboService 注解标记,就可以实现 Dubbo 的服务暴露
 * 如果要设置服务参数,@DubboService 也提供了常用参数的设置方式。如果有更复杂的参数设置需求,则可以考虑使用其他设置方式
 * @DubboService(version = "1.0.0", group = "dev", timeout = 5000)
 */
@DubboService
@Service
public class ShopServiceImpl implements ShopService { // 实现前面定义的服务接口

    @Autowired
    private GoodsService goodsService; // 使用MyBaits-Plus做业务层持久框架实现的DAO层服务类,该服务自行实现,就不展示

    @Value("${spring.application.name}")
    private String applicationName; // 把服务名注入进来主要是用来识别不同服务提供者

    @Override
    public List<Goods> queryAll() {
        return goodsService.list();
    }

    @Override
    public List<Goods> queryByName(String name) {

        QueryWrapper<Goods> wrapper = new QueryWrapper<>();
        wrapper.like("name", name);

        return goodsService.list(wrapper); 
    }

    @Override
    public int addGoods(Goods goods) {
        return goodsService.save(goods) ? 1 : 0;
    }

    @Override
    public int delGoods(int id) {
        return goodsService.removeById(id) ? 1 : 0;
    }

    @Override
    public int shopping(int id) {
        return goodsService.shopping(id);
    }

    @Override
    public String hello(String name) {
        return "Hello: " + name + " From " + applicationName;
    }
}

启动类的编写

@SpringBootApplication
@EnableDubbo	// @EnableDubbo 注解必须配置,否则将无法加载 Dubbo 注解定义的服务,@EnableDubbo 可以定义在主类上
public class ProviderApplication_8081 {
    public static void main(String[] args) {
        SpringApplication.run(ProviderApplication_8081.class, args);
    }
}

OK,持久层代码就不展示了较为容易实现都是固定写法,一个端口为8081的服务提供者模块编写成完成,接下来在编写运行在8082端口的服务。

Step04-8082端口上的服务提供者

该模块跟8081服务全部一样,直接复制上面那个项目进行部分修改即可
总览:
在这里插入图片描述

  • 改下启动类的类名
  • 修改配置文件中的端口及应用名
server:
  port: 8082
mybatis-plus:
  mapper-locations: classpath:mapper/*.xml
spring:
  application:
    name: provider_application_8082
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://192.168.11.219:3306/test?useSSL=true&characterEncoding=utf-8&serverTimeZone=Asia/Shanghai&useUnicode=true
    username: root
    password: mxf520
# dubbo的配置
dubbo:
  application:
    name: provider_application_8082
  protocol:
    name: dubbo
    port: -1
  registry:
    id: nacos-registry
    address: nacos://192.168.11.233:8848
  config-center:
    address: nacos://192.168.11.233:8848
  metadata-report:
    address: nacos://192.168.11.233:8848

到此服务提供者模块全部实现

Step05-服务消费者模块

该模块主要是调用8081、8082端口的服务
总览:
在这里插入图片描述
导入依赖:

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>SpringCloud-Dubbo-Nacos</artifactId>
        <groupId>com.mxf</groupId>
        <version>1.0-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>ShopService-Consumer-9091</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.mxf</groupId>
            <artifactId>ShopService</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

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

        <!--集成Nacos实现服务注册与发现-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

        <!--集成Nacos实现动态配置管理-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-client</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
        </dependency>

        <!--集成Dubbo实现服务的远程调用-->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>

    </dependencies>

</project>

配置文件applicatin.yaml:

server:
  port: 9091
spring:
  application:
    name: consumer_application_9091

# dubbo的配置
dubbo:
  application:
    name: consumer_application_9091
  protocol:
    name: dubbo
    port: -1
  registry:
    id: nacos-registry
    address: nacos://192.168.11.233:8848
  config-center:
    address: nacos://192.168.11.233:8848
  metadata-report:
    address: nacos://192.168.11.233:8848

实现远程服务调用

@RestController
public class ShopController {

	 /**
     * @Reference 注解从 3.0 版本开始就已经废弃,改用 @DubboReference,以区别于 Spring 的 @Reference 注解
     * @DubboReference 注解将自动注入为 Dubbo 服务代理实例,使用 shopService 即可发起远程服务调用
     */
    @DubboReference
    private ShopService shopService;

    @GetMapping("/queryAll")
    public List<Goods> queryAllGoods() {
        return shopService.queryAll();
    }

    @GetMapping("/queryByName")
    public List<Goods> queryByName(String name) {
        return shopService.queryByName(name);
    }

    @GetMapping("/hi")
    public String hello(String name) {
        return shopService.hello(name);
    }
}

启动类:

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

OK,整个项目搭建到此已经完成,下面看项目运行展示

项目演示

首先启动Nacos(这里就以单机模式启动)
在这里插入图片描述
然后启动两个服务提供者:
ProviderApplication_8081ProviderApplication_8082
在这里插入图片描述
最后启动服务消费者:
ConsumerApplication_9091
在这里插入图片描述
OK,现在服务全部启动完毕,下面看nacos中的注册信息
在这里插入图片描述
可以看到,两个服务提供者和一个服务消费者全部注册进来了,到此Nacos就作为一个注册中心实现了服务注册功能
下面进行消费者端的远程服务调用测试:

接口测试

先看下之前定义的服务接口:

public interface ShopService {

    // 查询所有商品
    List<Goods> queryAll();

    // 根据名称模糊搜索
    List<Goods> queryByName(String name);

    // 添加商品
    int addGoods(Goods goods);

    // 根据ID删除商品
    int delGoods(int id);

    // 购买商品
    int shopping(int id);

    // 测试使用
    String hello(String name);
}
  • 首先测试hello()方法
    在消费端9091调用:
    在这里插入图片描述
    可以看到是8081端口的提供者响应服务,多调用几次就能看到8082端口的提供者响应服务了:
    在这里插入图片描述
    该服务的实现是在8081、8082两个端口处实现的,消费端只是进行了一次RPC远程调用通过Dubbo实现的,同时也体现了Nacos注册中心的服务发现功能

  • 测试查询所有商品的接口:
    在这里插入图片描述
    成功与后端数据库连通,就可以在此基础上进行更为复杂的业务开发了。

Nacos作为配置中心

待更新…

转载请标明出处:https://blog.csdn.net/Java_cpp_/article/details/128051413

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

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

相关文章

数据要素市场研究资料合集

编 辑&#xff1a;彭文华来 源&#xff1a;大数据架构师彭友们好&#xff0c;我是老彭。最近有个博士彭友在为论文挠头&#xff0c;到处找数据要素市场的资料。正好&#xff0c;国家工业信息安全发展研究中心刚刚发布《中国数据要素市场发展报告&#xff08;2021-2022&#xff…

智能合约介绍

介绍 智能合约是区块链实现可编程化的重要工具&#xff1b;在比特币时期&#xff0c;脚本仅限于描述交易得到内容和状态&#xff1b;随着智能合约的出现可以定义任何数据对象的状态擦欧总——>使其成为网络上的“法律条文”或者“商业共识”。相当于网络中的道德准则&#…

基于GIS的生态安全网络格局构建之主成分分析

来源&#xff1a;GIS前沿 一、数据来源介绍 &#xff08;一&#xff09;数字高程数据、归一化植被指数数据 本文所用到的松原市宁江区数字高程数据采用30 m分辨率的GDEMV 3数字高程数据、归一化植被指数数据采用250m分辨率的MYD13Q1植被指数16天合成产品&#xff0c;这些数据…

【零基础入门SpringMVC】第五期——报文、文件转移、拦截器、异常处理器

一、HttpMessageConverter 代表报文信息转化器&#xff0c;可以将请求报文转换为Java对象&#xff0c;也可以将Java对象转换为响应报文 请求报文分为三部分&#xff1a;请求头、请求空行和请求体 post 请求才会生成请求体get 请求会把请求信息拼接到地址后 概述&#xff1a;这…

经验分析:数据可视化工具入门讲解,如何应用数据可视化

什么是数据可视化&#xff1f;最核心的要点&#xff0c;就是解释数据、进行信息传递、压缩数据信息、突出整体观点。 在分析过程中&#xff0c;通过比较数据的大小、差异、分布&#xff0c;让其轻松呈现。 今天小编给大家介绍一款优秀的在线数据可视化软件。 项目是个人创建的…

第一性原理谈安全性和可靠性

已剪辑自: https://mp.weixin.qq.com/s/jttd-dhv9PmNu25Z-zyd5Q 最近从各个行业对系统的安全性的关注度越来越高&#xff0c;10月28日&#xff0c;工信部公开征求的《道路机动车辆生产准入许可管理条例&#xff08;征求意见稿&#xff09;》中&#xff0c;第六条提出&#xff…

C语言航路外传之隐式转换与优先级的那点事(你程序总是出bug的一个重要原因)

目录 一、表达式求值 二、隐式类型转换 1.基本概念 2.整型提升的意义 3.详解截断与整型提升的过程 4.char类型范围有关的一些事情 5.有关整形提升的一些案例 三、算术转换 四、操作符的属性 1.优先级表格 2.运算规则 3.一些问题表达式 &#xff08;1&#xff09;a…

Linux 之 arm linux 与 windows 使用 tftp 进行文件传输的简单整理

Linux 之 arm linux 与 windows 使用 tftp 进行文件传输的简单整理 目录 Linux 之 arm linux 与 windows 使用 tftp 进行文件传输的简单整理 一、简单介绍 二、tftp 下载安装 三、arm linux 通过tftp 下载 windows 上的文件 四、tftp 命令相关说明 1、busybox tftp命令常…

Baklib|知识库应用场景:制作员工培训手册

持续的专业发展对于想要加入、保留和提升员工的组织来说是必不可少的。为了确保员工总是能从学习能力中受益&#xff0c;您需要考虑创建培训手册&#xff0c;使员工能够胜任并保持他们的工作能力。 在过去&#xff0c;您可能认为培训手册是一本厚重的册子&#xff0c;充满了密…

如何理解电商云仓出租?

为了说清这个概念&#xff0c;我们先说一下云的概念。别看云现在已经漫天飞舞&#xff0c;但真正能准确的把它说明白的并不多&#xff0c;多数人只是跟着一起用而已。云起源于云计算&#xff0c;是指通过云计算技术各种终端设备手机、电脑、电视、车载屏幕等实现互通互联&#…

【教学类-19-03】20221127《ABBABB式-规律排序-A4竖版2份》(中班)

展示效果&#xff1a; 单人使用样式&#xff1a; 单页打印样式 ​ 背景需求&#xff1a; 中班幼儿需要掌握ABBABB的排序规律 前文制作了ABCABC单元格色块&#xff0c;完全套用ABC排序word表格&#xff0c;调整python的代码&#xff0c;随机生成ABB排序样式&#xff0c;引导幼…

1_SpringMVC_概述,2_SpringMVC_项目搭建

M model 模型层 DAO封装 >>> Mybatis V view 视图层 html css js jsp C controller 控制层 Servlet封装 >>> springMVC SpringMVC是spring为展现层提供的基于MVC设计理念的优秀WEB框架,是目前最主流的MVC框架之一 …

疫情下如何保持高效项目交付

作者&#xff1a;饶炯 疫情以来&#xff0c;我们工作和生活的正常秩序不时受到影响&#xff0c;项目开发过程中不时出现项目成员被封闭或开发现场封锁的情况&#xff0c;很多项目不得不临时选择远程开发模式&#xff0c;项目沟通和协作中出现了各种新的问题和困难&#xff0c;严…

[附源码]计算机毕业设计springboot4S店汽车售后服务管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Python库的使用

文章目录库的使用标准库认识标准库import导入模块使用示例&#xff1a;日期差计算使用示例&#xff1a;字符串操作1&#xff09;翻转单词顺序2&#xff09;旋转字符串3&#xff09;统计是给定字符串前缀的字符串数目第三方库认识第三方库包管理器pip使用示例&#xff1a;生成二…

QFile(文件)

QFile QFile提供一个用于读/写的接口&#xff0c;是一个可以用来读/写二进制文件的Qt资源的I/O设备&#xff0c;QFile可以单独使用&#xff0c;一般配合QTextStream或QDataStream 输入文件路径时最好使用"/"作为分隔符 构造函数&#xff1a; 常用的函数&#xff1a;…

前端甘特图组件开发(二)

自定义时间轴功能 由于常见的甘特图时间轴只支持按照天/周/月/年或者固定的时间单位进行划分&#xff0c;但实际使用场景下有时候会需要按照特定且不规则的时间段对进度数据进行直观划分。因此本组件在原时间轴的基础上添加新的自定义时间轴&#xff0c;可通过数据配置自定义时…

Spring Bean的作用域

1.写在前面 前面的博客我们已经介绍完Spring的依赖的查找来源&#xff0c;依赖注入的来源等等相关知识&#xff0c;今天我们继续来介绍Spring的Bean的作用域。 2.Spring Bean作用域 作用域 3.“singleton” Bean作用域 配置 4.“prototype” Bean作用域 配置 注意事项 Sp…

[Redis]-持久化方式

[Redis]-持久化方式 森格 | 2022年11月 本文是在学习Redis中&#xff0c;对Redis持久化的个人总结。 一、 持久化与Redis 1.1 什么是持久化 持久化是一种将程序数据在瞬时状态和持久状态间的转换机制&#xff0c;也就是把数据保存到可永久保存的存储设备中去。 1.2 Redis的持…

【Hack The Box】linux练习-- Writer

HTB 学习笔记 【Hack The Box】linux练习-- Writer &#x1f525;系列专栏&#xff1a;Hack The Box &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f4c6;首发时间&#xff1a;&#x1f334;2022年11月27日&#x1f334; &#x1f3…