Spring Boot教程之十: 使用 Spring Boot 实现从数据库动态下拉列表

 使用 Spring Boot 实现从数据库动态下拉列表

动态下拉列表(或依赖下拉列表)的概念令人兴奋,但编写起来却颇具挑战性。动态下拉列表意味着一个下拉列表中的值依赖于前一个下拉列表中选择的值。一个简单的例子是三个下拉框,分别显示地区、塔卢克和村庄的名称,其中塔卢克中的值取决于地区中选择的值,村庄中的值取决于塔卢克下拉列表中选择的值。动态下拉列表可以使用以下技术实现:

  1. 任何数据库都可用于加载下拉列表中要填充的地区、塔卢克和村庄的详细信息。在本例中,我们将使用 PostgreSQL。
  2. 可以使用Java和Spring Boot实现连接数据库的服务类。
  3. HTML、CSS、JavaScript、jQuery 和 AJAX 可用于实现下拉列表。

本教程的最佳方法是先创建和填充数据库,然后编写 Java 服务类,然后继续设计和编写网页中的下拉列表。在继续进行之前,可视化本教程的大致输出也会有所帮助。

选定地区

DISTRICT SELECTED

已选择塔卢克

TALUK SELECTED

选定村庄

VILLAGE SELECTED

现在输出已经可视化了,是时候缩小执行本教程目标的细节了。建议单独创建 Spring Boot 项目,并在另一个项目中单独创建网页。

服务方法项目 1:

以下教程介绍了创建 Spring Boot 项目的过程:Spring Boot – 用于显示响应代码和自定义错误代码的服务类示例。数据库部分由每个表的一个 CREATE 命令和每个表的一些 INSERT 命令组成。表的创建命令和相应的插入命令如下所列:

CREATE TABLE district (id int SERIAL PRIMARY KEY,name varchar(50),distcode varchar(4));
insert into district (name,distcode) values('Chennai','1');
insert into district (name,distcode) values('Coimbatore','2');
CREATE TABLE taluk (id int SERIAL PRIMARY KEY,name varchar(50),distcode varchar(4),talukcode varchar(4));
insert into taluk (name,distcode,talukcode) values('Avadi','1','12');
insert into taluk (name,distcode,talukcode) values('Sulur','2','3');
CREATE TABLE village (id int SERIAL PRIMARY KEY,name varchar(50),distcode varchar(4),talukcode varchar(4),villagecode varchar(4));
insert into village (name,distcode,talukcode,villagecode) values('Pothur','1','12','15');
insert into village (name,distcode,talukcode,villagecode) values('Arasur','2','10','9');

各个数据库的图像如下所示:

地区数据库

DISTRICT DATABASE

塔卢克数据库

TALUK DATABASE

乡村数据库

VILLAGE DATABASE

DBController.java

  • Java
   package com.springboot.springbootdemo;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.websocket.server.PathParam;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
@CrossOrigin
public class DBController {
    PreparedStatement ps;
    Connection con;
    String sql;
    @GetMapping("/dist")
    @CrossOrigin
    public String saylistDistrict() throws SQLException
    {
          PreparedStatement ps;
        ResultSet myRs;
        JSONArray districtlist = new JSONArray();
        try {
            Class.forName("org.postgresql.Driver");
            con = DriverManager.getConnection(
                "jdbc:postgresql://localhost:5432/test?allowPublicKeyRetrieval=true",
                  "postgres", "password");
            sql = "SELECT distcode, name FROM district";
            ps = con.prepareStatement(sql);
            myRs = ps.executeQuery();
            while (myRs.next()) {
                JSONObject jsonobj = new JSONObject();
                jsonobj.put("districtcode",
                            myRs.getString("distcode")
                                .toString()
                                .trim());
                jsonobj.put("districtname",
                            myRs.getString("name")
                                .toString()
                                .trim());
                districtlist.add(jsonobj);
            }
            System.out.println("districtlist"
                               + districtlist.size());
            close(con, ps, myRs);
        }
        catch (Exception e) {
            System.out.println("getservice Exception==>"
                               + e);
        }
 
            return (districtlist.toString()); 
    }
      @RequestMapping(value = "/taluk",
                    method = RequestMethod.GET)
    @ResponseBody
    @CrossOrigin
    public String
    ListTaluk(@RequestParam String Discode)
          throws ParseException
    {
          String districtcode = Discode;
        JSONArray taluklist = new JSONArray();
          try {
            Class.forName("org.postgresql.Driver");
            con = DriverManager.getConnection(
                "jdbc:postgresql://localhost:5432/test?allowPublicKeyRetrieval=true",
                "postgres", "password");
              sql = " select * from taluk where distcode=?";
            ps = con.prepareStatement(sql); 
              ps.setString(1, districtcode);
            ResultSet res = ps.executeQuery();
            while (res.next()) {
                JSONObject jsontaluk = new JSONObject();
                jsontaluk.put("districtcode",
                              res.getString("distcode") 
                                  .toString()
                                  .trim());
                jsontaluk.put("talukcode", 
                              res.getString("talukcode")
                                  .toString()
                                  .trim());
                jsontaluk.put("talukname",
                              res.getString("name")
                                  .toString()
                                  .trim());
                taluklist.add(jsontaluk);
            }
            System.out.println("taluklist" 
                               + taluklist.size());
            close(con, ps, res);
        }
        catch (Exception e) {
            System.out.println(
                "getservice Edistid1xception==>" + e);
        }
        return (taluklist.toString());
    }
 
