springboot第30集:springboot集合问题

news2025/2/2 9:50:25

Logstash

Logstash 是开源的服务器端数据处理管道,能够同时从多个来源采集数据、格式化数据,然后将数据发送到es进行存储。

ElasticSearch

Elasticsearch 是基于JSON的分布式搜索和分析引擎,是利用倒排索引实现的全文索引。

Kibana
Kibana 能够可视化 Elasticsearch 中的数据并操作。

es在elk生态圈中处于核心地位,是开源大规模基于倒排索引的全文搜索分析引擎,他几乎能实时的支持存储搜索分析。
优势:

  • 横向可扩展性: 增加服务器可直接配置在集群中

  • 分片机制提供更好的分布性: 分而治之的方式来提升处理效率

  • 高可用: 提供复制(replica)机制

  • 实时性: 通过将磁盘上的文件放入文件缓存系统来提高查询速度

基本概念

  • Index: 一系列文档的集合,类似于mysql中数据库的概念

  • Type: 在Index里面可以定义不同的type,type的概念类似于mysql中表的概念,是一系列具有相同特征数据的结合。

  • Document: 文档的概念类似于mysql中的一条存储记录,并且为json格式,在Index下的不同type下,可以有许多document。

  • Shards: 在数据量很大的时候,进行水平的扩展,提高搜索性能

  • Replicas: 防止某个分片的数据丢失,可以并行得在备份数据里及搜索提高性能

elasticsearch查询语法

_cat API

查询当前es集群的相关消息,包括集群中的index数量、运行状态、当前集群所在的ip,目的在于将查询的结果以更加友好的方式输出。

  • cat: 输出_cat api中所有支持的查询命令

  • cat health: 检查es集群运行的状况

  • cat count: 可以快速的查询集群或者index中文档的数量

  • cat indices: 查询当前集群中所有index的数据,包括index的分片数、document的数量、存储所用的空间大小...

  • 其他cat api参考官方文档: www.elastic.co/guide/en/el…[1]

Search APIs

搜索数据,查询语法多,功能强大
REST request URI: 轻便快速的URI查询方法
REST request body: 可以有许多限制条件的json格式查询方法

  • "query": 在请求消息体中的query允许我们用Query DSL的方式查询。

    • "term": 查询时判断某个document是否包含某个具体的值,不会对被查询的值进行分词查询

    • "match" 将被查询值进行分词,然后用评分机制(TF/IDF)进行打分

    • "match_phrase": 查询指定段落

    • "Bool": 结合其他真值查询,通常和must should mustnot(与或非)一起组合出复杂的查询

    • "range": 查询时指定某个字段在某个特定的范围

location / {
        # 指向我们打包后上传的前端文件
        root /opt/nginx/dist;
        index index.html;
    }
    location /jwt/ {
        # 转发请求到后端服务网关
        proxy_pass http://127.0.0.1:8765/jwt/;
    }
    location /api/ {
        proxy_pass http://127.0.0.1:8765/api/;
     }

默认的 Nginx 配置文件路径如下:

  • Nginx 主配置文件路径:/www/server/nginx/conf/nginx.conf

  • 网站配置文件路径:/www/server/panel/vhost/nginx/

  • 默认主页文件路径:/www/server/panel/vhost/index.html

1.开始nginx

切换到相应路径

start nginx.exe

2.重新加载配置文件

nginx -s reload

  1. 进入jar包所在路径

  2. 输入:

    nohup java -jar xxx.jar &
  3. 按下回车后再输入exit(注意,一定要输入exit,才能让其一直运行。)

  4. 要想让其停止运行,输入:

    netstat -antp | grep java
  5. 然后停止对应进程:

    kill -9 pid

TypeError: Failed to execute 'fetch' on 'Window': Request with GET/HEAD method cannot have body.

一、Swagger报错:

1、报错类型:

TypeError: Failed to execute ‘fetch‘ on ‘Window‘: Request with GET/HEAD method cannot have body

2、解决方案:

