03-12、SpringCloud Alibaba第十二章,升级篇,服务注册与配置中心Nacos

news2025/3/13 4:56:09

SpringCloud Alibaba第十二章,升级篇,服务注册与配置中心Nacos

一、为什么SpringCloud Alibaba

1、为什么

有了spring cloud这个微服务的框架,为什么又要使用spring cloud alibaba这个框架了?最重要的原因在于spring 

cloud中的几乎所有的组件都使用Netflix公司的产品,然后在其基础上做了一层封装,同时也新增了一些其他框架。然而

Netflix的服务发现组件Eureka已经停止更新,同时Feign、Hystrix、Zuul等也都出于升级或停更进入维护阶段。

所以急需其他的一些替代产品,也就是spring cloud alibaba。

在这里插入图片描述

2、SpringCloud Alibaba能做什么

1、Nacos
阿里巴巴开源产品,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

2、Sentinel
阿里巴巴开源产品,把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。

3、RocketMQ
Apache RocketMQ™ 基于 Java 的高性能、高吞吐量的分布式消息和流计算平台。

4、Dubbo
Apache Dubbo™ 是一款高性能 Java RPC 框架。

5、Seata
阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决方案。

6、Alibaba Cloud OSS
阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存储
服务。您可以在任何应用、任何时间、任何地点存储和访问任意类型的数据。

7、Alibaba Cloud SchedulerX
阿里中间件团队开发的一款分布式任务调度产品,支持周期性的任务与固定时间点触发任务。

8、Alibaba Cloud SMS
覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道。

3、官网和资料

https://github.com/alibaba/spring-cloud-alibaba

https://spring-cloud-alibaba-group.github.io/github-pages/greenwich/spring-cloud-alibaba.html

4、引用

cloud_2020项目总POM中引用:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>2.1.0.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

二、服务注册与配置中心Nacos

Nacos:Dynamic Naming + Configuration Service

Nacos就是注册中心+配置中心的组合 == 等价于Eureka+Config+Bus

官网:

https://nacos.io/zh-cn/

https://nacos.io/zh-cn/docs/quick-start.html

1、Nacos下载与安装(Server)

这里的nacos即 注册中心Server

下载地址:
https://github.com/alibaba/nacos/releases/tag/1.2.1

运行:
解压后bin目录下的start

浏览:
http://localhost:8848/nacos/#/login
	账号:nacos  密码:nacos

在这里插入图片描述

2、服务注册中心案例(client)

2.1、服务提供者provider-payment-9001

这里nacos,即注册中心client

新建module,cloudalibaba-provider-payment-9001

<parent>
    <artifactId>cloud_2020</artifactId>
    <groupId>com.lee.springcloud</groupId>
    <version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>cloudalibaba-provider-payment-9001</artifactId>

POM

<?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>cloud_2020</artifactId>
        <groupId>com.lee.springcloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>cloudalibaba-provider-payment-9001</artifactId>

    <dependencies>

        <!--nacos discovery服务发现-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

        <dependency>
            <groupId>com.lee.springcloud</groupId>
            <artifactId>cloud-api-commons</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

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

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>

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

    </dependencies>

</project>

application.yml

server:
  port: 9001

spring:
  application:
    name: nacos-payment-provider #服务名称
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #nacos server地址

management:
  endpoints:
    web:
      exposure:
        include: '*'

主启动类

@SpringBootApplication
@EnableDiscoveryClient //服务发现
public class PaymentMain9001 {

    public static void main(String[] args) {
        SpringApplication.run(PaymentMain9001.class,args);
    }
}

业务类PaymentController(读取配置信息)

@RestController
@RequestMapping("/payment")
public class PaymentController {

    @Value("${server.port}")
    private String serverPort;

    @GetMapping(value = "/nacos/{id}")
    public String getPayment(@PathVariable("id") Integer id)
    {
        return "nacos registry, serverPort: "+ serverPort+"\t id"+id;
    }
}

测试:

1、启动nacos server 和 cloudalibaba-provider-payment-9001
2、访问:
http://localhost:9001/payment/nacos/1
结果:
nacos registry, serverPort: 9001 id1
3、访问:
http://localhost:8848/nacos


在这里插入图片描述