    @RequestMapping(value = "/village",
                    method = RequestMethod.GET)
    @ResponseBody
    @CrossOrigin
    public String
    Listvillage(@RequestParam String Discode,
                @RequestParam String Talukcode)
        throws ParseException
    {
        String districtcode = Discode;
        String talukcode = Talukcode;
        JSONArray villagelist = new JSONArray();
        try {
              Class.forName("org.postgresql.Driver");
            con = DriverManager.getConnection(
                "jdbc:postgresql://localhost:5432/test?allowPublicKeyRetrieval=true",
                  "postgres", "password");
            sql = "select * from village where distcode=? and talukcode=?";
            ps = con.prepareStatement(sql);
              ps.setString(1, districtcode);
            ps.setString(2, talukcode);
            ResultSet resl = ps.executeQuery();
 
            while (resl.next()) {
                JSONObject jsonvillage = new JSONObject(); 
                  jsonvillage.put("districtcode",
                                resl.getString("distcode")
                                    .toString()
                                    .trim());
                jsonvillage.put("talukcode",
                                resl.getString("talukcode")
                                    .toString()
                                    .trim()); 
                jsonvillage.put(
                    "villagecode", 
                    resl.getString("villagecode")
                        .toString()
                        .trim());
                jsonvillage.put("villagename",
                                resl.getString("name")
                                    .toString()
                                    .trim());
                villagelist.add(jsonvillage);
              }
            System.out.println("villagelist"
                                 + villagelist.size());
            close(con, ps, resl);
        }
        catch (Exception e) {
            System.out.println("getservice Exception==>"
                               + e);
        }
        return (villagelist.toString());
    }
   
    private static void close(Connection myConn,
                              Statement myStmt,
                              ResultSet myRs)
    {
        try {
              if (myRs != null) {
                  myRs.close();
            }
            if (myStmt != null) {
                  myStmt.close();
            }
            if (myConn != null) {
                myConn.close();
            }
        }
        catch (Exception exc) {
            exc.printStackTrace();
        }
    }
}        

对以上代码的解释:

  • 需要@RestController注释来标识Java服务类,并且建议仅在授权发送请求的URL时使用@CrossOrigin注释。
  • @GetMapping(“/dist”) 注释用在 saylistDistrict() 函数之前,这样每当调用包含“/dist”的 URL 时就会调用该函数。
  • 函数 saylistDistrict() 从数据库中检索数据,处理并以 JSON 格式返回数据,该格式在以下子要点中解释:
    • 建立数据库连接并调用相应的选择查询来检索区域详细信息及其各自的代码。
    • “SELECT distcode, name FROM district” 查询检索地区名称以及地区代码,然后将其存储在结果集“myRs”中。然后迭代结果集,并将地区数据存储在 JSON 对象“jsonobj”中。
    • 迭代完每个区域后,将生成的 JSONObject 添加到主 JSONArray“districtlist”中。使用 close(Connection myConn, Statement myStmt, ResultSet myRs) 方法关闭数据库连接,其中 Connection、ResultSet 和 Statement 均已关闭。

