springboot第43集:知道你很强但你不懂kafka,79眉笔你照样买不起

2023年 10月 10日 78.9k 0

在Spring Boot中,"bean" 是一个非常重要的概念,它代表了一个由Spring容器管理的对象实例。这些对象通常用于组成应用程序的各个部分,并且可以在整个应用程序中共享和重用。Spring Boot的Bean管理是基于Spring框架的IoC(控制反转)和DI(依赖注入)原理构建的。

以下是Spring Boot中Bean的一些关键特性和用途:

  • 组件管理: Bean管理允许您创建、配置和管理应用程序中的各种组件,例如服务、数据访问对象(DAO)、控制器等。这些组件可以通过Spring容器进行实例化和初始化,然后在需要的地方进行注入。
  • 依赖注入: Spring Boot容器负责管理Bean之间的依赖关系。通过依赖注入,一个Bean可以将它所依赖的其他Bean注入到它自己的属性或构造函数中,从而实现了组件之间的解耦和松散耦合。
  • 单例管理: 默认情况下,Spring Boot将Bean配置为单例(Singleton)。这意味着容器只会创建一个Bean实例,并在需要时重用它。这有助于减少资源消耗和提高性能。
  • 配置管理: Spring Boot允许您使用注解或XML配置文件来定义Bean及其依赖关系。您可以在应用程序的配置文件中声明哪些类应该被实例化为Bean,并且可以配置它们的属性和行为。
  • 生命周期管理: Spring容器管理Bean的生命周期,包括实例化、初始化、使用和销毁。您可以定义初始化和销毁方法,以便在Bean的生命周期中执行自定义逻辑。
  • AOP(面向切面编程) : Spring Boot支持AOP,允许您定义横切关注点,如日志记录、性能监控等,并将它们应用于Bean的方法。
  • 测试: Spring Boot的Bean管理使单元测试和集成测试变得更容易,因为您可以轻松地模拟或替换Bean的依赖关系。
  • 总之,Spring Boot中的Bean是一种灵活且强大的机制,用于组织和管理应用程序的各个组件,使应用程序更易于维护、测试和扩展。通过Spring容器的帮助,Bean可以以一种高度可配置的方式进行管理,从而实现了松散耦合、可维护性和可测试性。

    DruidDataSource dataSource = new DruidDataSource(): 在这里,创建了一个 Druid 数据源对象。Druid 是一个流行的数据库连接池,用于管理数据库连接。

    image.png

    image.png

    image.png

    image.png

    kubectl kubelet kubeadm版本: 1.23.1 操作系统版本: CentOS 8.2 64位

    外网放开30000端口,后续浏览器登陆k8s dashboard看板使用。并检查ssh服务端口22是否正常开启。

    安装常用工具:

    yum install -y yum-utils device-mapper-persistent-data lvm2 iproute-tc
    

    国内存在墙的问题,添加阿里源加速:

    yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    

    要创建一个定时任务,你可以使用@Scheduled注解来标记一个方法,并指定任务的触发时间。以下是一个示例:

    import org.springframework.scheduling.annotation.Scheduled;
    import org.springframework.stereotype.Component;
    
    @Component
    public class ScheduledTask {
    
        @Scheduled(fixedRate = 5000) // 每隔5秒执行一次
        public void performScheduledTask() {
            // 执行定时任务的逻辑
            // 这里可以是任何你需要定期执行的代码
        }
    }
    

    在上面的示例中,performScheduledTask方法使用@Scheduled注解标记为定时任务,fixedRate参数指定了任务的触发时间,这里是每隔5秒执行一次。

    4. 配置异步任务和定时任务

    确保在你的Spring Boot应用程序的配置类上添加@EnableAsync@EnableScheduling注解,以启用异步任务和定时任务的支持。例如:

    import org.springframework.context.annotation.Configuration;
    import org.springframework.scheduling.annotation.EnableAsync;
    import org.springframework.scheduling.annotation.EnableScheduling;
    
    @Configuration
    @EnableAsync
    @EnableScheduling
    public class TaskConfig {
        // 配置类
    }
    

    对文本搜索一般可以分为三种类型:模糊搜索、精确搜索、分词搜索。

    • 模糊搜索:如sql中的like查询语句,匹配包含搜索关键字的内容。
    • 精确搜索:文本内容与搜索关键字一致。
    • 分词搜索:将文本先进行分词,包括搜索关键字分词和搜索内容进行分词,再匹配相关内容。
    #!/bin/bash
    
    # 定义要关闭的应用程序的名称
    APP_NAME=""
    
    # 查找应用程序的进程ID(PID)
    PID=$(ps -ef | grep "$APP_NAME" | grep -v grep | awk '{ print $2 }')
    
    if [ -z "$PID" ]; then
      echo "应用程序已经停止"
    else
      echo "正在关闭应用程序 $APP_NAME (PID: $PID) ..."
      kill -9 "$PID"
      echo "应用程序已成功关闭"
    fi
    
    

    image.png

    /ect/profile 用来设置环境变量,内容样例如下

    # Get the aliases and functions
    if [ -f ~/.bashrc ]; then
            . ~/.bashrc
    fi
    export JAVA_HOME=/usr/share/jdk1.8.0_14
    export PATH=$JAVA_HOME/bin:.....
    

    image.png

    image.png

    MySQL 索引是一种用于提高数据库查询性能的数据结构。它们通过创建存储在表中数据的副本,以加速检索和查询操作。索引的主要目的是减少数据库系统需要扫描的数据量,从而加快数据检索的速度。

    以下是一个示例数据库和示例代码,用于说明 MySQL 索引的作用和使用方式:

    示例数据库:

    假设我们有一个简单的学生信息数据库,其中包含一个名为 students 的表,用于存储学生的信息,包括学生ID、姓名、年龄和课程。这是一个示例的数据库表结构:

    CREATE TABLE students (
        student_id INT PRIMARY KEY,
        name VARCHAR(50),
        age INT,
        course VARCHAR(50)
    );
    

    表中包含以下示例数据:

    student_id name age course
    1 John 20 Math
    2 Alice 22 History
    3 Bob 21 Chemistry
    4 Sarah 23 Biology
    5 Michael 22 Math
    ... ... ... ...

    示例代码:

    以下是一些示例代码,演示如何使用 MySQL 索引来优化查询操作。

  • 创建索引:

    students 表的 name 列上创建一个索引:

    CREATE INDEX idx_name ON students (name);
    
  • 查询优化:

    查询所有年龄为 22 岁的学生:

    SELECT * FROM students WHERE age = 22;
    

    使用索引后,查询将更加高效,因为 MySQL 可以快速定位到年龄为 22 岁的学生。

  • 覆盖索引:

    如果只需要查询学生的姓名而不需要其他信息,可以使用覆盖索引:

    SELECT name FROM students WHERE age = 22;
    

    这将减少数据的读取量,因为只需要访问索引而不需要访问实际数据行。

  • 联合索引:

    创建一个联合索引,以优化多个列的查询:

    CREATE INDEX idx_age_course ON students (age, course);
    

    查询年龄为 22 岁且课程为 "Math" 的学生:

    SELECT * FROM students WHERE age = 22 AND course = 'Math';
    

    联合索引可以加速复合条件的查询。

  • 总之,MySQL 索引是用来提高数据库查询性能的重要工具。通过创建适当的索引,可以加速常见查询操作,减少数据扫描的时间,从而提高数据库的响应速度。但是,需要谨慎使用索引,因为不当使用索引可能会导致性能下降。在设计数据库时,需要根据具体的查询需求和数据分布情况来选择创建哪些索引。

    在MySQL中,有多种类型和方法的索引可供选择,每种类型和方法都有其适用的场景和特点。以下是一些常见的MySQL索引类型和方法以及如何使用它们的示例:

    1. B-Tree 索引: B-Tree(平衡树)索引是最常见的索引类型,用于支持等值查询、范围查询和排序操作。

    示例: 创建一个B-Tree索引来优化students表中的student_id列:

    CREATE INDEX idx_student_id ON students (student_id);
    

    2. 哈希索引: 哈希索引是用于等值查询的特殊索引类型,适用于只需要精确匹配的情况。

    示例: 创建一个哈希索引来优化users表中的user_id列:

    CREATE INDEX idx_user_id ON users (user_id) USING HASH;
    

    3. 全文索引: 全文索引用于支持全文搜索,通常在文本列上使用。

    示例: 创建一个全文索引来优化articles表中的content列:

    CREATE FULLTEXT INDEX idx_content ON articles (content);
    

    4. 空间索引: 空间索引用于地理空间数据,支持地理空间查询。

    示例: 创建一个空间索引来优化locations表中的coordinates列:

    CREATE SPATIAL INDEX idx_coordinates ON locations (coordinates);
    

    5. 联合索引: 联合索引是在多个列上创建的索引,用于优化多条件的查询。

    示例: 创建一个联合索引来优化orders表中的customer_idorder_date列:

    CREATE INDEX idx_customer_order ON orders (customer_id, order_date);
    

    6. 前缀索引: 前缀索引是在列的一部分上创建的索引,用于减少索引大小。

    示例: 创建一个前缀索引来优化products表中的product_name列的前5个字符:

    CREATE INDEX idx_product_name ON products (product_name(5));
    

    7. 自定义索引方法: MySQL允许您创建自定义索引方法,以满足特定的查询需求。

    sudo rm /usr/local/mysql
    
    sudo rm -rf /usr/local/mysql*
    
    sudo rm -rf /Library/StartupItems/MySQLCOM
    
    sudo rm -rf /Library/PreferencePanes/My*
    
    sudo rm -rf /Library/Receipts/mysql*
    
    sudo rm -rf /Library/Receipts/MySQL*
    
    sudo rm -rf /var/db/receipts/com.mysql.*
    

    启动kafka之前必须启动zookeeper

    zookeeper集群,查看进程

    启动kafka

    启动脚本

    不能通过命令行的方式去修改副本

    0:生产者发送过来的数据,不需要等数据落盘应答。

    1:生产者发送过来的数据,Leader收到数据后应答。

    -1(all):生产者发送过来的数据,Leader和ISR队列里面的所有节点收齐数据后应答。-1和all等价。

    双端队列

    发送流程

    SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMddHHmmss");
    String dateTime=sdf.format(new Date());
    sysRole.setUpdateT(dateTime);
    

    生产经验,数据有序

    #!/bin/bash
    
    # 定义要关闭的应用程序的名称
    APP_NAME="admin-gateway-1.0-SNAPSHOT.jar"
    
    # 查找应用程序的进程ID(PID)
    PID=$(ps -ef | grep "$APP_NAME" | grep -v grep | awk '{ print $2 }')
    
    if [ -z "$PID" ]; then
      echo "应用程序已经停止"
    else
      echo "正在关闭应用程序 $APP_NAME (PID: $PID) ..."
      kill -9 "$PID"
      echo "应用程序已成功关闭"
    fi
    

    加群联系作者vx:xiaoda0423

    仓库地址:github.com/webVueBlog/…

    相关文章

    服务器端口转发,带你了解服务器端口转发
    服务器开放端口,服务器开放端口的步骤
    产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
    如何使用 WinGet 下载 Microsoft Store 应用
    百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
    百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

    发布评论