2.2、服务提供者provider-payment-9002

为了后面测试方便,仿照cloudalibaba-provider-payment-9001创建9002

<parent>
    <artifactId>cloud_2020</artifactId>
    <groupId>com.lee.springcloud</groupId>
    <version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>cloudalibaba-provider-payment-9002</artifactId>

application.yml

server:
  port: 9002

spring:
  application:
    name: nacos-payment-provider #服务名称
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #nacos server地址

management:
  endpoints:
    web:
      exposure:
        include: '*'

在这里插入图片描述

2.3、服务消费者consumer-order-83

新建module,cloudalibaba-consumer-order-83

<parent>
    <artifactId>cloud_2020</artifactId>
    <groupId>com.lee.springcloud</groupId>
    <version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

<artifactId>cloudalibaba-consumer-order-83</artifactId>

POM

<?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>cloud_2020</artifactId>
        <groupId>com.lee.springcloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>cloudalibaba-consumer-order-83</artifactId>

    <dependencies>

        <!--  nacos服务发现    -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

        <dependency>
            <groupId>com.lee.springcloud</groupId>
            <artifactId>cloud-api-commons</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

        <!--  web组件      -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

</project>

application.yml

server:
  port: 83


spring:
  application:
    name: nacos-order-consumer #服务名称
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848  #nacos server地址

主启动类

@SpringBootApplication
@EnableDiscoveryClient//服务发现
public class OrderMain83 {

    public static void main(String[] args) {
        SpringApplication.run(OrderMain83.class,args);
    }
}

配置类

/**
 * 配置类
 */
@Configuration
public class ApplicationContextConfig {


    //标注此注解后,RestTemplate就具有了客户端负载均衡能力---因为使用了注册中心
    //必须添加此注解,否则java.net.UnknownHostException: NACOS-PAYMENT-PROVIDER
    @LoadBalanced
    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }

}

业务类

@RestController
@RequestMapping("/consumer")
public class OrderController {


    public static final String serverURL = "http://nacos-payment-provider";

    @Resource
    private RestTemplate restTemplate;

    @GetMapping(value = "/payment/nacos/{id}")
    public String paymentInfo(@PathVariable("id") Long id)
    {
        return restTemplate.getForObject(serverURL+"/payment/nacos/"+id,String.class);
    }

}

测试:

1、启动nacos-server、cloud-provider-payment-9001、cloud-provider-payment-9002、
cloud-consumer-order-83

2、访问:http://localhost:83/consumer/payment/nacos/1
结果:
nacos registry, serverPort: 9001 id1
和G
nacos registry, serverPort: 9002 id1
轮询访问

3、访问 http://localhost:8848/nacos

在这里插入图片描述

结论:nacos内部整合了Ribbon

在这里插入图片描述

2.4、各注册中心比较

在这里插入图片描述

2.5、Nacos的AP和CP模式切换

CAP:C数据一致性、A可用写、P分区容错性

Nacos默认是AP模式,如下进行切换

curl -X PUT '$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP'

何时选择何种模式

AP模式:
如果不需要存储服务级别的信息,且服务实例是通过nacos-client注册,并能够保持心跳上报,那么选择AP模式。
当前的主流服务如springcloud和dubbo都适用AP模式,AP模式为了服务的可用性而减弱了一致性,因此AP模式下只支持
注册临时实例。

CP模式:
如果需要在服务级别编辑或者存储配置信息,那么CP是必须的,K8S服务和DNS服务则适用CP模式。
CP模式支持注册持久化实例,此时则是以raft协议为集群运行模式,该模式下注册实例之前必须先注册服务,如果服务不存在,则返回错误。

3、服务配置中心案例(client)

3.1、基础案例

创建cloudalibaba-provider-payment-9003

<parent>
    <artifactId>cloud_2020</artifactId>
    <groupId>com.lee.springcloud</groupId>
    <version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

<artifactId>cloudalibaba-provider-payment-9003</artifactId>

POM

<?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>cloud_2020</artifactId>
        <groupId>com.lee.springcloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>cloudalibaba-provider-payment-9003</artifactId>

    <dependencies>
        <!--   nacos配置中心     -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

        <!--  nacos服务发现    -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

        <dependency>
            <groupId>com.lee.springcloud</groupId>
            <artifactId>cloud-api-commons</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>


        <!--  web组件      -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>


        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>