注意:在 Web 应用程序中,每次使用后关闭数据库连接非常重要。如果不这样做,当用户从数据库服务器请求数据库连接时,可能会导致内存泄漏、性能下降、连接不足。

  • “return(districtlist.toString());”命令将 JSONArray 转换为字符串,然后将其返回给调用 Java 方法的实体。
  • 现在该介绍 ListTaluk() 函数了。此函数也使用与 saylistDistrict() 函数相同的注释,但附加注释 '@RequestMapping(value = “/taluk”, method = RequestMethod.GET)'
  • @RequestMapping(value = “/taluk”, method = RequestMethod.GET) 注释简化了使用 @RequestParam 注释的 URL 参数映射。
  • 当 URL 包含 @RequestMapping 注释的 value 参数中提到的值时,将调用此方法。 method 参数提到请求方法,在本例中为 GET 方法。 RequestMethod 是为此目的编写的内置 Java 类,它用在方法名称之前,以点 (.) 分隔。
  • @RequestParam 注释从 URL 中读取 distid1 值并将该值存储在“String Discode”变量中。然后将 Discode 值存储到字符串变量“discode”中。
  • 后续操作和命令与之前的方法类似,只是过程中有一些细微的变化,下面给出的子要点将对此进行解释:
    • 检索 taluk 名称以及相应的地区代码和 taluk 代码的查询是“select * from taluk where distcode=?”,其中 ? 表示地区代码的值。
    • ps.setString(1,districtcode) 设置查询中的区域代码的值。
    • 使用命令“ResultSet res = ps.executeQuery();”执行查询并将其存储在 ResultSet 中。
    • “jsontaluk” 是用于存储每次迭代中的 taluk 名称的 JSONObject。例如,“jsontaluk.put(“districtcode”, res.getString(“distcode”).toString().trim());” 是将地区值存储在 JSONObject 中的命令。
    • 类似地,在接下来的三行中,taluk 代码和 taluk 名称也存储在 JSONObject 中,并且该对象存储在 JSONArray “taluklist” 中
    • 使用“return(taluklist.toString());”命令转换为字符串后返回 JSONArray。
  • Listvillage() 方法中使用的所有注释与 ListTaluk() 注释中使用的注释相同。
  • 与 Listvillage() 方法中的操作方式类似,使用查询检索村庄名称、地区代码、taluk 代码和村庄代码。检索到的数据存储在 JSONArray 中,并在方法结束时以字符串格式返回。

项目 2 网页和前端

下拉列表.jsp

  • HTML
  <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
     pageEncoding="ISO-8859-1"%>
<script  type="text/javascript" src="jquery-3.6.0.min.js"></script>
<script  type="text/javascript" src="Ajaxcall.js"></script>
<!DOCTYPE html>
<html>
   <head>
      <meta charset="ISO-8859-1">
      <title>Insert title here</title>
   </head>
   <body>
      <table border="1" cellpadding="10px" cellspacing="5px">
         <tr>
            <td>District: </td>
            <td>
               <select id="districtlist" name="districtlist" required>
                  <option disabled selected>Select District</option>
               </select>
            </td>
         </tr>
         <tr>
            <td>Taluk: </td>
            <td>
               <select id="taluklist" name="taluklist" required>
                  <option disabled>Select Taluk</option>
               </select>
            </td>
         </tr>
           
         <tr>
            <td>Village: </td>
            <td>
               <select id="villagelist" name="villagelist" required>
                  <option disabled>Select Village</option>
               </select>
            </td>
         </tr>
      </table>
   </body>
</html>  

插件 jquery-3.6.0.min.js 需要导入到 HTML 项目中,当插件部署到本地项目并导入时,效果最佳。网页很简单,只有基本布局,没有太多 CSS,因为本教程的范围只是解释基于数据库的动态下拉列表。现在已经编写了下拉列表的网页布局,是时候编写 AJAX 调用了。名为 Ajaxcall.js 的 JavaScript 文件用于填充下拉列表。它也是调用链接到 Java 服务方法的 URL 的地方。

Ajax调用

  • JavaScript
  var dis;
