消息队列项目(2)

我们使用 SQLite 来进行对 Exchange, Queue, Binding 的硬盘保存

对 Message 就保存在硬盘的文本中

SQLite 封装

这里是在 application.yaml 中来引进对 SQLite 的封装

spring:datasource:url: jdbc:sqlite:./data/meta.dbusername:password:driver-class-name: org.sqlite.JDBCmybatis:mapper-locations: classpath:mapper/**Mapper.xml

先进行建表操作: 

 使用一个接口类和对应的 xml 就可以进行对数据库的操作

然后对增删查进行封装

完整代码:

SQliteMapper:

package com.example.mq.mqserver.mapper;import com.example.mq.mqserver.core.Binding;
import com.example.mq.mqserver.core.Exchange;
import com.example.mq.mqserver.core.MSGQueue;import java.util.List;@Mapper //数据持久层
public interface SQLiteMapper {// 建表void createExchangeTable();void createQueueTable();void createBindingTable();// 增删查int insertExchange(Exchange exchange);int deleteExchange(String exchangeName);List<Exchange> selectAllExchange();int insertQueue(MSGQueue queue);int deleteQueue(String queueName);List<MSGQueue> selectAllQueue();int insertBinding(Binding binding);int deleteBinding(Binding binding);List<Binding> selectAllBinding();
}

SQLiteMapper.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.example.mq.mqserver.mapper.SQLiteMapper"><update id="createExchangeTable">create table if not exists exchange (name varchar(50) primary key, durable boolean, type int);</update><update id="createQueueTable">create table if not exists queue(name varchar(50) primary key, durable boolean);</update><update id="createBindingTable">create table if not exists binding(exchangename varchar(50), queuename varchar(50), durable boolean, bindingkey varchar(50));</update><insert id="insertExchange">insert into exchange values(#{name}, #{durable}, #{type});</insert><delete id="deleteExchange">delete from exchange where name = #{exchangeName};</delete><select id="selectAllExchange" resultType="com.example.mq.mqserver.core.Exchange">select * from exchange;</select><insert id="insertQueue">insert into queue values(#{name}, #{durable}); </insert><delete id="deleteQueue">delete form queue where name = #{queueName};</delete><select id="selectAllQueue" resultType="com.example.mq.mqserver.core.MSGQueue">select * from queue;</select><insert id="insertBinding">insert into binding values(#{exchangeName}, #{queueName}, #{durable}, #{bindingKey});</insert><delete id="deleteBinding">delete from binding where exchangename = #{exchangeName} and queueName = #{queueName};</delete><select id="selectAllBinding" resultType="com.example.mq.mqserver.core.Binding">select * from binding;</select></mapper>

然后我们创建一个类来对整合上述的数据库操作

先在 mqserver 中创建一个 datacenter 包, 这个包用来进行所有数据的管理

然后在包里创建一个 DataBaseManager 的类进行数据库操作的整合

DataBaseManager

checkDBExists() 查找数据库是不是存在

createTable() 之前构造好的方法

    public boolean checkDBExists(){File file = new File("./data/meta.db");if(file.exists()){return true;}return false;}private void createTable(){sqLiteMapper.createExchangeTable();sqLiteMapper.createQueueTable();sqLiteMapper.createBindingTable();}

init() 对数据库进行初始化

// 针对数据库进行初始化// 有 data 文件夹的话就不用创建// 没有就进行创建public void init(){if(!checkDBExists()){// 创建文件夹File dataDir = new File("./data");dataDir.mkdirs();// 创建数据表createTable();System.out.println("[DataBaseManager] 数据库初始化完成");}else {System.out.println("[DatBaseManager] 数据库已经存在");}}

然后是增删查:

这里把整个类全部放上来

public class DataBaseManager {@AutowiredSQLiteMapper sqLiteMapper;// 针对数据库进行初始化// 有 data 文件夹的话就不用创建// 没有就进行创建public void init(){if(!checkDBExists()){// 创建文件夹File dataDir = new File("./data");dataDir.mkdirs();// 创建数据表createTable();System.out.println("[DataBaseManager] 数据库初始化完成");}else {System.out.println("[DatBaseManager] 数据库已经存在");}}public boolean checkDBExists(){File file = new File("./data/meta.db");if(file.exists()){return true;}return false;}private void createTable(){sqLiteMapper.createExchangeTable();sqLiteMapper.createQueueTable();sqLiteMapper.createBindingTable();}public void deleteDB(){// 先删除里面的文件File file = new File("./data/meta.db");boolean ret = file.delete();if(ret){System.out.println("[DataBaseManager] 删除数据库文件成功!");}else {System.out.println("[DataBaseManager] 删除数据库文件失败!");}// 再删除文件夹File dataDir = new File("./data");ret = dataDir.delete();if(ret){System.out.println("[DataBaseManager] 删除数据库目录成功");}else {System.out.println("[DataBaseManager] 删除数据库目录失败");}}// 交换机操作public int insertExchange(Exchange exchange){return sqLiteMapper.insertExchange(exchange);}public int deleteExchange(String stingName){return sqLiteMapper.deleteExchange(stingName);}public List<Exchange> selectAllExchanges(){return sqLiteMapper.selectAllExchange();}// 队列操作public int insertQueue(MSGQueue queue){return sqLiteMapper.insertQueue(queue);}public int deleteQueue(String queueName){return sqLiteMapper.deleteQueue(queueName);}public List<MSGQueue> selectAllQueue(){return sqLiteMapper.selectAllQueue();}// 队列操作public int insertBinding(Binding binding){return sqLiteMapper.insertBinding(binding);}public int deleteBinding(Binding binding){return sqLiteMapper.deleteBinding(binding);}public List<Binding> selectAllBinding(){return sqLiteMapper.selectAllBinding();}}

  

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

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

相关文章

自定义elementui的主题

通常情况下&#xff0c;我们使用elementui框架的时候默认组件的主题都是白色的&#xff0c;比如&#xff1a; 但是如果想自定义主题&#xff0c;改变主题颜色&#xff0c;以及各种默认颜色&#xff0c;其实也不难&#xff1a; 配置默认主题&#xff0c;选好后点击下载 在vu…

【云计算 | Docker】Docker容器后台运行不了?entrypoint在作妖?

1. 问题 使用镜像alpine起个容器&#xff0c;使其保持后台运行&#xff0c;正常情况有如下的效果&#xff0c;可以发现容器保持运行状态。 [rootk8s-master helloWorld]# docker run -dit docker.io/alpine /bin/sh 8d39d7579d5e4f1a560aef16ba57ab5cae2506ea9105e21cbc0634…

python + seaborn绘制条形图

文章目录 条形图countplotpointplot条形图 条形图是我们熟悉的一种绘图方式,它可以实现这一目标。在 seaborn 中,barplot() 函数对一个完整的数据集进行操作,并应用一个函数来获取估计值(默认情况下取平均值)。当每个类别中有多个观测值时,它还会使用引导法计算估计值的…

墨觉Run Plus耳机真的很好嘛?南卡、韶音、墨觉哪个好

随着近年来蓝牙耳机市场的快速变化&#xff0c;耳机的样式也在不断演变&#xff0c;从入耳式发展到无需入耳的骨传导耳机。骨传导耳机因其可以通过骨传导技术进行声音传输&#xff0c;无需贴合耳道即可实现耳机功能&#xff0c;因此备受市场欢迎。尤其是近两年&#xff0c;骨传…

关于简单C++函数在内存中的存储问题

举例 int main(){... }int data(){... }int add(){... } 在分段式存储管理时&#xff0c;根据人们的需求&#xff0c;人为分段存储 如图&#xff1a;

ios_base::out和ios::out、ios_base::in和ios::in、ios_base::app和ios::app等之间有什么区别吗?

2023年8月2日&#xff0c;周三晚上 今天我看到了这样的两行代码&#xff1a; std::ofstream file("example.txt", std::ios_base::out);std::ofstream file("example.txt", std::ios::out);这让我产生了几个疑问&#xff1a; 为什么有时候用ios_base::o…

Matlab实现支持向量机算法(附上多个完整仿真源码)

支持向量机是一种常见的机器学习算法&#xff0c;它可以用于分类和回归问题。在Matlab中使用支持向量机&#xff0c;可以方便地构建和训练模型&#xff0c;并进行预测和评估。本文将介绍Matlab支持向量机的基本原理以及一个简单的分类案例。 文章目录 1. 支持向量机的基本原理2…

JAVA实现动态代理的两种方式及主要的区别

两种动态代理 JAVA中实现动态代理主要目的是为了实现AOP&#xff0c;即面向切面编程。 而动态代理主要是在程序运行期间&#xff0c;基于原类生成代理类&#xff0c;并且将需要织入的代码加入到代理类的方法中&#xff0c;可以实现动态的代码链接。 JAVA实现动态代理的两种方式…

如何通过 WordPress 数据库启用插件?【进不去后台可用】

如果您无法访问 WordPress 后台并需要激活插件以恢复访问权限&#xff0c;则可以通过 WordPress 数据库来实现。本文将向您展示如何使用数据库轻松激活 WordPress 插件。 何时使用数据库激活 WordPress 插件&#xff1f; 许多常见的 WordPress 错误会阻止网站所有者访问 WordP…

k8s目录

k8s笔记目录&#xff0c;更新中... 一 概念篇 1.1概念介绍 1.2 pod 1.3 controller 1.3.1 deployment 1.3.2 statefulset 1.3.3 daemonset 1.3.4 job和cronJob1 1.4 serivce和ingress 1.5 配置与存储 1.5.1 configMap 1.5.2 secret 1.5.3 持久化存储 1.5.4 pv、…

selenium 和 chromedriver 使用的一些总结

1 selenium 下载地址 selenium PyPIhttps://pypi.org/project/selenium/ 2 chromedriver 下载地址 &#xff0c;可以下载最新版的 chromedriver ChromeDriver - WebDriver for Chrome - Downloadshttps://chromedriver.chromium.org/downloadsChrome for Testing availabi…

管理类联考——写作——论说文——实战篇——行文篇——通用性强,解释多种现象的经典理论——谈必要

前言 本节内容涉及“社会分工理论”“资源稀缺性”“瓶颈理论”等理论。这些理论一般用在“利大于弊式结构”中“整体有必要”的部分&#xff0c;也可用于“AB二元类”题目“谈好处”的部分。 需要注意的是&#xff0c;“有好处”一般指有它更好&#xff1b;“有必要”一般指没…

Kafka介绍

目录 1&#xff0c;kafka简单介绍 2&#xff0c;kafka使用场景 3&#xff0c;kafka基本概念 kafka集群 数据冗余 分区的写入 读取分区数据 顺序消费 顺序消费典型的应用场景&#xff1a; 批量消费 提交策略 kafka如何保证高并发 零拷贝技术&#xff08;netty&#…

MySQL迁移到PostgreSQL操作指南

将MySQL数据库迁移到PostgreSQL数据库需要一些步骤和注意事项。以下是一个简单的指南&#xff0c;帮助您进行这样的迁移&#xff1a; 数据迁移&#xff1a; 首先&#xff0c;您需要将MySQL数据库中的数据迁移到PostgreSQL。有几种方法可以实现这一点&#xff1a; 使用工具&…

MIAOYUN获评“2023年度一云多芯稳定安全运行优秀案例”

2023年7月25日至26日&#xff0c;由中国信息通信研究院&#xff08;简称“中国信通院”&#xff09;、中国通信标准化协会主办的以“云领创新&#xff0c;算启新篇”为主题的“2023可信云大会”在北京成功举办。会上公布了多项前瞻领域的评估结果和2023年度最佳实践案例&#x…

IOS看书最终选择|源阅读转换|开源阅读|IOS自签

环境&#xff1a;IOS想使用 换源阅读 问题&#xff1a;换新手机&#xff0c;源阅读下架后&#xff0c;没有好的APP阅读小说 解决办法&#xff1a;自签APP 转换源仓库书源 最终预览 &#xff1a;https://rc.real9.cn/ 背景&#xff1a;自从我换了新iPhone手机&#xff0c;就无法…

zjzcyList.stream().map(Pb_zjzcy::getZjid).collect(Collectors.toList()); 解释一下

zjzcyList.stream().map(Pb_zjzcy::getZjid).collect(Collectors.toList()); 解释一下 这段代码是使用Java 8的流式处理&#xff08;Stream&#xff09;对一个存储了对象的列表&#xff08;zjzcyList&#xff09;进行操作&#xff0c;并最终返回一个包含了列表中每个对象的Zji…

svn 命令

连接服务器 ssh usernameip (不用端口)checkout 项目 svn checkout repourl --username username --password passwordrepourl: svn url删除文件(移除版本控制)1.从 SVN 移除版本控制&#xff0c;并删除文件svn delete filename2.从 SVN 移除版本控制&#xff0c;但是不删除文件…

生鲜蔬果小程序的完整教程

随着互联网的发展&#xff0c;线上商城成为了人们购物的重要渠道。其中&#xff0c;小程序商城在近年来的发展中&#xff0c;备受关注和青睐。本文将介绍如何使用乔拓云网后台搭建生鲜果蔬配送小程序&#xff0c;并快速上线。 首先&#xff0c;登录乔拓云网后台&#xff0c;进入…

vue2-常用的修饰符有哪些应用场景?

1、修饰符是什么&#xff1f; 在程序的世界里&#xff0c;修饰符是用于限定类型以及类型成员的声明的一种 符号。 在vue中&#xff0c;修饰符处理了许多DOM事件的细节&#xff0c;让我们不再需要花大量的时间去处理这些重复的事情&#xff0c;而能有更多的精力专注于程序的逻辑…