</project>

application.yml

server:
  port: 9003

spring:
  profiles:
    active: dev

bootstrap.yml

spring:
  application:
    name: nacos-payment-provider #服务名称
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #服务注册中心地址
      config:
        server-addr: localhost:8848 #配置中心地址
        file-extension: yaml #指定yaml格式的配置

主启动类

@SpringBootApplication
@EnableDiscoveryClient//服务发现
public class PaymentMain9003 {

    public static void main(String[] args) {
        SpringApplication.run(PaymentMain9003.class,args);
    }
}

业务类

@RestController
@RefreshScope //实现配置的自动更新
public class ConfigClientController {

    @Value("${config.info}")
    private String configInfo;

    @GetMapping("/config/info")
    public String getConfigInfo() {
        return configInfo;
    }

}

3.2、Nacos添加对应配置信息

3.2.1、data id配置规则
${prefix}-${spring.profile.active}.${file-extentsion}

prefix:
	默认值为:spring.application.name,也可以通过spring.cloud.nacos.config.prefix来配置

spring.profile.active:
	spring.profile.active不存在时,对应的连接符也将不存在。
	对应的data id拼接格式为:
	${prefix}.${file-extension}

file-extension:
	为配置内容的数据格式,可以通过spring.cloud.nacos.config.file-extension来配置。
	目前只支持properties和yaml类型
3.2.2、实操

根据cloudalibaba-provider-payment-9003的bootstrap.yml和application.yml两个配置文件的配置内容,配置如下:

nacos-payment-provider-dev.yaml

配置内容:

config: 
    info: "config info from nacos config center, nacos-payment-provider-dev.yaml,version:1"

在这里插入图片描述

3.3、测试

1、启动nacos-server、cloudalibaba-provider-payment-9003

2、浏览:http://localhost:9003/config/info
结果:
config info from nacos config center, nacos-payment-provider-dev.yaml,version:1

3、在nacos-server中修改配置文件version为2

4、浏览http://localhost:9003/config/info
结果:
config info from nacos config center, nacos-payment-provider-dev.yaml,version:2

结论:
	nacos自带动态刷新功能

3.4、分类配置

一个大型分布式微服务系统会有很多微服务子项目,每个微服务项目又会产生多个运行环境:开发环境、测试环境、正式环境等。

那么怎么对这些微服务配置进行管理呢?

nacos通过namespace+groupID+dataId三者对不同开发环境、不同微服务进行管理

namespace:划分部署环境DEV\TEST\PROD等,默认PUBLIC
group:划分微服务项目,如 order user cms等,默认DEFAULT_GROUP
dataID如上面的命名规则

相关配置:

spring:
  application:
    name: nacos-payment-provider #服务名称
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #服务注册中心地址
      config:
        server-addr: localhost:8848 #配置中心地址
        file-extension: yaml #指定yaml格式的配置
        namespace: 0a294291-a318-4a65-b899-17b08772bb39 #nacos对应的namespaceID
        group: CMS #nacos对应的group

namespace配置:

在这里插入图片描述

group配置:

在这里插入图片描述

测试:

1、启动nacos-server和cloudalibaba-provider-payment-9003

2、访问:http://localhost:9003/config/info
结果:
namespace:DEV, Group:CMS, Data ID:nacos-payment-provider-dev.yaml. version:1

结论:
9003通过namespace + group + data ID三者定位配置文件的位置,从而读取配置文件

4、Nacos集群及持久化配置

在这里插入图片描述

这里我们只用1个Nginx服务器,3个Nacos, 1个Mysql, 3个Linux

4.1、Nacos集群安装及持久化切换

1、准备3台Linux虚拟机,它们的IP分别是192.168.0.111 -  192.168.0.107  -  192.168.0.112

2、3台服务器上各自下载nacos
wget   https://nacos的下载路径(在nacos.io官网上找)

3、在nacos的conf目录根据cluster.conf.example夫指出cluster.conf文件
cp cluster.conf.example cluster.conf

4、编辑cluster.conf文件内容
vi cluster.conf
############文件内容如下--将3台nacos的服务器地址copy上去即可--将原有内容都删除##########
192.168.0.111:8848
192.168.0.107:8848
192.168.0.112:8848

