IDEA搭建SSM框架【配置类、新手向】

news2025/1/23 13:05:46

以下操作基于2020.3企业版

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pEgiWHwX-1669548886653)(assets/image-20221109105330-heilasm.png)]

1.创建Java Enterprise项目

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lii6FyNy-1669548886654)(assets/image-20221109105434-y39cakk.png)]

直接默认即可

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y35MWx5Y-1669548886654)(assets/image-20221109105622-fcd9xfy.png)]

输入项目相关信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H5JGlWUW-1669548886655)(assets/image-20221109105713-igwb7w3.png)]

点击完成后,得到以下目录结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l4reuygh-1669548886655)(assets/image-20221109105757-r4cn7bg.png)]

2.搭建项目目录结构

java目录下

  • controller:实现控制转发,基本参数校验,不复杂的简单业务处理

  • config:配置类存放的地方

  • service:业务逻辑层

    • impl(实现层)
  • dao:数据持久层

  • entitry:实体类

  • resources

    • mappers(存放sql语句)
  • webapp

    • WEB-INF

      • views(视图的JSP文件)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dw9KBSKj-1669548886655)(assets/image-20221116105439-d9bmup8.png)]

3.导入依赖

pom.xml文件中导入SSM框架相关依赖

	<!-- spring -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.3.23</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>5.3.23</version>
        </dependency>
	<dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>5.3.23</version>
            <scope>test</scope>
        </dependency>

	<!-- spring mvc -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.3.23</version>
        </dependency>


        <!-- jstl -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp.jstl</groupId>
            <artifactId>jstl-api</artifactId>
            <version>1.2</version>
        </dependency>

        <!-- JDBC -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.30</version>
        </dependency>

        <!-- mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.11</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>2.0.7</version>
        </dependency>

导入完成后,点击右上角的更新

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1WVSPDK7-1669548886655)(assets/image-20221109113134-v5rg43v.png)]

如果没有出现Spring Config,则检查一下是否正确安装了依赖了

4.通过类配置项目

创建类App

config目录下创建类App

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7mDx5B8v-1669548886656)(assets/image-20221116103236-ee5zteu.png)]

  • 添加注解@Configuration——表示为配置类

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MQz0ylJl-1669548886656)(assets/image-20221116103406-j9ofhna.png)]

  • 添加注解ComponentScan——扫描service
@ComponentScan(basePackages = "com.leo.SSM.service")

注意:

  • basePackages 配置:查看下图位置
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jZRm3YXt-1669548886656)(assets/image-20221116103959-o9vgusq.png)]
  • 这里扫描的包对应位置也需要添加注解

    例如这里,我扫描了service,那与之对应的就需要在service的各个类中添加注解@Service

为防止后面忘记,先在service目录下创建一个service接口

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SPnsGNDR-1669548886656)(assets/image-20221116105603-c5nohb4.png)]

service->impl下创建对应的实现类

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bf5QETjB-1669548886657)(assets/image-20221116111944-erw6ogu.png)]

实现类中添加@Service注解

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VE2eecME-1669548886657)(assets/image-20221116112009-ew2qlnc.png)]

实现接口

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gU8skaxY-1669548886657)(assets/image-20221127115912-1bh4wjr.png)]

  • 添加注解@MapperScan——扫描dao
@MapperScan(basePackages = "com.leo.SSM.dao")

创建UserDao接口

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1dsc9LnT-1669548886657)(assets/image-20221012115126-rd0ld4f.png)]

添加注解@Mapper

package com.leo.SSM.dao;

import org.apache.ibatis.annotations.Mapper;

@Mapper
public class UserDao {
}
  • 添加注解——添加配置源(配置jdbc)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KvSUgtBS-1669548886658)(assets/image-20221116105945-36gqupw.png)]

直接直接复制下列代码进入项目即可

@PropertySource("classpath:jdbc.properties")

创建jdbc配置文件

resources下创建jdbc.properties

选择Resource Bundle

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zw5gzdFY-1669548886658)(assets/image-20221116110150-t8atbxh.png)]