var tal;
var vill;
$(document).ready(function () {
   $.ajax({
      type: "GET",
      url: "http://localhost:8075/dist",
      data: "json",
      contentType: "application/json",
      success: function (data) {
           let obj = $.parseJSON(data);
           $.each(obj, function (key, value) {
            $('#districtlist').append('<option value="' + value.districtcode + '">' + value.districtcode + '--' + value.districtname + '</option>');
         });
      },
 
      error: function (data) {
         $('#districtlist').append('<option>District Unavailable</option>');
      },
   });
 
   /*$('#districtlist').trigger("change");*/
 
   $('#districtlist').change(function () {
 
      $('#taluklist').find('option').remove();
      $('#taluklist').append('<option>Select taluk</option>');
      $('#villagelist').find('option').remove();
      $('#villagelist').append('<option>Select village</option>');
    
        var distid1 = $('#districtlist').val();
        var inputValObj = {};
         alert(distid1);
      inputValObj.Discode = distid1;
      var inputVal = JSON.stringify(inputValObj);
      alert(inputVal);
      var data = inputVal.toString();
      alert(data);
      $.ajax({
         type: "GET",
         url: "http://localhost:8075/taluk?Discode=" + distid1,
         /*data: 1,*/
         contentType: "application/json",
         success: function (data) {
            let obj = $.parseJSON(data);
            $.each(obj, function (key, value) {
                 $('#taluklist' ).append( '<option value="' + value.talukcode + '">' + value.talukcode + '--' + value.talukname + '</option>');
            });
         },
         error: function (data) {
              $('#taluklist' ).append('<option>Taluk Unavailable</option>');
         },
      });
   });
   $('#taluklist' ).change( function () {
      $('#villagelist' ).find('option').remove();
      $('#villagelist' ).append('<option>Select village</option>');
      var distid1 = $('#districtlist').val();
        var talukid = $('#taluklist').val();
        alert(distid1);
      alert(talukid);
      var inputValObj = {};
      inputValObj.Discode = distid1; 
      inputValObj.talucode = talukid;
      var inputVal = JSON.stringify(inputValObj);
      var data = inputVal.toString();
      $.ajax({
         type: "GET", //POST     
           url: "http://localhost:8075/village?Discode=" + distid1 + "&" + "Talukcode=" + talukid,
         contentType: "application/json",
         success: function (data) {
              let obj = $.parseJSON(data);
              $.each(obj, function (key, value) {
               $('#villagelist' ).append( '<option value="' + value.villagecode + '">' + value.villagecode + '--' + value.villagename + '</option>');
            });
         }, 
           error: function (data) {
            $('#villagelist').appe nd('<option>village Unavailable</option>');
         },
      });
   });
});       

当文档准备就绪时,使用“http://localhost:8075/dist”URL 在第一个 AJAX 调用中调用 saylistDistrict() 函数,提取的数据进入成功函数。现在,数据被解析并存储到变量“obj”中,然后使用 jQuery 中的 $.each 进行迭代。然后使用“$('#districtlist').append('<option value=”' + value.districtcode+ '”>' + value.districtcode + '–' + value.districtname+ '</option>');' 命令将迭代中的每个条目附加到区域下拉列表中。

注意:'districtlist' 是区域下拉菜单的 ID。

当地区下拉菜单发生变化时,jQuery '$('#districtlist').change(function () {}); 被调用,url “http://localhost:8075/taluk?Discode=”+distid1 调用 Java 函数 ListTaluk()。然后使用 ' $('#taluklist').append('<option value=”' + value.talukcode + '”>' + value.talukcode + '–' + value.talukname+ '</option>');' 命令将返回的数据填充到 taluk 下拉菜单中。

当 taluk 下拉列表值发生更改时,将调用 jQuery '$('#taluklist').change(function () {});'。url“http://localhost:8075/village?Discode=”+distid1+”&”+”Talukcode=”+talukid 调用 Java 函数 Listvillage()。然后使用 '$('#villagelist').append('<option value=”' + value.villagecode + '”>' + value.villagecode + '–' + value.villagename+ '</option>')' 命令将返回的数据填充到 'villagelist' 下拉列表中。

此外,每当修改下拉菜单时,依赖于修改的下拉菜单的其他下拉菜单值都会被删除,并插入“选择”占位符。使用 .remove() 函数删除下拉菜单值(如上例所示),并使用以下模板中的命令插入“选择”占位符“$('#taluklist').append('<option>Select taluk</option>');”。