5、持久化nacos,修改conf目录下application.properties文件,将nacos的持久化数据库从内嵌的Derby切换成本地的MySQL数据库
vi application.properties
#######在文件底部添加如下--192.168.0.102是我本地windows的IP地址,即MySQL在我windows本地#######

spring.datasource.platform=mysql

db.num=1
db.url.0=jdbc:mysql://192.168.0.102:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=admin123


6、关闭linux防火墙
systemctl stop firewalld
##查看防火墙状态
systemctl status firewalld

4.2、Mysql数据初始化

【我的mysql在windows本地上192.168.0.102,为了能让nacos和本地mysql连接,关闭本地的防火墙,开启mysql远程访问权限】
从nacos解压包的conf目录下找到nacos-mysql.sql文件

CREATE DATABASE IF NOT EXISTS nacos_config DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

use nacos_config;

将nacos-mysql.sql的文件内容运行一下OK

##本地mysql设置可以远程访问
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'IDENTIFIED BY 'admin123' WITH GRANT OPTION;
select user,host from user;

##关闭本地防火墙

在这里插入图片描述

4.3、Nginx配置

我的nginx服务安装在了192.168.0.107上,使用upstream。

nginx需要集成nginx_upstream_check_module模块,具体安装方法请看:
https://blog.csdn.net/weixin_30379625/article/details/87693818

在这里插入图片描述

4.4、修改cloudalibaba-provider-payment-9003

修改bootstrap.yml,将原来连接nacos的地址修改为NGINX的服务地址

spring:
  application:
    name: nacos-payment-provider #服务名称
  cloud:
    nacos:
      discovery:
        #server-addr: localhost:8848 #服务注册中心地址
        server-addr: 192.168.0.107:80 #NGINX的服务地址
      config:
        #server-addr: localhost:8848 #配置中心地址
        server-addr: 192.168.0.107:80 #NGINX的服务地址
        file-extension: yaml #指定yaml格式的配置
        #namespace: 0a294291-a318-4a65-b899-17b08772bb39 #nacos对应的namespaceID #暂时关闭
        #group: CMS #nacos对应的group #暂时关闭

4.5、测试

1、启动3个nacos服务
cd /opt/software/nacos/bin
sh startup.sh

检测
可以通过查看日志:/opt/software/nacos/logs/start.out
也可以通过访问:
http://192.168.0.111:8848/nacos
http://192.168.0.107:8848/nacos
http://192.168.0.112:8848/nacos
(注意关闭防火墙)

2、启动NGINX服务
/usr/local/nginx-1.14.1/sbin/nginc -c /usr/local/nginx-1.14.1/conf/nginx.conf

检测
可以通过访问:
http://192.168.0.107:80/nacos
(注意关闭防火墙)

通过nginx进入nacos,创建配置文件nacos-payment-provider-dev.yaml

配置格式yaml,配置内容如下:
config: 
    info: "this is nacos cluster,version:1"

3、启动cloudalibaba-provider-payment-9003
访问:http://localhost:9003/config/info

结果:
this is nacos cluster,version:1

测试成功,nacos集群配置成功!

(在nacos集群管理可以看到各nacos的服务详情)
file-extension: yaml #指定yaml格式的配置
    #namespace: 0a294291-a318-4a65-b899-17b08772bb39 #nacos对应的namespaceID #暂时关闭
    #group: CMS #nacos对应的group #暂时关闭

### 4.5、测试

