1. 使用springboot做一个音乐播放器软件项目【前期规划】
背景:
现在大部分音乐软件都是要冲会员才可以无限常听的。对于喜欢听音乐的小伙伴,资金又比较紧张,是那么的不友好。作为程序员的我,也是喜欢听着歌,敲着代码。
最近就想做一个音乐播放器的软件,在内网中使用。
注意:
本项目只实现播放音乐和后台管理系统。
不分享任何音乐歌曲资源。
本系统使用的技术和实现逻辑不是特别的难。
特别适合刚学编程的小伙伴学习参考。
如果有小伙伴有兴趣可以订阅此专栏,后续会持续更新直到音乐播放器这个软件完成。
我会尽可能详细的以文字的形式分享出来 从0到1 写出来一个音乐播放器项目。
使用到的重点技术:
后端框架: Spring Boot 2.7.18
数据库依赖:mybatis-plus 3.5.7
文件上传依赖:x-file-storage
数据库迁移依赖:flyway-core
前端:vue + Electron(可以打包成exe客户端)
数据库:mysql8.0
因核心分享 的是java编程。后续文章中 基本分享的都是java语言的代码。
对于前端的代码,在文章中就不分享了。只会分享一下页面效果。
当然项目完结后,我会把前后端项目源码打包好放到最后一篇文章中。
实现需求:
管理后台:
账号管理、专辑管理、歌手管理、歌曲管理
客户端:
首页、歌曲搜索、专辑列表、歌手列表、音乐播放、我喜欢的、个人中心、基础设置
大概核心功能会实现以上功能
后端框架搭建:
1. java环境安装 可参考下面2篇博客
java环境:
https://blog.csdn.net/Drug_/article/details/120211153
maven安装:
https://blog.csdn.net/Drug_/article/details/120693846
2. 编辑器的安装和配置(IDEA编辑器) 参考下面两篇博客
https://blog.csdn.net/Drug_/article/details/119558729
https://blog.csdn.net/Drug_/article/details/119529864
3. mysql8 数据库的安装
我这里是直接安装的windows 的集成工具:phpStudy
对于 phpStudy 这个工具 写PHP的程序员肯定不陌生。
为什么要安装这个呢,因为他在windows 下 编程开发需要一些软件 他很方便。
你把这个软件安装后 他里面可以安装 mysql redis 等 我们开发需要的软件,这样你就不需要一一 再去各大官网上下载安装了 所以我在做java 开发的时候 也会使用别的语言的软件。方便我们的开发
4. mysql 管理工具 安装:Navicat
对于这个工具,我就不多解释了,玩过数据库的小伙伴,应该基本上都用过这个软件。自行百度即可。
5. spring boot 框架搭建 打开IDEA编辑器开始创建项目
第一步:
第二步: 这些 大家自主填写即可。 java版本选 java8
创建即可。
先实现 让我们 springboot 正常启动
第一步:
我们来把我们所需要的依赖导入到我们项目里即可。
也就是 修改 我们项目下的 pom.xml文件
内容如下:我已经给大家整理好了。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.jsonl</groupId><artifactId>music-java</artifactId><version>0.0.1-SNAPSHOT</version><name>json-base</name><description>json-base</description><properties><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><spring-boot.version>2.7.18</spring-boot.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency>
<!-- mybatis + 代码生成器--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.7</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.5.7</version></dependency><dependency><groupId>org.apache.velocity</groupId><artifactId>velocity-engine-core</artifactId><version>2.3</version></dependency>
<!-- druid mysql连接驱动更换--><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.23</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><!-- redis依赖commons-pool 这个依赖一定要添加 --><dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId><version>2.11.1</version></dependency><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.13</version></dependency><dependency><groupId>com.auth0</groupId><artifactId>java-jwt</artifactId><version>3.8.1</version></dependency>
<!-- 优雅的使用api--><dependency><groupId>com.dtflys.forest</groupId><artifactId>forest-spring-boot-starter</artifactId><version>1.5.36</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>2.0.49</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency><!-- Flyway 数据库迁移 依赖 他会根据spring boot版本 默认下载兼容依赖 不需要写版本号 --><dependency><groupId>org.flywaydb</groupId><artifactId>flyway-core</artifactId></dependency><dependency><groupId>org.flywaydb</groupId><artifactId>flyway-mysql</artifactId></dependency><dependency><groupId>org.dromara.x-file-storage</groupId><artifactId>x-file-storage-spring</artifactId><version>2.2.1</version></dependency><dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.16.1</version></dependency><dependency><groupId>com.qcloud</groupId><artifactId>cos_api</artifactId><version>5.6.137</version></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>1.8</source><target>1.8</target><encoding>UTF-8</encoding></configuration></plugin></plugins></build></project>
第二步: 增加配置文件信息
这里我没有用 yml 文件 用的是 properties 这种类型的配置文件
内容如下:
server.port=18023
spring.application.name=link-music
spring.profiles.active=dev
#请求限制
spring.servlet.multipart.max-file-size=100MB
spring.servlet.multipart.max-request-size=500MB
#===========================数据库==========================================
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/link_music?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=root
# 以下 Druid的配置 虽然编辑器没提示 但是经过测试 是生效的
# Druid 数据源初始化时创建的连接数
spring.datasource.druid.initial-size=10
#数据源允许的最大活跃连接数
spring.datasource.druid.max-active=100
#数据源维护的最小空闲连接数
spring.datasource.druid.min-idle=3
#当没有可用连接时,获取连接的最大等待时间
spring.datasource.druid.max-wait=5000
#是否在连接池中缓存预编译的语句
spring.datasource.druid.pool-prepared-statements=true
#每个连接可以缓存的最大预编译语句数
spring.datasource.druid.max-pool-prepared-statement-per-connection-size=100
# 配置 AOP 监控的目标模式
#spring.datasource.druid.aop-patterns=com.jsonl.*
#不用这个
#mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.slf4j.Slf4jImpl
#============================redis=========================================
#spring.redis.host=127.0.0.1
#spring.redis.port=6379
#spring.redis.database=32
#spring.redis.password=123456
# Redis Lettuce 客户端配置
#spring.redis.lettuce.pool.max-active=500
#spring.redis.lettuce.pool.max-wait=10
#spring.redis.lettuce.pool.max-idle=8
#spring.redis.lettuce.pool.min-idle=2
#============================flyway=========================================
#是否启用flyway
spring.flyway.enabled=true
# 禁止清理数据库表
# clean 操作是 Flyway 的一个功能,可以清空数据库中的所有对象(比如表、视图、存储过程等),
#以便进行全新的数据库迁移。在开发和测试阶段,这可能是有用的,因为它可以确保每次都从一个干净的数据库状态开始运行。
#但在生产环境中,执行 clean 操作可能会导致数据丢失,因此通常需要禁用它
spring.flyway.clean-disabled=true
# 如果数据库不是空表,需要设置成 true,当迁移数据库存在但没有元数据的表时,自动执行基准迁移
#当数据库中不存在迁移历史记录表时,Flyway 会自动创建该表,并将当前已经存在的数据库对象标记为已迁移状态。
#当数据库中存在迁移历史记录表,但版本号低于最新的迁移脚本版本时,
#Flyway 也会自动创建一个基线版本,从而将现有的数据库对象标记为已迁移状态,并开始应用最新的迁移脚本。
#这样做的目的是确保在已有数据库上使用 Flyway 进行迁移时,无论数据库是否已经有迁移历史记录,
#都能够正确地进行迁移操作。这在初始化应用程序时特别有用,因为它允许你在部署应用程序到新环境时,
# 自动初始化数据库并应用最新的迁移脚本。
spring.flyway.baseline-on-migrate=true
spring.flyway.encoding=UTF-8
# 迁移sql脚本文件存放路径,默认db/migration
# 如果配置完这个路径,也手动创建了这个目录 启动服务 一直报错 这个目录找不到
# 可在目录里创建一个 .keep的空文本文件,以确保该目录在应用程序启动期间被编译并可用,以避免错误。
spring.flyway.locations=classpath:db/migration
# 迁移sql脚本文件名称的前缀,默认V 前缀标识,默认值 V 表示 Versioned, R 表示 Repeatable, U 表示 Undo
# Flyway 将 SQL 文件分为 Versioned 、Repeatable 和 Undo 三种:
# Versioned 用于版本升级, 每个版本有唯一的版本号并只能执行一次.
# Repeatable 可重复执行, 当 Flyway检测到 Repeatable 类型的 SQL 脚本的 checksum 有变动,
# Flyway 就会重新应用该脚本. 它并不用于版本更新, 这类的 migration 总是在 Versioned 执行之后才被执行。
# Undo 用于撤销具有相同版本的版本化迁移带来的影响。但是该回滚过于粗暴,过于机械化,一般不推荐使用。
# 一般建议使用 Versioned 模式来解决
spring.flyway.sql-migration-prefix=V
# 迁移sql脚本文件名称的分隔符,默认2个下划线__
spring.flyway.sql-migration-separator=__
# 迁移sql脚本文件名称的后缀
spring.flyway.sql-migration-suffixes=.sql
# 迁移时是否进行校验,默认true
spring.flyway.validate-on-migrate=true
# 可把这个参数设置 为true 是否可以无序执行 他默认是false 严格按照 顺序执行
spring.flyway.out-of-order=true
#开始执行基准迁移时对现有的schema的版本打标签,默认值为1
#spring.flyway.baseline-version=1
#===========================优雅的使用api依赖配置==========================================
# 连接池最大连接数
forest.max-connections=200
# 连接超时时间,单位为毫秒
forest.connect-timeout=5000
# 数据读取超时时间,单位为毫秒
forest.read-timeout=5000
# api依赖里的 关闭所有日志
forest.log-enabled=false
forest.log-request=false
forest.log-response-status=false
forest.log-response-content=false
第三步:创建一个启动类文件 我们启动项目 看看是否能正常启动。如果可以正常启动,那我们前期的准备工作就算完成。
好了。今天就分享到这里,后续开发会支持更新。。。
相关文章:

1. 使用springboot做一个音乐播放器软件项目【前期规划】
背景: 现在大部分音乐软件都是要冲会员才可以无限常听的。对于喜欢听音乐的小伙伴,资金又比较紧张,是那么的不友好。作为程序员的我,也是喜欢听着歌,敲着代码。 最近就想做一个音乐播放器的软件,在内网中使…...

【Dify】Dify自定义模型设置 | 对接DMXAPI使用打折 Openai GPT 或 Claude3.5系列模型方法详解
一、Dify & DMXAPI 1、Dify DIFY(Do It For You)是一种自动化工具或服务,旨在帮助用户简化操作,减少繁琐的手动操作,提升工作效率。通过DIFY,用户能够快速完成任务、获取所需数据,并且可以…...

【Rust自学】10.8. 生命周期 Pt.4:方法定义中的生命周期标注与静态生命周期
喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 10.8.1. 方法定义中的生命周期标注 还记得在上一篇文章 10.7. 生命周期 Pt.3 中所提到的省略生命周期的三条规则吗: 规则1&…...
121 买入股票的最佳时机
思路1: 买的那天一定是卖的那天之前的最小值。 每到一天,维护那天之前的最小值即可。 假设第一天是最小值,最大值初始化为0,当以后某天的价格小于最小值时,将最小值更新 当天价格大于最小值,说明有利可图…...