在任何 Spring Boot 项目中,都会有一个带有 @SpringBootApplication 注释的 Java 类,必须使用右键单击并选择 Run As _> Java 应用程序来运行该类。第一个项目必须以这种方式运行。第二个项目必须在服务器上运行,方法是使用右键单击 - Run as -> Run on the server。使用以下方法运行 dropdown.jsp 后,可以观察到本教程的输出。   

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

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

相关文章

Vue前端开发2.3.6 列表渲染指令

在Vue.js中&#xff0c;v-for指令是渲染列表的关键工具&#xff0c;支持从数组、对象、数字和字符串中生成列表。它简化了商品列表等重复元素的创建。为了优化性能&#xff0c;key属性为每个列表项提供唯一标识&#xff0c;帮助Vue追踪节点身份&#xff0c;实现元素重用。实战中…

敏捷开发02:敏捷开发之Scrum开发框架介绍

一、什么是 Scrum 1.1 Scrum 定义 Scrum 是敏捷开发方法之一&#xff0c;它使用比较广泛。 敏捷的其它开发方法还有 XP(极限编程)、FDD(特性驱动开发)、Crystal(水晶方法)、TDD(测试驱动开发)、DSDM(动态系统开发)等等敏捷方法。 Scrum-Guide 中定义的 Scrum&#xff1a; S…

使用mingw+CMake在Windows平台编译OpenCV

1. 安装mingw和cmake cmake的安装比较简单&#xff0c;百度一下完成相关操作即可&#xff0c;笔者安装的是3.24.3版本。 Mingw的安装也有很多相关文章&#xff0c;不过我使用的是安装QT时附带安装的mingw&#xff0c;其路径为D:\software\Qt\Tools\mingw1120_64。其中的bin文件…

能源电力企业安全数据内外网文件交换

在数字化浪潮的推动下&#xff0c;能源电力行业数据交换的频率急剧上升&#xff0c;涉及的视频、研发、设计等各类文件数量庞大。这些文件的内外网传输不仅要追求速度&#xff0c;更要确保数据安全。随着国家对数据安全重视程度的提高&#xff0c;《网络安全法》和《数据安全法…

突破内存限制:Mac Mini M2 服务器化实践指南

本篇文章&#xff0c;我们聊聊如何使用 Mac Mini M2 来实现比上篇文章性价比更高的内存服务器使用&#xff0c;分享背后的一些小的思考。 希望对有类似需求的你有帮助。 写在前面 在上文《ThinkPad Redis&#xff1a;构建亿级数据毫秒级查询的平民方案》中&#xff0c;我们…

C++ 二叉搜索树(Binary Search Tree, BST)深度解析与全面指南:从基础概念到高级应用、算法优化及实战案例

&#x1f31f;个人主页&#xff1a;落叶 &#x1f31f;当前专栏: C专栏 目录 ⼆叉搜索树的概念 ⼆叉搜索树的性能分析 ⼆叉搜索树的插⼊ ⼆叉搜索树的查找 二叉搜索树中序遍历 ⼆叉搜索树的删除 cur的左节点为空的情况 cur的右节点为空的情况 左&#xff0c;右节点都不为…

数据库、数据仓库、数据湖、数据中台、湖仓一体的概念和区别

数据库、数据仓库、数据湖、数据中台和湖仓一体是数据管理和分析领域的不同概念&#xff0c;各自有不同的特点和应用场景。以下是它们的主要区别&#xff1a; 1. 数据库&#xff08;Database&#xff09; 定义&#xff1a;结构化的数据存储系统&#xff0c;用于高效地存储、检…

RabbitMQ原理架构解析:消息传递的核心机制

文章目录 一、RabbitMQ简介1.1、概述1.2、特性 二、RabbitMQ原理架构三、RabbitMQ应用场景3.1、简单模式3.2、工作模式3.3、发布订阅3.4、路由模式3.5 主题订阅模式 四、同类中间件对比五、RabbitMQ部署5.1、单机部署5.2、集群部署&#xff08;镜像模式&#xff09;5.3、K8s部署…

idea_常用设置

相关设置 项目的JDK设置out目录取消自动更新设置主题设置菜单和窗口字体大小滚轮调节字体大小显示行号与方法分隔符代码智能提示忽略大小写自动导包配置设置项目文件编码设置控制台的字符编码修改类头的文档注释信息设置自动编译 项目的JDK设置 File -> Project Structure -…