请求方式错误:请求参数使用了@RequestBody注解,就要用Post来进行请求

二、@RequestParam与@RequestBody的区别

1、@RequestParam:

@RequestParam接收的参数是来自requestHeader中,即请求头。通常用于GET请求。

2、@RequestBody:

@RequestParam接收的参数是来自requestBody中,即请求体。主要用来接收前端传递给后端的json字符串中的数据的,所以只能发送POST请求。

server {
    listen       80;
    server_name www.aaa.ink;
 client_max_body_size  1000M;
 client_body_timeout 20s;
 client_header_timeout 10s;
 send_timeout 30s;
 ssl_protocols TLSv1.2;
    charset utf-8;
 #后端接口
 location ^~ /api/ {
  proxy_pass http://127.0.0.1:8080/api/;
 }
    
    location ~/(.*)$ {
    #前端项目
        root   /usr/local/nginx/ttm;
        index  index.html index.htm;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
}
  1. LB 转发的时候带上 X-Forwarded-Port 请求头,转发原始请求的端口号(需要 LB 转发自己能够控制,我们如果要配置还需要让 DevOps 的童鞋帮忙弄,如果完全是自己控制的就比较方便【推荐】)

  2. 在使用 Swagger 中间件之前把 X-Forwarded-Port 请求头设置为 443(不够灵活,如果访问 LB 是 http 或者有特别的端口号就会有问题)

  3. 在使用 swagger 中间件之前把 X-Forwarded-Host 请求头移除掉,这样就不会有 servers 这个属性了(感觉不够优雅)

  4. 注册一个 PreSerializeFilter 把 Servers 清空

在Swagger UI中,您可以使用servers配置指定API的服务器信息。这使您能够在Swagger UI中定义和切换不同的服务器配置,以便与不同的API环境进行交互。

以下是一个示例Swagger UI配置文件,演示如何使用servers配置:

import springfox.documentation.swagger.web.SwaggerResource;
import springfox.documentation.swagger.web.SwaggerResourcesProvider;
import java.util.ArrayList;
import java.util.List;

@Configuration
public class SwaggerConfig {

    @Value("${swagger.enabled:true}")
    private boolean enabled;

    @Value("${swagger.pathMapping:/api}")
    private String pathMapping;

    @Bean
    public Docket api() {
        return new Docket(DocumentationType.OAS_30)
                .enable(enabled)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
                .paths(PathSelectors.any())
                .build()
                .securitySchemes(securitySchemes())
                .securityContexts(securityContexts())
                .pathMapping(pathMapping)
                .servers(servers());
    }

    private List<Server> servers() {
        List<Server> servers = new ArrayList<>();
        servers.add(new Server("https://1024bat.cn"));
        // 添加其他服务器配置
        return servers;
    }

    // 其他方法...

}

具体的错误消息为 "org.apache.ibatis.type.TypeException: Could not set parameters for mapping"。该错误通常发生在尝试为 MyBatis 映射中的参数设置值时出现问题。

根据错误消息,这个具体的问题是 "Error setting non null for parameter #1 with JdbcType null",即尝试为第一个参数设置非空值时出现了问题,并且 JdbcType 为 null。另外,错误消息还提到了一个类型转换问题:"java.lang.ClassCastException: class java.lang.Long cannot be cast to class java.lang.String"。

这意味着在你的 MyBatis 映射文件中,可能存在一个参数类型不匹配的问题。具体地说,它期望一个 String 类型的参数,但实际传入的是一个 Long 类型的值,导致类型转换失败。

为了解决这个问题,你可以尝试以下几个步骤:

  1. 检查参数类型:检查 MyBatis 映射文件中相关的参数定义,确保参数类型与数据库字段的类型匹配。如果参数类型与数据库字段类型不匹配,可能会导致类型转换错误。

  2. 检查传入的参数值:检查代码中传入的参数值,确保参数值的类型与 MyBatis 映射文件中定义的参数类型一致。如果参数值的类型不正确,你可能需要进行相应的类型转换或更正。

  3. 设置正确的 JdbcType:在 MyBatis 映射文件中,尝试为该参数设置一个合适的 JdbcType。你可以通过在映射文件中的参数定义中添加 jdbcType 属性来指定 JdbcType,例如 jdbcType="VARCHAR"

  4. 检查配置:检查 MyBatis 的配置文件,确保没有配置问题,例如类型别名或类型处理器的配置。

df2eac32bbaa314e74256d267356c5f5.png
image.png

如果你希望在Spring Boot中,当数据库中没有对应值时,仍然返回字段但其值为空,你可以使用Jackson库的另一个配置选项。

在Spring Boot的配置文件中添加以下配置:

spring.jackson.default-property-inclusion=non_empty

或者,在application.yml配置文件中使用以下配置:

spring:
  jackson:
    default-property-inclusion: non_empty

这将告诉Jackson在序列化对象时,忽略值为null或空的属性,并只返回非空属性。当数据库中没有对应值时,该属性将被序列化为空字符串而不是null

请注意,non_empty选项除了将null值排除在外,还会排除空字符串、空集合、空数组等。如果你只想排除null值而保留空字符串,请使用non_null选项。

使用上述配置后,当属性的值为null时,它将被序列化为一个空字符串。如果属性的值为空字符串或空集合,则不会返回该属性。

SpringBoot Jackson 支持 Java8 LocalDate 格式和 null 转 “”

@Bean
    public ObjectMapper objectMapper() {
        ObjectMapper objectMapper = new ObjectMapper();
        // 1.将null转""
        objectMapper.getSerializerProvider().setNullValueSerializer(new JsonSerializer<Object>() {
            @Override
            public void serialize(Object paramT, JsonGenerator paramJsonGenerator, SerializerProvider paramSerializerProvider) throws IOException {
                //设置返回null转为 空字符串""
                paramJsonGenerator.writeString("");
            }
        });
        // 2.支持java8 LocalDate时间
        objectMapper.findAndRegisterModules();
        return objectMapper;
    }

default-property-inclusion配置属性有以下几个选项:

  1. always: 始终包含属性,即使属性值为null或空值。

  2. non_null: 只包含非null的属性,其他空值(如空字符串、空集合、空数组)将被排除。

  3. non_absent: 包含非null和非缺失(absent)的属性。"缺失"指的是在JSON中未出现的属性。

  4. non_default: 包含非null和非默认值的属性。"默认值"是指Java对象字段的默认初始化值,例如0false、空字符串等。

  5. non_empty: 包含非null和非空的属性,其他空值(如空字符串、空集合、空数组)将被排除。

  6. null: 包含所有属性,即使属性值为null或空值。

在Spring Boot中,默认的配置选项是default-property-inclusion=null,即所有属性都被包含在序列化的结果中,包括null和空值。

根据提供的错误信息,看起来存在JSON解析错误。错误提示显示在解析过程中遇到了意外的字符'}',期望的是双引号以开始字段名。

这种情况通常发生在接收的JSON数据格式不正确时,可能是由于发送的数据格式错误或存在其他格式问题。请确保传递给JSON.parse()的数据是有效的JSON字符串,并符合JSON的语法要求。

您可以尝试检查传递给JSON.parse()event.data数据,并确保它是有效的JSON字符串。检查JSON字符串中是否存在不正确的字符、缺少引号或其他语法错误。

另外,您可以使用console.log(event.data)输出接收到的event.data数据,以便查看实际接收到的内容。这样可以更好地了解接收到的数据,以便进一步调试和定位问题。

如果您需要更详细的帮助,请提供实际接收到的event.data数据,以便我能够更准确地帮助您解决问题。

加群联系作者vx:xiaoda0423

仓库地址:https://github.com/webVueBlog/JavaGuideInterview

参考资料

[1]

https://link.jianshu.com?t=https://www.elastic.co/guide/en/elasticsearch/reference/5.5/cat.html: https://link.juejin.cn?target=https%3A%2F%2Flink.jianshu.com%3Ft%3Dhttps%3A%2F%2Fwww.elastic.co%2Fguide%2Fen%2Felasticsearch%2Freference%2F5.5%2Fcat.html

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

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

相关文章

低代码项目实战第一弹!2人14天快速构建电商企业供应链管理平台(一)

一、前言&#xff1a;项目背景 项目情况&#xff1a;一家主要通过电商平台销售日用清洁用品的企业&#xff0c;淘宝垂直品类第一&#xff0c;销售模式包括自营和代理商两种模式&#xff0c;平时用旺店通ERP进行订单管理和财务结算。并且客户公司有小的开发团队&#xff0c;可以…

Java日期类

日期类 第一代日期类&#xff1a; 1、Date&#xff1a;精确到毫秒&#xff0c;代表特定的瞬间 2、SimpleDateFormat&#xff1a; **格式化和解析日期的具体类&#xff0c;**它允许进行&#xff1a;格式化(日期 → 文本) 解析(文本 → 日期) 和 规范化。 3、常用的使用方法…

sentinel介绍-分布式微服务流量控制

官网地址 https://sentinelguard.io/ 介绍 随着微服务的流行&#xff0c;服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件&#xff0c;主要以流量为切入点&#xff0c;从流量路由、流量控制、流量整形、熔断降级、系统自…

MySQL 知识连载(一)

点击上方↑“追梦 Java”关注&#xff0c;一起追梦&#xff01; MySQL 是一款开源软件&#xff0c;凭借其出色的性能&#xff0c;目前已经成为绝大多数互联网公司的首选关系型数据库。因此程序员不能只懂数据库的增删改查和一些简单的使用技巧&#xff0c;更需要熟练掌握 MySQL…

MySQL八股学习历程3MySQL数据页的格式from小林coding

MySQL八股学习历程3MySQL数据页的格式from小林coding InnoDB数据页MySQL单表建议数据承载量探究 InnoDB数据页 InnoDB 的数据是按数据页为单位来读写的,每个数据页大小默认为16KB,数据页的格式如下图 文件头中有两个指针,指向上一个数据页和下一个数据页,使得页面连接成一个…

大佬带你体验华为云代码检查服务CodeArts Check

1 开发者的自述 作为开发者&#xff0c;刚开始都不希望有任何针对他代码的批评&#xff0c;因为一旦知道代码被检测出问题&#xff0c;就会付出额外的努力做好工作&#xff0c;实际上&#xff0c;从一个开发人员的编码中&#xff0c;你能更清楚地了解编程语言可以做什么&#…

单片机裸机程序框架是怎样的?

单片机裸机程序框架指的是在单片机上进行编程时&#xff0c;不依赖任何操作系统或高级库的纯裸机编程框架。这意味着你需要直接操作底层硬件和寄存器&#xff0c;以完成特定的任务。下面是一个典型的单片机裸机程序框架&#xff0c;以C语言为例&#xff1a; // 头文件包含&…

分布式kmeans(scala原码实现)

scala分布式kmeans 1.分布式Kmeans算法设计思路2.分布式Kmeans算法代码实现2.1 Driver&#xff08;主要负责分配、汇总数据&#xff09;2.2 Executor&#xff08;主要负责计算&#xff09;2.3 Executor2&#xff08;主要负责计算&#xff09; 3.分布式Kmeans算法spark集群部署3…

如何解决笔记本电脑键盘失灵的问题:3个简单而有效的解决方法

当你使用笔记本电脑时&#xff0c;可能会遇到键盘失灵的情况&#xff0c;这是一件非常令人恼火的事情。然而&#xff0c;不要担心&#xff0c;下面将为你提供三个简单而有效的解决方法。 首先&#xff0c;检查连接和驱动程序。请确保键盘与笔记本电脑的连接正常&#xff0c;有时…

数据结构与算法之美总结(数组、链表、栈、队列、递归、排序及二分)

title: 数据结构与算法之美总结&#xff08;数组、链表、栈、队列、递归、排序及二分&#xff09; date: 2023-04-15 01:41:26 tags: 数据结构算法 categories:数据结构与算法 cover: https://cover.png feature: false 1. 前言 1、什么是数据结构&#xff1f;什么是算法&…

SpringCloud Alibaba组件之Seata安装部署

seata server&#xff08;TC&#xff09; 部署 部署指南&#xff1a;https://seata.io/zh-cn/docs/ops/deploy-guide-beginner.html 下载地址&#xff1a;https://github.com/seata/seata/tags 版本对应关系&#xff1a;SpringCloud Alibaba 组件对应关系说明 下载 通过查…

Minio部署总结

官方介绍 MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口&#xff0c;非常适合于存储大容量非结构化的数据&#xff0c;例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等&#xff0c;而一个对象文件可以是任意大小&#xf…

一文搞懂数据库索引原理

前言 写数据库&#xff0c;我第一时间就想到了MySQL、Oracle、索引、存储过程、查询优化等等。 不知道大家是不是跟我想得一样&#xff0c;我最想写的是索引&#xff0c;为啥呢&#xff1f; 以下这个面试场景&#xff0c;不知道大家熟悉不熟悉&#xff1a; 面试官&#xff1a;数…

郑州网站域名升级https通配符证书

新创建的网站如果没有安装SSL证书&#xff0c;在客户端与服务器传输信息时会使用明文传输&#xff0c;明文传输的数据容易被其他人截获或者插入违法信息&#xff0c;会对网站所有者和访问网站的客户带来危害。而部署了SSL证书将网站域名由http升级为https&#xff0c;会在客户端…

【PHP面试题51】Swoole是什么?有什么特点,主要解决了什么问题

文章目录 一、前言二、什么是Swoole&#xff1f;三、如何使用Swoole&#xff1f;四、Swoole主要解决了什么问题&#xff1f;4.1 高性能4.2 高并发4.3 异步编程4.4 多协议支持 五、总结 一、前言 本文已收录于PHP全栈系列专栏&#xff1a;PHP面试专区。 计划将全覆盖PHP开发领域…

jdk1.8安装教程及环境变量配置(含jdk8,11,13安装文件)

目录 友情提醒第一章、JVM、JRE、JDK介绍第二章、下载和安装JDK2.1&#xff09;百度网盘直接下载免安装2.2&#xff09;官网下载安装JDK&#xff08;需要收费&#xff09; 第三章、环境变量配置3.1&#xff09;windows环境变量配置3.2&#xff09;验证环境变量是否配置成功 友情…

spark启动HA时workers为0,且为standby状态

今天学习一个spark视频&#xff0c;在启动StandAloneHa模式的时候&#xff0c;发现workers为0&#xff0c;而且spark两个master的状态都为standby&#xff0c;找了很久&#xff0c;才知道我用的spark3.2 最低支撑的zookeeper版本为3.5.x,而且zookeeper的安装包是需要带bin的那个…

自学C++(4)

1、友元 友元的目的就是让一个函数或者类访问另一个类中private成员 1.1全局函数做友元 写法&#xff1a;在类外定义一个全局函数&#xff0c;如果这个函数访问到了类中private成员&#xff0c;则需要在这个类中声明这个函数为private类型。 这里需要注意的是全局函数形参的…

Spark MLlib快速入门(1)逻辑回归、Kmeans、决策树、Pipeline、交叉验证

Spark MLlib快速入门(1)逻辑回归、Kmeans、决策树案例 除了scikit-learn外&#xff0c;在spark中也提供了机器学习库&#xff0c;即Spark MLlib。 在Spark MLlib机器学习库提供两套算法实现的API&#xff1a;基于RDD API和基于DataFrame API。今天&#xff0c;主要介绍下Data…

ModuleNotFoundError: No module named ‘pkg_resources‘

原因可能是因为setuptools升级版本过高&#xff0c;把setuptools降级到44.0.0及以下即可。 pip uninstall setuptoolspip install setuptools44.0.0 -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com