基于Springboot+Vue的电子博物馆系统

基于Springboot+Vue的电子博物馆系统

前言:随着信息技术的不断发展,传统博物馆的参观方式逐渐向数字化、在线化转型。电子博物馆作为这一转型的重要组成部分,能够通过信息化手段为用户提供更丰富、更便捷的博物馆参观体验。本文基于Spring Boot和Vue.js框架,设计并实现了一个简单的电子博物馆系统,旨在展示数字化博物馆建设的技术架构及开发过程。

目录

  • 前言
    • 项目功能及技术
      • 用户端
      • 管理端
  • API
    • SpringBoot框架搭建
    • 实体映射创建Mapper
    • 接口封装
    • 整合Swagger
    • 常用字段类型
  • 参考代码块

前言

项目功能及技术

用户端主要有首页、文创展示、浏览记录、网站公告、我的收藏、个人中心等模块。
管理端主要有用户管理、博物馆管理、文创管理、公告管理,博物馆视频管理。vue.js+layui+html+js:用户端界面。
SpringBoot框架+Java程序语言:用户端及后台管理系统API的实现。
Layui前端框架:web后台管理界面样式及数据渲染框架。
MySQL数据库:数据存储。

用户端

管理端

API

SpringBoot框架搭建

1.创建maven project,先创建一个名为SpringBootDemo的项目,选择【New Project】

在这里插入图片描述

然后在弹出的下图窗口中,选择左侧菜单的【New Project】

在这里插入图片描述
在这里插入图片描述

在project下创建module,点击右键选择【new】—【Module…】

在这里插入图片描述

左侧选择【Spring initializr】,通过idea中集成的Spring initializr工具进行spring boot项目的快速创建。窗口右侧:name可根据自己喜好设置,group和artifact和上面一样的规则,其他选项保持默认值即可,【next】

在这里插入图片描述

Developer Tools模块勾选【Spring Boot DevTools】,web模块勾选【Spring Web】,此时,一个Springboot项目已经搭建完成,可开发后续功能

在这里插入图片描述

实体映射创建Mapper

创建一个entity实体类文件夹,并在该文件夹下创建项目用到的实体类

在这里插入图片描述

package com.example.demo.entity;import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;@Data
public class User {@TableId(type = IdType.AUTO)private Long id;private String account;private String pwd;private String userDesc;private String userHead;private LocalDateTime createTime;private Long role;private String nickname;private String email;private String tags;
}

接口封装

由于我们使用mybatis-plus,所以简单的增删改查不用自己写,框架自带了,只需要实现或者继承他的Mapper、Service

在这里插入图片描述

创建控制器Controller

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

整合Swagger

添加依赖

先导入spring boot的web包

<!--swagger依赖-->
<dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9.2</version>
</dependency>
<dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>2.9.2</version>
</dependency>

配置Swagger

创建一个swagger的配置类,命名为SwaggerConfig.java