Redis的管道操作

在现代应用程序中&#xff0c;Redis作为一种高性能的内存数据库&#xff0c;被广泛用于缓存、消息队列、实时分析等场景。为了进一步提高Redis的性能&#xff0c;Redis提供了管道&#xff08;Pipeline&#xff09;操作&#xff0c;允许客户端将多个命令一次性发送到服务器&…

详解登录MySQL时出现SSL connection error: unknown error number错误

目录 登录MySQL时出错SSL connection error: unknown error number 出错原因 使用MySQL自带的工具登录MySQL 登陆之后&#xff0c;使用如下命令进行查看 解决方法 找到MySQL8安装目录下的my.ini配置文件 记事本打开my.ini文件&#xff0c;然后按下图所示添加配置 此时再…

E2、UML类图顺序图状态图实训

一、实验目的 在面向对象的设计里面&#xff0c;可维护性复用都是以面向对象设计原则为基础的&#xff0c;这些设计原则首先都是复用的原则&#xff0c;遵循这些设计原则可以有效地提高系统的复用性&#xff0c;同时提高系统的可维护性。在掌握面向对象七个设计原则基础上&…

Angular面试题汇总系列一

1. 如何理解Angular Signal Angular Signals is a system that granularly tracks how and where your state is used throughout an application, allowing the framework to optimize rendering updates. 什么是信号 信号是一个值的包装器&#xff0c;可以在该值发生变化时…

我要成为算法高手-递归篇

目录 题目1&#xff1a;汉诺塔题目2&#xff1a;合并两个有序链表题目3&#xff1a;反转链表题目4&#xff1a;两两交换链表中的结点题目5&#xff1a;Pow(x,n) 题目1&#xff1a;汉诺塔 面试题 08.06. 汉诺塔问题 - 力扣&#xff08;LeetCode&#xff09; 解题思路&#xff1…

【大数据技术基础】 课程 第8章 数据仓库Hive的安装和使用 大数据基础编程、实验和案例教程(第2版)

第8章 数据仓库Hive的安装和使用 8.1 Hive的安装 8.1.1 下载安装文件 访问Hive官网&#xff08;http://www.apache.org/dyn/closer.cgi/hive/&#xff09;下载安装文件apache-hive-3.1.2-bin.tar.gz 下载完安装文件以后&#xff0c;需要对文件进行解压。按照Linux系统使用的…

js.二叉树的层序遍历2

链接&#xff1a;107. 二叉树的层序遍历 II - 力扣&#xff08;LeetCode&#xff09; 题目&#xff1a; 给你二叉树的根节点 root &#xff0c;返回其节点值 自底向上的层序遍历 。 &#xff08;即按从叶子节点所在层到根节点所在的层&#xff0c;逐层从左向右遍历&#xff09…

kafka生产者和消费者命令的使用

kafka-console-producer.sh 生产数据 # 发送信息 指定topic即可 kafka-console-producer.sh \ --bootstrap-server bigdata01:9092 \ --topic topicA # 主题# 进程 29124 ConsoleProducer kafka-console-consumer.sh 消费数据 # 消费数据 kafka-console-consumer.sh \ --boo…

基于Springboot的心灵治愈交流平台系统的设计与实现

基于Springboot的心灵治愈交流平台系统 介绍 基于Springboot的心灵治愈交流平台系统&#xff0c;后端框架使用Springboot和mybatis&#xff0c;前端框架使用Vuehrml&#xff0c;数据库使用mysql&#xff0c;使用B/S架构实现前台用户系统和后台管理员系统&#xff0c;和不同级别…

从入门到精通数据结构----四大排序(上)

目录 首言&#xff1a; 1. 插入排序 1.1 直接插入排序 1.2 希尔排序 2. 选择排序 2.1 直接选择排序 2.2 堆排序 3. 交换排序 3.1 冒泡排序 3.2 快排 结尾&#xff1a; 首言&#xff1a; 本篇文章主要介绍常见的四大排序&#xff1a;交换排序、选择排序、插入排序、归并排…

SpringCloud+SpringCloudAlibaba学习笔记

SpringCloud 服务注册中心 eureka ap 高可用 分布式容错 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> <dependency><groupId…