PID学习资料
TI公司的CONTROLSUITE https://www.ti.com.cn/tool/cn/CONTROLSUITE学点PID专栏-小麦大叔PID控制器算法系列TI公开培训(中文字幕) 电机控制,PI控制器,PID控制器和现场定向控制 书籍: Advanced PID Control先进PID控制及其MATLAB仿真Practic…...

采用标准化的方式开展设计-研发中运用设计模式
概述 实现规范化、标准化的引导式设计,以业务需求为输入,识别业务特点,并通过引导式设计,找到最适合的设计模式、具体方案,汇总成为应用的设计,拉齐各应用的设计一的致性。 采用标准化的方式开展设计…...

【Linux系列】并发与顺序执行:在 Linux 脚本中的应用与选择
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
Scala语言的数据库交互
Scala语言的数据库交互 引言 在当今互联网应用的开发中,数据库几乎是每一个应用程序中不可或缺的一部分。选择合适的编程语言和工具与数据库进行交互,对于提升开发效率和应用性能至关重要。Scala作为一种现代的多范式编程语言,结合了面向对…...

字节青训十五题-Java-数字字符串格式化
问题 问题描述 小M在工作时遇到了一个问题,他需要将用户输入的不带千分位逗号的数字字符串转换为带千分位逗号的格式,并且保留小数部分。小M还发现,有时候输入的数字字符串前面会有无用的 0,这些也需要精简掉。请你帮助小M编写程…...