```xml
1、启动3个nacos服务
cd /opt/software/nacos/bin
sh startup.sh

检测
可以通过查看日志:/opt/software/nacos/logs/start.out
也可以通过访问:
http://192.168.0.111:8848/nacos
http://192.168.0.107:8848/nacos
http://192.168.0.112:8848/nacos
(注意关闭防火墙)

2、启动NGINX服务
/usr/local/nginx-1.14.1/sbin/nginc -c /usr/local/nginx-1.14.1/conf/nginx.conf

检测
可以通过访问:
http://192.168.0.107:80/nacos
(注意关闭防火墙)

通过nginx进入nacos,创建配置文件nacos-payment-provider-dev.yaml

配置格式yaml,配置内容如下:
config: 
    info: "this is nacos cluster,version:1"

3、启动cloudalibaba-provider-payment-9003
访问:http://localhost:9003/config/info

结果:
this is nacos cluster,version:1

测试成功,nacos集群配置成功!

(在nacos集群管理可以看到各nacos的服务详情)

在这里插入图片描述

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

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

相关文章

java网络通信(三):TCP通信、实现客户端-服务端消息通信

目录 1、什么是 TCP协议&#xff1f; 2、代码实现TCP协议的一发一收 2.1、客户端 2.2、服务端 2.3 结果演示 3、代码实现TCP协议的多发多收 3.1 客户端 3.2 服务端 3.3 结果演示 简介&#xff1a;本文章主要是演示如何用java代码以及TCP协议实现网络通信&#xff0c;实…

剖析go协程池实现原理

go协程池实现 在go语言编程中有一种池肯定避免不了&#xff0c;那就是-协程池&#xff0c;无论你是日常工作还是面试中面试官都无法避免协程池&#xff0c;掌握协程池你也就算是入门go的并发编程了&#xff0c;打一波广告后面会有专门的文章来介绍如何在go中进行并发编程。 协…

华为关键词覆盖应用市场ASO优化覆盖技巧

在我国的消费者群体当中&#xff0c;华为的品牌形象较高&#xff0c;且产品质量过硬&#xff0c;因此用户基数也大。与此同时&#xff0c;随着影响力的增大&#xff0c;华为不断向外扩张&#xff0c;也逐渐成为了海外市场的香饽饽。作为开发者和运营者&#xff0c;我们要认识到…

万能门店小程序管理系统 onepic_uploade 任意文件上传漏洞复现

0x01 产品简介 万能门店小程序管理系统是一款功能强大的工具,旨在为各行业商家提供线上线下融合的全方位解决方案。是一个集成了会员管理和会员营销两大核心功能的综合性平台。它支持多行业使用,通过后台一键切换版本,满足不同行业商家的个性化需求。该系统采用轻量后台,搭…

QT:信号和槽01

QT中什么是信号和槽 概念解释 在 Qt 中&#xff0c;信号&#xff08;Signals&#xff09;和槽&#xff08;Slots&#xff09;是一种用于对象间通信的机制。信号是对象发出的事件通知&#xff0c;而槽是接收并处理这些通知的函数。 例如&#xff0c;当用户点击一个按钮时&#…

SQL面试50题

数据表关系图 数据表 CREATE TABLE student (id int(11) NOT NULL AUTO_INCREMENT,name varchar(255) NOT NULL,sex enum(female,male) NOT NULL,birth date NOT NULL,credit float(5,2) DEFAULT NULL,PRIMARY KEY (id) ) ENGINEInnoDB AUTO_INCREMENT25 DEFAULT CHARSETutf8;…

下载maven 3.6.3并校验文件做md5或SHA512校验

一、下载Apache Maven 3.6.3 Apache Maven 3.6.3 官方下载链接&#xff1a; 二进制压缩包&#xff08;推荐&#xff09;: ZIP格式: https://archive.apache.org/dist/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.zipTAR.GZ格式: https://archive.apache.org/dist/…

基于poi和javabean的excel读取

写在前面 示例写出时间&#xff1a;2024-12-02 这仅仅是excel读取的一个示例, 记录一下&#xff0c;这里也改了一下之前的导出&#xff0c;主要是为了兼容读取 之前的博客地址 基于poi和JavaBean的excel导出 poi依赖 <dependency><groupId>org.apache.poi</gr…

一键生成后端服务,MemFire Cloud重新定义开发效率

作为开发者&#xff0c;特别是独立开发者和小团队成员&#xff0c;大家都知道开发的最大难题之一就是搭建后端服务。要让一个应用从零开始&#xff0c;除了前端的开发工作外&#xff0c;还需要考虑数据库、接口、认证、存储等等一系列繁琐的后台工作。而MemFire Cloud这款神器&…

Maven、JAVAWeb、Servlet

知识点目标 1、MavenMaven是什么Maven项目的目录结构Maven的Pom文件Maven的命令Maven依赖管理Maven仓库JavaWeb项目 2.网络基础知识 3、ServletMaven Maven是什么 Maven是Java的项目管理工具&#xff0c;可以构建&#xff0c;打包&#xff0c;部署项目&#xff0c;还可以管理…

controller中的参数注解@Param @RequestParam和@RequestBody的不同

现在controller中有个方法&#xff1a;&#xff08;LoginUserRequest是一个用户类对象&#xff09; PostMapping("/test/phone")public Result validPhone(LoginUserRequest loginUserRequest) {return Result.success(loginUserRequest);}现在讨论Param("login…

Linux 内核系统架构

Linux 内核是一个复杂且高度模块化的系统&#xff0c;负责操作硬件资源、管理进程和内存、提供网络服务、执行文件系统操作、进行设备驱动程序的管理等。它为用户空间提供了一个抽象层&#xff0c;并为应用程序提供了底层服务。本文将深入探讨 Linux 内核的系统架构&#xff0c…

AI开发:逻辑回归 - 实战演练- 垃圾邮件的识别(二)

接上一篇AI开发&#xff1a;逻辑回归 - 实战演练- 垃圾邮件的识别&#xff08;一&#xff09; new_email 无论为什么文本&#xff0c;识别结果几乎都是垃圾邮件,因此我们需要对源码的逻辑进行梳理一下&#xff1a; 在代码中&#xff0c;new_email 无论赋值为何内容都被识别为…

WPF+MVVM案例实战与特效(三十)- 封装一个系统日志显示控件

文章目录 1、运行效果2、日志控件封装1、文件创建2、DisplayLogPanel.xaml 代码3、DisplayLogPanel.cs 代码4、数据模型5、枚举类型3、自定义控件使用1、LogPanelWindow.xaml2、LogPanelViewModel.cs4、总结1、运行效果 2、日志控件封装 1、文件创建 打开 Wpf_Examples ,在 …

VideoBooth: Diffusion-based Video Generation with Image Prompts

VideoBooth: Diffusion-based Video Generation with Image Prompts 概括 文章提出了一个视频生成模型VideoBooth&#xff0c;输入一张图片和一个文本提示词&#xff0c;即可输出保持图片中物体且符合文本提示词要求的视频。 方法 粗-细两阶段设计&#xff1a;1&#xff09;…

电子电气架构 --- 面向服务的汽车诊断架构

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 所有人的看法和评价都是暂时的,只有自己的经历是伴随一生的,几乎所有的担忧和畏惧,都是来源于自己的想象,只有你真的去做了,才会发现有多快乐。…

生成树详解(STP、RSTP、MSTP)

目录 1、STP 1.概述 2.基本概念 3.端口角色及其作用 4.报文结构 5.STP的端口状态 6.三种定时器 7.STP选举步骤 8.配置BPDU的比较原则 9.TCN BPDU 10.临时环路的问题 11.传统STP的不足 拓扑变更处理过程 2、RSTP 1.端口角色 2.端口状态 3.P/A&#xff08;Propo…

基于Python制作一个简易UI界面

基于Python制作一个简易UI界面 目录 基于Python制作一个简易UI界面1 原理简介2 编写程序3 程序测试 1 原理简介 这里用到了Python自带的UI库tkinter。 tkinter 是 Python 的标准 GUI&#xff08;图形用户界面&#xff09;库&#xff0c;用于创建和管理图形界面。它提供了一个简…

emp.dll丢失导致游戏/软件无法继续运行:详细描述emp.dll丢失原因并提供解决方案

emp.dll 并不是一个标准的 Windows 系统文件&#xff0c;也不是一个广泛认知的第三方库。因此&#xff0c;它可能是一个特定于某个应用程序或游戏的自定义 DLL 文件。如果 emp.dll 丢失导致了你的软件或游戏无法运行&#xff0c;这通常意味着该文件是程序正常运作所必需的。下面…

IDEA使用HotSwapHelper进行热部署

目录 前言JDK1.8特殊准备DECVM安装插件安装与配置参考文档相关下载 前言 碰到了一个项目&#xff0c;用jrebel启动项目时一直报错&#xff0c;不用jrebel时又没问题&#xff0c;找不到原因&#xff0c;又不想放弃热部署功能 因此思考能否通过其他方式进行热部署&#xff0c;找…