/**用于定义API主界面的信息,比如可以声明所有的API的总标题、描述、版本*/private ApiInfo apiDemo() {return new ApiInfoBuilder()//用来自定义API的标题.title("SpringBoot项目SwaggerAPIAPI标题测试")//用来描述整体的API.description("SpringBoot项目SwaggerAPI描述测试")//创建人信息.contact(new Contact("测试员张三","http://localhost:8080/springboot/swagger-ui.html","xxxxxxxx@163.com"))//用于定义服务的域名//.termsOfServiceUrl("").version("1.0") //可以用来定义版本.build();}

接口测试

运行Spring Boot项目,默认端口8080,通过地址栏访问url

在这里插入图片描述

接口组定义

根据不同的业务区分不同的接口组,使用@API来划分

@Api(tags = "用户管理") //  tags:组名称
@RestController
public class RoleController {
}

在这里插入图片描述
接口定义

使用@ApiModel来标注实体类,同时在接口中定义入参为实体类作为参数。

  • @ApiModel:用来标类

  • 常用配置项:value:实体类简称;description:实体类说明

  • @ApiModelProperty:用来描述类的字段的含义。

常用字段类型

字段类型所占字节存储范围最大存储值使用场景
TINYINT1-128~127127存储小整数
INT4-2147483648~21474836472147483647存储大整数
BIGINT8-9223372036854775808~92233720368547758079223372036854775807存储极大整数
DECIMAL可变长度存储精度要求高的数值
CHAR固定长度最多255字节255个字符存储长度固定的字符串
VARCHAR可变长度最多65535字节65535个字符存储长度不固定的字符串
DATETIME8‘1000-01-01 00:00:00’~‘9999-12-31 23:59:59’‘9999-12-31 23:59:59’存储日期和时间

参考代码块

    <script type="text/javascript">layui.use(['laydate', 'form'], function() {var laydate = layui.laydate;var form = layui.form;// 监听全选});//轻量级框架var dataInfo = new Vue({el: "#content-page",//Vue的数据对象data: {timeSort: 'next', //发布时间排序viewVolumeSort: 'next', //浏览量排序arrayList: [], //数据列表title: null,dynasty: null,typeId: null,areaList: [],appointment: {},swiperSrc: '',indexSwiper: ['https://photo.16pic.com/00/53/26/16pic_5326792_b.jpg','https://img95.699pic.com/desgin_photo/40113/1735_list.jpg','https://file3.renrendoc.com/fileroot_temp3/2022-5/20/f16ee02b-429f-46ad-806f-f453cfb33b80/f16ee02b-429f-46ad-806f-f453cfb33b801.gif',],swiperIndexl: 0,bwgArray:[],}, //数据对象结束//方法methods: {GetAll: function(desc, desc1) {var me = this;me.swiperSrc = me.indexSwiper[0];let list = me.indexSwiper;var swiperIndexl = me.swiperIndexl;me.swiperSrc = list[swiperIndexl];setInterval(function() {me.swiperSrc = list[swiperIndexl];swiperIndexl = (swiperIndexl + 1) % list.length;}, 3000);if (sessionStorage.getItem('user') == null || sessionStorage.getItem('user') == undefined ||sessionStorage.getItem('user') == '') {location.href = "login/login.html"}$.ajax({url: "http://127.0.0.1:8085/exhibition/list",async: false,type: "POST",contentType: 'application/json',dataType: 'json',data: JSON.stringify({}),success: function(json) {me.bwgArray = json.data;}});},gobwgDetail(e) {sessionStorage.setItem("exhibition", JSON.stringify(e));window.location.href = "museumDetail.html";},goAreaDetail(item) {//console.log(id)sessionStorage.setItem("area", JSON.stringify(item));window.location.href = "areaDetail.html";},}, //方法结束created: function() {var vm = this;vm.GetAll('desc', 'desc');}, //初始加载方法结束}); //vue结束function GetQueryString(name) {var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");var r = window.location.search.substr(1).match(reg);if (r != null) return unescape(r[2]);return null;}</script>
<body><div class="container-fluid" id="content-page"><div class="row top-header"><div class="col-md-1">&nbsp;</div><div class="col-md-11"><div class="rightMenu"><img src="img/logo.png" class="logo" /><div class="logoTitle">数字博物馆</div><div class="menuBox"><div class="menuTitle"><a href="index.html" style="text-decoration: none;">首页</a></div><div class="menuTitle"><a href="surroundings.html" style="text-decoration: none;">文创展示</a></div><div class="menuTitle"><a href="news.html" style="text-decoration: none;">网站公告</a></div><div class="menuTitle"><a href="history.html" style="text-decoration: none;">浏览记录</a></div><div class="menuTitle"><a href="center.html" style="text-decoration: none;">个人中心</a></div><div class="menuTitle"><a href="./login/login.html" style="text-decoration: none;">退出登录</a></div></div></div></div></div><div class="row"><div class="col-md-1">&nbsp;</div><div class="col-md-10 paramBox"><div class="displayBox"><div class="sortBox" >当前位置:网站公告<img src="img/news.png" class="sortImg" /></div></div></div><div class="col-md-1">&nbsp;</div></div><div class="row"><div class="col-md-1">&nbsp;</div><div class="col-md-10"><div class="iconTitle"><div class="iconParent"><div class="listIcon">网站公告</div></div><div class="topTitle"></div><div class="newTitle" v-for="item in arrayList" @click="goDetail(item)">· {{item.title}}</div></div></div><div class="col-md-1">&nbsp;</div></div><div class="row"><div style="height:100px;"></div></div></div><script src="js/jquery.min.js"></script><script src="js/vue.js"></script><script src="js/utils.js"></script><script type="text/javascript">//轻量级框架var dataInfo = new Vue({el: "#content-page",//Vue的数据对象data: {timeSort: 'on', //发布时间排序viewVolumeSort: 'on', //浏览量排序arrayList: [], //数据列表}, //数据对象结束//方法methods: {GetAll: function() {var me = this;$.ajax({url: "http://127.0.0.1:8085/announcement/selectPageByUser",async: false,type: "POST",contentType: 'application/json',dataType: 'json',data: JSON.stringify({}),success: function(json) {me.arrayList = json.list;}});},goDetail(e){console.log(e);sessionStorage.setItem("ann",JSON.stringify(e));window.location.href="newsDetail.html";},}, //方法结束created: function() {var vm = this;vm.GetAll();}, //初始加载方法结束}); //vue结束function GetQueryString(name) {var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");var r = window.location.search.substr(1).match(reg);if (r != null) return unescape(r[2]);return null;}</script>
<div class="container-fluid" id="content-page"><div class="row top-header"><div class="col-md-1">&nbsp;</div><div class="col-md-11"><div class="rightMenu"><img src="img/logo.png" class="logo" /><div class="logoTitle">数字博物馆</div><div class="menuBox"><div class="menuTitle"><a href="index.html" style="text-decoration: none;">首页</a></div><div class="menuTitle"><a href="surroundings.html" style="text-decoration: none;">文创展示</a></div><div class="menuTitle"><a href="news.html" style="text-decoration: none;">网站公告</a></div><div class="menuTitle"><a href="history.html" style="text-decoration: none;">浏览记录</a></div><div class="menuTitle"><a href="center.html" style="text-decoration: none;">个人中心</a></div><div class="menuTitle"><a href="./login/login.html" style="text-decoration: none;">退出登录</a></div></div></div></div></div><div class="row"><div class="col-md-3"><div class="prevBox"><img src="img/prev.png" class="swiperChangeImg" v-on:click="prevImg" /></div></div><div class="col-md-6 "><div class="swiperBox"><img :src="showSrc" class="swiperItemImg" /></div></div><div class="col-md-3"><div class="nextBox"><img src="img/next.png" class="swiperChangeImg" v-on:click="nextImg"/></div></div></div><div class="row"><div class="col-md-2">&nbsp;</div><div class="col-md-8"><div class="borerBox"></div></div><div class="col-md-2">&nbsp;</div></div><div class="row"><div class="col-md-2">&nbsp;</div><div class="col-md-8"><div class="wwDetailBox"><div class="wwDetailLeft"><div class="wwDetailTitle">名称与朝代</div><div class="wwDetailText">{{info.title}},{{info.dynasty}}</div><div class="wwDetailTitle">出土时间和地点</div><div class="wwDetailText">{{info.address}}</div><div class="wwDetailTitle">材质</div><div class="wwDetailText">{{info.materialQuality}}</div></div><div class="wwDetailRight"><div class="wwDetailTitle">历史文化背景</div><div class="wwDetailText">{{info.history}}</div></div></div></div><div class="col-md-2">&nbsp;</div></div><div class="row"><div class="col-md-2">&nbsp;</div><div class="col-md-8"><div style="margin: 20px 0 80px 0;"><video width="100%" height="400" controls><source :src="'http://127.0.0.1:8085/'+info.videoSrc" type="video/mp4"/></video></div></div><div class="col-md-2">&nbsp;</div></div><!-- <div class="row"><div class="col-md-3">&nbsp;</div><div class="col-md-6"><div class="wcTypeBox"><div><div class="wcTypeItem">生活用品</div></div></div></div><div class="col-md-3">&nbsp;</div></div> --><div class="footer"><div class="row"><div class="col-md-4">&nbsp;</div><div class="col-md-4 "><div class="footerLine1"><a href="javascript:void(0);" class="lineA">相关链接</a><a href="javascript:void(0);" class="lineA">影像授权</a><a href="javascript:void(0);" class="lineA">隐私政策</a><a href="javascript:void(0);" class="lineA">版权说明</a><a href="javascript:void(0);" class="lineA">联系我们</a><a href="javascript:void(0);" class="lineA">关于我们</a></div><div class="footerLine2"><span class="lineB">京公网安备 11010102004165151号</span><span class="lineB">京ICP备05067311号-1</span><span class="lineB">© 2023-至今</span></div></div><div class="col-md-4">&nbsp;</div></div></div></div><script src="js/jquery.min.js"></script><script src="js/vue.js"></script><script src="js/utils.js"></script><script type="text/javascript">//轻量级框架var dataInfo = new Vue({el: "#content-page",//Vue的数据对象data: {info:{id:1,//名称与朝代name:'越王勾践剑',//出土时间和地点address:'出土时间是1965年12月,,出土于湖北省荆州市江陵县望山楚墓群1号墓',//材质materialQuality:'越王勾践剑的材质主要是青铜和锡的合金。这种合金使得剑身既坚硬又富有韧性,能够保持长久的锋利。同时,剑身上还镀有一层含铬的金属,这使得越王勾践剑在历经千年之后仍然能够保持光泽,不生锈蚀。',//历史文化背景history:'越王勾践剑在历史上的地位十分重要,它不仅是越国强大军事实力的象征,也体现了当时越国工匠的精湛技艺。这把剑见证了越王勾践卧薪尝胆、励精图治的历史故事,也反映了春秋战国时期诸侯争霸、文化交融的时代背景。关于越王勾践,最为人熟知的便是他卧薪尝胆的故事。在吴国战败后,勾践被俘为奴,但他并未放弃复国的信念。他卧薪尝胆,时刻提醒自己不忘国仇家恨,最终成功复仇并重建越国。越王勾践剑作为他的佩剑,见证了这一伟大历程,具有极高的历史价值。',//视频videoSrc:'http://vjs.zencdn.net/v/oceans.mp4',//朝代dynasty:'春秋晚期',//分类typeName:'青铜器',//封面图images:'https://www.chinakongzi.org/zhwh/tpjj/201708/W020170809353217008926.jpg',//轮播图bannerList: ['https://img.zcool.cn/community/015b76608697f511013e3b7dd2fd0d.jpg@1280w_1l_2o_100sh.jpg','https://img.zcool.cn/community/01f475608697f511013f47209e7be5.jpg@1280w_1l_2o_100sh.jpg','https://img.zcool.cn/community/015b3e608697f611013e3b7d0ca587.jpg@1280w_1l_2o_100sh.jpg','https://img.zcool.cn/community/01139e608697f511013f4720a66170.jpg@1280w_1l_2o_100sh.jpg','https://img.zcool.cn/community/0124cf608697f511013e3b7da76892.jpg@1280w_1l_2o_100sh.jpg'],},showSrc: '',currentIndex:0,}, //数据对象结束//方法methods: {GetAll: function() {var vm = this;var id=GetQueryString('id');$.ajax({url: "http://127.0.0.1:8085/question/selectById?id="+id,async: false,type: "POST",contentType: 'application/json',dataType: 'json',success: function(json) {vm.info=json.data;let list = vm.info.banners;var currentIndex = vm.currentIndex;vm.showSrc =  "http://127.0.0.1:8085/"+list[currentIndex];setInterval(function() {vm.showSrc = "http://127.0.0.1:8085/"+list[currentIndex];currentIndex = (currentIndex + 1) % list.length;}, 3000);}});},//点击上一页prevImg(){var vm = this;let list = vm.info.banners;var currentIndex = vm.currentIndex;currentIndex = currentIndex-1;if(currentIndex<0){currentIndex = list.length-1;}vm.showSrc = "http://127.0.0.1:8085/"+list[currentIndex];vm.currentIndex =currentIndex;},//点击下一页nextImg(){var vm = this;let list = vm.info.banners;var currentIndex = vm.currentIndex;currentIndex = currentIndex+1;if(currentIndex==list.length){currentIndex = 0;}vm.showSrc = "http://127.0.0.1:8085/"+list[currentIndex];vm.currentIndex =currentIndex;},infoDetail(e) {window.location.href = "museumDetails.html";},}, //方法结束created: function() {var vm = this;vm.GetAll();}, //初始加载方法结束}); //vue结束function GetQueryString(name) {var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");var r = window.location.search.substr(1).match(reg);if (r != null) return unescape(r[2]);return null;}</script>

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

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

相关文章

【软考速通笔记】系统架构设计师⑭——面向服务架构设计理论与实践

文章目录 一、前言二、基础知识2.1 介绍2.2 作用 三、参考架构四、主要协议五、设计原则六、设计模式6.1 服务注册模式6.2 企业服务总线模式6.3 微服务模式6.4 微服务架构模式方案 七、注意事项 一、前言 笔记目录大纲请查阅&#xff1a;【软考速通笔记】系统架构设计师——导读…

K8S的资源配置

资源配额 当多个用户或团队共享具有固定节点数目的集群时&#xff0c;人们会担心有人使用超过其基于公平原则所分配到的资源量。资源配额是帮助管理员解决这一问题的工具。资源配额&#xff0c;通过 ResourceQuota 对象来定义&#xff0c;对每个命名空间的资源消耗总量提供限制…

Python+OpenCV系列:入门环境搭建、图像读写、像素操作、色彩空间和通道、

入门环境搭建、图像读写、像素操作、色彩空间和通道 **Python与OpenCV环境搭建、图像处理与色彩空间介绍****引言****1. Python和OpenCV的环境搭建****1.1 安装Python和OpenCV****1.2 配置开发环境** **2. 图像的读取、显示与保存****2.1 图像的读取****2.2 图像的显示****2.3 …

在Docker中部署禅道,亲测可用

1、确保centos中已安装docker docker -v 2、启动docker systemctl start docker 3、可设置docker开机启动 systemctl enable docker.service 4、获取最新版禅道开源版镜像 docker pull idoop/zentao 5、运行镜像生成禅道容器【创建 /data/www /data/data 目录】 doc…

vitepress组件库文档项目 markdown语法大全(修正版)

#上次总结的 有些语法是用在markdown文档中的 使用到vitepress项目中有些语法可能有出入 于是我再总结一版 vitepress项目中的markdown语法大全 在阅读本章节之前&#xff0c;请确保你已经对 Markdown 有所了解。如果你还不了解 Markdown &#xff0c;请先学习一些Markdown 教…

String IP和Int IP的互相转换

android中&#xff0c;wifiManager.connectionInfo.ipAddress 可以获取到wifi的ip地址&#xff0c;但这是一个int值&#xff0c;如何转换为常见的如192.168.1.129这种形式&#xff0c;以及这种形式如何转换回int值的形式。 这里ip分为4段&#xff0c;每一段的值都是0 ~ 255&am…

Blender导入下载好的fbx模型像的骨骼像针戳/像刺猬

为什么我下载下来的骨骼模型和我自己绑定的模型骨骼朝向完全不一样 左边是下载的模型 右边是我自己绑定的模型 左边的模型刚刚感觉都是像针一样往外戳的&#xff0c;像刺猬一样那种。 解决方法勾选自动骨骼坐标系

python 清华pip镜像源报HTTP error 403

报错信息 ERROR: HTTP error 403 while getting https://mirrors.tuna.tsinghua.edu.cn/pypi/web/packages/52/79/a64937a2185b91a96cc5406e3ea58120980c725543d047e112fb3084a972/fake_useragent-2.0.0-py3-none-any.whl (from https://mirrors.tuna.tsinghua.edu.cn/pypi/we…

ASP.NET CORE API 解决跨域问题

环境 vs2022 .net 8 创建ASP.net Core API项目 配置跨域 编写ApiController 启动项目 得到服务器运行的 地址 在Hbuiler中创建web项目&#xff0c;编写代码 【运行】-【运行到浏览器】-选择一个浏览器,查看结果 正常显示 问题 如果允许所有源访问&#xff0c;有安全风险方…

Android 第三方框架:RxJava:源码分析:观察者模式

文章目录 观察者模式RxJava中的观察者模式总结 ​​​​​​​​​​​​​​观察者模式​​​​​​​ RxJava中的观察者模式 以Observable、ObservableOnSubscribe、Observer为例 Observable是被观察者 负责发射事件或数据 Observer是观察器 负责对从被观察者中获取的数…

【AI系统】MobileFormer

MobileFormer 在本文中&#xff0c;将介绍一种新的网络-MobileFormer&#xff0c;它实现了 Transformer 全局特征与 CNN 局部特征的融合&#xff0c;在较低的成本内&#xff0c;创造一个高效的网络。通过本节&#xff0c;让大家去了解如何将 CNN 与 Transformer 更好的结合起来…

如何实现表格选中时禁用树结构的复选框功能(El-Tree 与 El-Table 联动实现)

在前端开发中&#xff0c;树形结构和表格是常用的组件组合&#xff0c;尤其是在展示和管理复杂数据时。使用 Element UI 的 el-tree 和 el-table 组件&#xff0c;我们可以实现当表格中有选中行时&#xff0c;自动禁用树结构中的复选框&#xff0c;反之亦然。这不仅提升了用户体…

决策树:ID3、C4.5和CART特征选择方式

1 前言 该文章主要目的是记录ID3、C4.5和CART特征选择方式&#xff0c;这里只对决策树进行简单介绍。 决策树&#xff08;Decision Tree&#xff09;算法是一种有监督学习算法&#xff0c;它利用分类的思想&#xff0c;根据数据的特征构建数学模型&#xff0c;从而达到数据的筛…

【3D AIGC】Img-to-3D、Text-to-3D、稀疏重建(2024年文章汇总)

文章目录 1. Wonderworld&#xff1a;拓展图片边界&#xff0c;生成3D场景2. 3DTopia-XL&#xff1a;扩散模型辅助生成3. 3DGS-Enhancer: 通过视图一致2D Diffusion&#xff0c;提升无界3D Gaussian Splatting (NlPs2024 Spotlight)4. L3DG&#xff1a;Latent 3D Gaussian Diff…

三款电容麦的对比

纸面参数 第一款麦克风 灵敏度: -36 dB 2 dB&#xff08;0 dB1V/Pa at 1 kHz&#xff09; 灵敏度较低&#xff0c;需要更高的增益来拾取同样的音量。频率响应: 40 Hz - 18 kHz 响应范围较窄&#xff0c;尤其在高频区域。等效噪音级: ≤18 dB&#xff08;A计权&#xff09; 噪…

运行 GreatSQL 时为什么要求关闭透明大页

在大部分运维规范中&#xff0c;一般都会要求在运行 GreatSQL/MySQL 的环境中要关闭透明大页&#xff0c;那么到底什么是透明大页&#xff0c;为什么要关闭&#xff0c;打开有什么风险吗&#xff1f; 在此之前&#xff0c;我也是有点懵的&#xff0c;本文试着回答这个疑问&…

JUnit介绍:单元测试

1、什么是单元测试 单元测试是针对最小的功能单元编写测试代码&#xff08;Java 程序最小的功能单元是方法&#xff09;单元测试就是针对单个Java方法的测试。 2、为什么要使用单元测试 确保单个方法运行正常&#xff1b; 如果修改了代码&#xff0c;只需要确保其对应的单元…

Elasticsearch:使用硬件加速的 SIMD 指令实现超快 BBQ

作者&#xff1a;来自 Elastic Chris Hegarty 我们如何使用硬件加速 SIMD&#xff08;Single Instruction Multiple Data - 单指令多数据&#xff09;指令优化 BBQ 中的向量比较。 随着我们继续致力于让 Elasticsearch 和 Apache Lucene 成为存储和搜索向量数据的最佳场所&…

青龙面板添加任务执行自己的脚本文件(非订阅) 保姆级图文

目录 效果预览脚本存放的位置创建任务cron规则字段含义&#xff1a;常见的特殊字符&#xff1a; 可能你的脚本需要安装依赖总结 欢迎关注 『青龙面板』 专栏&#xff0c;持续更新中 欢迎关注 『青龙面板』 专栏&#xff0c;持续更新中 效果预览 你的python脚本 print(123)运行…

flink的安装配置(详细版本)

Standalone集群模式安装部署 conda deactivate 退出 base环境 Flink支持多种安装模式。 local&#xff08;本地&#xff09;——本地模式 standalone——独立模式&#xff0c;Flink自带集群&#xff0c;开发测试环境使用 standaloneHA—独立集群高可用模式&#xff0c;Fli…