仅输入名称即可

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YBnSqObt-1669548886658)(assets/image-20221116110226-v8001zd.png)]

创建完成

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JwvCLEiz-1669548886658)(assets/image-20221116110240-8mktok3.png)]

进行配置

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql:///studb?useSSL=false
jdbc.username=SQL的用户名
jdbc.password=SQL的密码
  • 开启事务管理

在App类中继续添加@EnableTransactionManagement注解,表示开启事务

配置类App

创建于jdbc对应的属性

    private String driver;
    private String url;
    private String userName;
    private String password;
  • 添加注解,设置值
@Value("${jdbc.driver}")

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-he7WJPUf-1669548886658)(assets/image-20221116110655-wlypjiq.png)]

属性的最终配置

@Value("${jdbc.driver}")
    private String driver;
  
    @Value("${jdbc.url}")
    private String url;
  
    @Value("${jdbc.username}")
    private String userName;
  
    @Value("${jdbc.password}")
    private String password;

配置数据源

  • 创建方法,并添加@Bean注解——往IOC容器中放东西
@Bean
    public DataSource dataSource(){
    
    }
  • 创建一个dataSource并返回
DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName(driver);
        dataSource.setUrl(url);
        dataSource.setUsername(userName);
        dataSource.setPassword(password);
        return dataSource;

配置mybatis中的SqlSessionFacotry

  • 创建方法,添加注解
@Bean
    public SqlSessionFactory sqlSessionFactory(){
    
    }
  • 配置mybatis相关属性

    • 数据源
    • 映射包名
    • 对应sql存放位置
    • 映射关系(下划线改为小驼峰)
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSource());
//        映射包名
        sqlSessionFactoryBean.setTypeAliasesPackage("com.leo.SSM.entity");
        PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        sqlSessionFactoryBean.setMapperLocations(
                resolver.getResources("classpath*:mappers/*.xml")
        );
	org.apache.ibatis.session.Configuration configuration = Objects.requireNonNull(sqlSessionFactoryBean.getObject()).getConfiguration();
        configuration.setMapUnderscoreToCamelCase(true);
        return sqlSessionFactoryBean.getObject();

配置事务

@Bean
    public PlatformTransactionManager transactionManager(){
        DataSourceTransactionManager transactionManager = new DataSourceTransactionManager();
        transactionManager.setDataSource(dataSource());
        return transactionManager;
    }

配置Web-MVC

在config文件夹下创建类WebMvcConfig

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HQ60y3Lh-1669548886659)(assets/image-20221116114030-qjbnc65.png)]

  • 添加注解@Configuration,声明配置类
import org.springframework.context.annotation.Configuration;

@Configuration
  • 添加注解@EnableWebMvc——启动webMvc
import org.springframework.web.servlet.config.annotation.EnableWebMvc;


@EnableWebMvc
  • 扫包与controller对应
import org.springframework.context.annotation.ComponentScan;


@ComponentScan(basePack
ages = "com.leo.SSM.controller")

实现WebMvcConfigurer

public class WebMvcConfig implements WebMvcConfigurer {

}

选择重写方法

ctrl+o选择以下方法进行重写

  • addViewControllers
  • configureViewResolvers

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FjVchqPS-1669548886659)(assets/image-20221116115146-61ipcs8.png)]

添加视图解析器

  • 设置视图对应文件位置
  • 设置视图文件后缀
  • 设置视图解析器,支持JSTL
private ViewResolver viewResolver(){
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setPrefix("/WEB-INF/views/");
        viewResolver.setSuffix(".jsp");
        viewResolver.setViewClass(JstlView.class);
        return viewResolver;
    }

注册视图解析器

configureViewResolvers方法中,进行视图解析器的注册

@Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
//        注册视图解析器
        registry.viewResolver(viewResolver());
    }

添加view的控制

在spring中,很可能出现很多仅需要页面跳转而没有具体业务逻辑的代码比如

@GetMapping('/login')
    public String login(){
        return "login";
    }

这样长久以往就会生成很多这样的空方法,因此我们需要通过SprIngMVC中的addViewControllers简化实现上述逻辑

  • 设置/对应的页面为login
@Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/").setViewName("login");
    }

创建Controller

controller目录下创建UserController类,添加注解@Controller

package com.leo.SSM.controller;

import org.springframework.stereotype.Controller;

@Controller
public class UserController {
}

配置整体servlet

创建类AppInit

在config目录下创建AppInit类,并继承AbstractAnnotationConfigDispatcherServletInitializer

继承的类用于DispatcherServlet 初始化

DispatcherServlet:Spring MVC的核心组件,它是request首先到达的地方,负责在各个组件间传递加工

  • 完成servlet容器功能
  • 完成配置MVC基础功能
  • 完成配置DispatcherServletContextLoaderListener

ContextLoaderListener——Spring实现了Tomcat提供的ServletContextListener接口,写了一个监听器来监听项目启动。一旦项目启动,会触发ContextLoaderListener中的特定方法

实现其方法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UDA4UB8k-1669548886659)(assets/image-20221126230419-xfoxiwo.png)]

修改各方法逻辑

**getRootConfigClasses——**配置root上下文(数据源等)

这里直接从我们的APP中获取即可

@Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{App.class};
    }

**getServletConfigClasses——**配置dispatcher servlet(视图解析器)

这里从WebMvcConfig中获取

@Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{WebMvcConfig.class};
    }

getServletMappings——指定开始被servlet处理的url(默认设置为 /

@Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }

5.实现login页面

WebMvcConfig.java文件配置下的prefix目录下创建文件,名称为login

<%--
  Created by IntelliJ IDEA.
  User: Leo
  Date: 2022/11/6
  Time: 15:37
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form action="login" method="post">
    <label>
        用户名:
        <input name="userName" />
        <span  style="color: red">
            ${msg}
        </span>
    </label>
    <br />

    <label>&nbsp 码:
        <input name="passwd" type="password" />
    </label>

    <br/>

    <input type="submit" value="登录">
</form>

</body>
</html>

6.创建userController

UserController 添加方法

@PostMapping("/login")
    public String login(){
        return "index";
    }

因为在form表单中

  • action = login ----> (“/login”)
  • method=“post” —>@PostMapping

我们运行测试一下

请添加图片描述

当我们点击登录时,返回的页面就是index.jsp

当然,现在没有进行逻辑判断,但是实际上对于webmvc的配置已经成功

7.创建实体类

entity文件目录下创建与数据库对应的类

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FZqxqhbH-1669548886659)(assets/image-20221127114905-gkmig8l.png)]

8.实现UserDao

定义接口

首先我们需要实现登录接口,因此在UserDao中定义获取用户信息的接口

    UserInfo getUserInfo(@Param("userNumber") String userNumber , @Param("passwd") String passwd);

实现SQL

resources->mappers创建UserMapper.xml文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.leo.SSM.dao.UserDao">
    <select
            id="getUserInfo"
            resultType="com.leo.SSM.entity.UserInfo"
    >
        select
               pk_user_id,
               u_number,
               u_name,
               u_passwd
        from user_info
        where u_number = #{userNumber} and u_passwd = #{passwd}
    </select>

</mapper>

9.实现UserService

UserService接口出定义方法

  • 返回类型——boolean
  • 传递参数
  • 方法名——login
package com.leo.SSM.service;

import javax.servlet.http.HttpSession;
import java.util.List;

public interface UserService {
    Boolean login(String userNumber , String passwd, HttpSession session, Model model);
}

定义属性

使用注解@Resource将userDAO交给Spring进行管理

@Resource
    private UserDAO userDAO;

实现方法

@Override
    public Boolean login(String userNumber, String passwd, HttpSession session) {
        UserInfo userInfo = null;
        userInfo = userDAO.getUserInfo(userNumber , passwd);
        if(null != userInfo){
            session.setAttribute("user",userInfo);
            return true;
        }else{
            model.addAttribute("msg","用户名或密码错误");
	    return false;
        }
    }

10.实现UserController逻辑

添加属性——UserService

    @Resource
    private UserService userService;