搭建一个本地轻量级且好用的学习TypeScript语言的环境
需求说明 虽然 TypeScript 的在线 Playground 很方便 https://www.tslang.com.cn/play/,但毕竟是在浏览器中使用,没有本地的 IDE 那么顺手。所以我想搭建一个本地类似 Playground 的环境,这样在学习 TypeScript 的过程中,可以更方…...

apex安装
安装过程复杂曲折,网上说的很多办法,貌似成功了,实际还是没起作用。 先说成功过程,执行下面命令,安装成功(当然,前提是你要先配置好编译环境): (我的环境&a…...

会员制电商创新:开源 AI 智能名片与 2+1 链动模式的协同赋能
摘要:本文聚焦于电商领域会员制的关键作用,深入探讨在传统交易模式向数字化转型过程中,如何借助开源 AI 智能名片以及 21 链动模式商城小程序,实现对会员数据的精准挖掘与高效利用,进而提升企业的营销效能与客户洞察能…...
Vue 3 和 Electron 来构建一个桌面端应用
我们将使用 Vue 3 和 Electron 来构建一个桌面端应用,该应用可以通过 Websocket 与服务器进行通信,并实现心跳检测、客户端上线、获取资产信息以及修改资产状态的功能。以下是实现步骤的概述: 项目结构:创建一个 Vue 3 项目&…...

生物医学信号处理--绪论
前言 参考书籍:刘海龙,生物医学信号处理,化学工业出版社 生物医学信号分类 1、由生理过程自发或者诱发产生的电生理信号和非电生理信号 • 电生理信号:ECG/心电、EEG/脑电、EMG/肌电、 EGG/胃电、 EOG/眼电 • 非电生理信号&am…...

STM32之CAN通讯(十一)
STM32F407 系列文章 - CAN通讯(十一) 目录 前言 一、CAN 二、CAN驱动电路 三、CAN软件设计 1.CAN状态初始化 2.头文件相关定义 3.接收中断服务函数 4.用户层使用 1.用户层相关定义 2.发送数据 3.接收数据 1.查询方式处理 2.中断方式处理 3…...

在macOS上安装MySQL
macOS的MySQL有多种不同的形式: 1、本机包安装程序,它使用本机macOS安装程序(DMG)引导您完成MySQL的安装。有关详细信息,请参阅第2.4.2节,“使用本机包在macOS上安装MySQL”。您可以将包安装程序与macOS一…...
netty解码器LengthFieldBasedFrameDecoder用法详解
Netty Netty是一个高性能、异步事件驱动的网络应用程序框架,它提供了对并发和异步编程的抽象,使得开发网络应用程序变得更加简单和高效。 在Netty中,EventLoopGroup是处理I/O操作的多线程事件循环器。在上面的示例中,我们创建了两个EventLoopGroup实例:bossGroup和worker…...
在循环链表中用头指针和用尾指针的好处
循环链表是一种特殊的链表结构,其中最后一个节点的指针指向链表的头部,形成一个环。这种结构在某些情况下可以提供便利,特别是在需要循环访问元素或者实现循环队列时。使用头指针和尾指针来操作循环链表各有其优势: 使用头指针的…...

java项目之网上租贸系统源码(springboot+mysql+vue)
风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的网上租贸系统。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 基于Spring Boot的网上租贸…...
我用AI学Android Jetpack Compose之入门篇(3)
前一篇解释了代码,这一篇来解释脚本,gradle, compose脚本也推荐kotlin的,让Ai解释一下吧,以下答案来自 通义千问 1.解释一下下述脚本 这段代码是一个Gradle构建脚本的顶层配置文件,通常位于项目的根目录下…...

Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题
分区配置 (ptab.json) img 属性介绍: img 属性指定分区存放的 image 名称,指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件,则以 proj_name:binary_name 格式指定文件名, proj_name 为工程 名&…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)
考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...
JS手写代码篇----使用Promise封装AJAX请求
15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...
多模态图像修复系统:基于深度学习的图片修复实现
多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...

逻辑回归暴力训练预测金融欺诈
简述 「使用逻辑回归暴力预测金融欺诈,并不断增加特征维度持续测试」的做法,体现了一种逐步建模与迭代验证的实验思路,在金融欺诈检测中非常有价值,本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...
比较数据迁移后MySQL数据库和OceanBase数据仓库中的表
设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...