修改函数参数

与login.jsp中的name对应

login(String userName , String password , HttpSession session)

修改逻辑

直接调用UserService,判断返回值

  • true——进入index.jsp页面
  • false——停留在login.jsp页面
boolean isSuccess = userService.login(userName , password,session);
        if(isSuccess){
            return "index";
        }else{
            return "login";
        }

实现logout

  • 使session失效
  • 设置提示信息
  • 跳转login页面
@PostMapping("/logout")
    public String logout(HttpSession session, Model model){
        session.invalidate();
        model.addAttribute("msg","退出成功");
        return "login";
    }

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

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

相关文章

SpringBoot实现多数据源(一)【普通版切换】

在实际开发中&#xff0c;经常可能遇到在一个应用中可能需要访问多个数据库的情况。以下是两种典型场景 业务复杂&#xff08;数据量大&#xff09; 数据分布在不同的数据库中&#xff0c;数据库拆了&#xff0c;应用没拆。一个公司多个子项目&#xff0c;各用各的数据库&#…

Springboot——拦截器

目录 一、拦截器概念 二、拦截器的使用 2.1 拦截器的创建&#xff08;preHandle实用性最强&#xff09; 2.2 将拦截器添加到容器当中 三、拦截器参数 3.1 获取请求头 request.getHeader 3.2 Object handler 是什么参数 3.3 ModelAndView modelAndView 3.4 Exception ex 3.…

多重定义的全局符号,链接器会如何链接的情况

多重定义的全局符号&#xff0c;链接器会如何链接的情况实例1&#xff1a;1.规则12.规则13.规则24.规则3实例2总结以下只针对于gcc编译器&#xff0c;而且不同环境&#xff0c;不同编译器的情况可能不同。 假如说有多重定义的全局符号&#xff0c;链接器会如何链接呐&#xff…

[论文评析]AdaptivePose: Human Parts as Adaptive Points,AAAI 2022

AdaptivePose: Human Parts as Adaptive Points文章信息背景AdaptivePose身体表示方法Body RepresentationAdaptivePosePart Perception ModuleEnhanced Center-aware BranchTwo-hop Regression BranchLoss function推理Inference总结References文章信息 论文题目&#xff1a;…

Spring Boot JPA 存储库派生查询示例

在之前的文章中&#xff0c;您已经知道如何使用JPQL和本机查询通过注释从数据库中检索数据。今天&#xff0c;我将向您展示如何使用派生查询方法在 Spring 引导中实现 Spring Data JPA 存储库查询&#xff1a;Query 派生查询方法的结构配置 Spring 引导应用程序以使用不同的数…

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

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

Android 单ABI架构适配指南:保姆级教学 INSTALL_FAILED_NO_MATCHING_ABIS

单ABI架构 64位 安装报错误详情如下 &#xff1a; Installation did not succeed. The application could not be installed: INSTALL_FAILED_NO_MATCHING_ABIS 产品需求&#xff1a; 单ABI架构支持拆解 迎合市场需求 32/64位独立包 目前项目ABI架构如下&#xff1a; …

基于Mxnet实现语义分割-整体多模型【完整、附部分源码】

文章目录前言语义分割发展史及意义一、数据集的准备二、基于Mxnet的语义分割框架构建1.引入库2.CPU/GPU配置3.数据标准化4.解析数据集到列表中JSON格式Label 图像的标注格式5.设置数据迭代器6.模型构建fcn模型结构pspnet模型结构deeplabv3模型结构deeplabv3模型结构ICNet模型结…

刷爆力扣之构建乘积数组

刷爆力扣之构建乘积数组 HELLO&#xff0c;各位看官大大好&#xff0c;我是阿呆 &#x1f648;&#x1f648;&#x1f648; 今天阿呆继续记录下力扣刷题过程&#xff0c;收录在专栏算法中 &#x1f61c;&#x1f61c;&#x1f61c; 该专栏按照不同类别标签进行刷题&#xff0c…

合作对策模型的简单实现

以如下题目作为示例&#xff1a; 一位歌手(S)&#xff0c;一位钢琴家 (P) 和一位鼓手(D) 组成一个小乐队在俱乐部同台演出能得到演出费1000元&#xff0c;若歌手和钢琴家一起演出能得800元。而只有钢琴家和鼓手一起演出能得到650元&#xff0c;钢琴独奏表演能得300元&#xff…

表单与列表在HTML与CSS中是这么玩的

文章目录表单应用场景实例讲解表单描述标签的使用 label表单约束属性详解表单访问限制技巧常用字段类型扩展隐藏与表单提交技巧表单验证使用总结大文本与列表框技巧详解选项框标准打开方式文件上传的正确打开方式时期与时间表单项使用详解搜索表单与DATALIST数据列表表单历史数…

【Java多线程】线程状态及线程方法大全

➤ Java多线程编程【一文全解】 文章目录线程状态线程方法> 停止线程 stop( )> 线程休眠 sleep( )> 线程礼让 yield( )> 线程强行执行 join( )> 线程状态观测 Thread.State> 线程的优先级 Priority> 守护多线程 daemon线程状态 线程有五大状态: 创建状态…

Java代码审计——XML 外部实体注入(XXE)

目录 前言&#xff1a; &#xff08;一&#xff09;XML 的常见接口 1&#xff0e;XMLReader 2&#xff0e;SAXBuilder 3&#xff0e;SAXReader 4&#xff0e;SAXParserFactory 5&#xff0e;Digester 6&#xff0e;DocumentBuilderFactory (二&#xff09;XXE 漏洞审计…

MongoDB的安装

配置环境变量,将F:\MongoDB\Server\bin的路径添加到PATH环境变量中配置环境变量,将F:\MongoDB\Server\bin的路径添加到PATH环境变量中 1、下载 在安装数据库之前将所有杀毒软件、防护软件全部关闭掉 官网下载地址&#xff1a;Download MongoDB Community Server | MongoDB …

【软件测试】测试人我明明测了,生产环境还出问题?又出幺蛾子......

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 测试人对于线上问题…

大数据_数据中台建设与架构

目录 一、持续让数据用起来的机制框架 二、数据中台建设方法论 三、数据中台架构 一、持续让数据用起来的机制框架 数据中台的使命就是持续让数据用起来&#xff0c;它的根本性特点就是把“数据资产”作为基础要素独立出来&#xff0c;让成为资产的数据作为生产资料融入业务…

【SVM分类】基于matlab鸽群算法优化支持向量机SVM分类【含Matlab源码 2242期】

⛄一、鸽群算法简介 基于鸽群在归巢过程中的特殊导航行为,Duan等提出了一种仿生群体智能优化算法———鸽群优化算法.在这个算法中,通过模仿鸽子在寻找目标的不同阶段使用不同导航工具这一机制,提出了2种不同的算子模型: 1)地图和指南针算子(map and compass operator).鸽子可…

ElasticSearch入门

1. ELASTICSEARCH 1、安装elastic search dokcer中安装elastic search &#xff08;1&#xff09;下载ealastic search和kibana docker pull elasticsearch:7.6.2 docker pull kibana:7.6.2&#xff08;2&#xff09;配置 mkdir -p /mydata/elasticsearch/config mkdir -p…

day01 Redis

day01 Redis 第一章 非关系型数据库的简介 第一节 技术发展线路 第二节 互联网发展所面临的问题 1. Web1.0 时代 2. Web2.0时代 3. 互联网三高问题 3.1 高并发、大流量 大型网站系统需要面对高并发(QPS)用户&#xff0c;大流量访问。Google日均PV数35亿&#xff0c;日均IP…

centos8.4下搭建 rocketmq集群部署 4.9.4

1.简单介绍 搭建rocketmq集群,nameserver至少3个节点&#xff0c;brokerserver采用2主2从同步&#xff0c;服务器资源多的&#xff0c;可以至少部署在7台服务器上&#xff0c;资源少的可以准备至少3台服务器 172.16.4.15nameserver172.16.4.16nameserver172.16.4.17nameserver…