文章目录
SpringBoot项目-基础
Springboot
概念
开发目的:简化spring
redis
zookeeper
xxl-job
mysql
maven
druid
mybatis
clickhouse
servlet
mybatis-plus
RebbitMQ
SpringBoot+Vue后台管理系统
学习视频:
https://www.bilibili.com/video/BV1U44y1W77D/?spm_id_from=333.337.search-card.all.click&vd_source=c901ae3ff497a02016ba7bada52b2e3b
该项目所需基础内容:
IDEA、jdk、mysql5.7、navicat12、Navicat15、node-v1.14.16.0-x64、Postman-win64-8.8.0-Setup、Redis-行4-3.0.504.
所需软件下载、安装、版本查询
IDEA 版本2021.1.3
打开软件help-关于
jdk 版本1.8
查看jdk的版本号;
cmd中输入:java -version
navicat 版本16
是一套广泛使用的数据库管理工具,它为用户提供了一个直观的图形用户界面(GUI),使得数据库管理和开发工作变得更加简单和高效。
下载安装参考链接 版本16:https://blog.csdn.net/taiyang3285/article/details/130115829?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170908947016800180691601%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=170908947016800180691601&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-130115829-null-null.nonecase&utm_term=navicat&spm=1018.2226.3001.4450
下载安装参考链接 版本12:https://blog.csdn.net/bruceoxl/article/details/89456708
参考navicat 16 已完成安装和激活。
node 版本是v16.20.1
npm 版本号是8.19.4
是一个开源、跨平台的JavaScript运行环境,它允许开发者使用JavaScript语言编写服务器端代码。
进入该node项目所在文件夹,通过cmd进入命令行,执行node -v命令查看版本号;
npm
是JavaScript编程环境中的核心工具之一,尤其对于使用Node.js作为后端或构建工具链的项目来说至关重要。
主要负责安装和管理依赖、管理项目依赖关系、共享和发布代码等。
安装node就会自带npm,执行npm -v命令查看版本号;
又下载webpack,出现不是内部命令的情况,通过node设置全局变量可以解决。
Postman
是API开发与测试工具,它提供了一个直观的图形用户界面,使开发者和测试人员能够方便地发送HTTP/HTTPS请求,并检查服务器响应。
用户可以模拟各种HTTP方法(如GET、POST、PUT、DELETE等),设置请求头、URL参数、请求体内容等,以便于调试Web服务接口、验证API的行为以及进行RESTful API的集成测试。
参考博客:https://blog.csdn.net/weixin_44257023/article/details/115307490
已按照该博客方法成功安装。
vue 版本2.9.6
是一个开源的渐进式JavaScript框架,用于构建用户界面;
Vue以其响应式的数据绑定、组件化和简单易用的API而闻名于前端开发社区。
安装参考博客:https://blog.csdn.net/dream_summer/article/details/108867317
问题1参考博客:https://blog.csdn.net/qq_31594665/article/details/135750276
JS
JavaScript(简称JS)是一种广泛应用于网页和网络应用开发的高级、解释型、动态类型的编程语言。
最初目的是为了给网页增加动态功能和交互操作;
element组件
指的是 Element UI,这是一个基于 Vue.js 框架设计和实现的开源 UI 组件库,主要用于构建美观、易用的桌面端 Web 应用程序。Element UI 提供了一整套丰富且易于使用的 UI 组件,涵盖了常见的诸如按钮、输入框、表格、菜单、通知、对话框等各种界面元素,同时也包含了布局、导航、数据展示等各种复杂组件,极大地简化了开发者创建企业级应用的工作量。
安装参考博客:https://element.eleme.cn/#/zh-CN/component/installation
Vue
官网:https://cn.vuejs.org/
Vue 2 已经终止支持且不再维护。 如有需要请升级到 Vue 3 或了解有关 Vue 2 终止支持 (EOL) 的信息。
Vue CLI标准开发工具:https://cli.vuejs.org/zh/
搭建一个简单的Vue项目
问题1
下载vue-cli 版本2.9.6 使用vue create xx命令,报错,
原因在于:该命令是vue-cli 版本3的,所以需要更新版本;使用如图显示的两条命令。
问题2
运行vue vreate vue-xhj命令后,根据视频与真实操作情况,存在区别。
创建过程
进入想要创建vue项目的文件夹,通过cmd进入该文件夹;
输入vue create xxx 执行该命令;其中项目的依赖在node_modules;
切换到该项目目录xxx cd xxx
运行项目 npm run serve ; 项目启动后展示该项目的访问路径以及端口号,通过该信息可以在浏览器进行访问;
安装element-ui;在IDEA命令框中执行 npm i element-ui -S
快速上手,参考https://element.eleme.cn/#/zh-CN/component/quickstart
快速构建简单的可视化前端界面;
Vue.use(ElementUI,{size:"mini"}); //添加size的目的是为了将使用的组件设置合适的大小。
项目结构分析:
项目优化细节#2
去掉初始化项目界面中的边框:
项目/src/assets 创建global.css文件去掉某些元素的边框;
再main.js中引入该创建好的文件;
进行了一些配置,包括边框修改等,再代码中通过注解#2 xhj标识
项目优化#3
Spring项目1
项目架构
参考博客:https://blog.csdn.net/weixin_43823808/article/details/115254603
问题导向学习
接口接收数据并进行数据清洗
- 基本信息
在Java Spring Boot环境中,可以使用Spring Data JPA和Hibernate ORM来操作SQLite数据库,来处理如何创建一个接收并同步数据到服务器端数据库的RESTful API接口;
参考博客:https://blog.csdn.net/u013735734/article/details/136361244#%E9%85%8D%E7%BD%AE%20SQLite%20&%20JPA
项目基础配置:
需要确保配置:Spring Data JPA和SQLite连接
参考博客:https://blog.csdn.net/zyd573803837/article/details/109263219
VScode
-
需要确保配置:Spring Data JPA和SQLite连接
参考博客:https://blog.csdn.net/zyd573803837/article/details/109263219 -
vscode提交代码
整体过程是:提交-推送;
git使用介绍博客:https://blog.csdn.net/Shids_/article/details/112250700
提交很慢,解决博客:https://blog.csdn.net/m0_60322614/article/details/133017449 -
windows11 docker mysql
参考博客:https://blog.csdn.net/nmajsjpy/article/details/130183104
参考博客2:https://blog.csdn.net/joeyoj/article/details/136427362
Docker
-
docker相关知识学习?
-
docker启动mysql,如何创建数据库以及查看当前本机有哪些数据库?
参考博客:
https://blog.csdn.net/LegendaryChen/article/details/136050305?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-2-136050305-blog-132284868.235%5Ev43%5Epc_blog_bottom_relevance_base1&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-2-136050305-blog-132284868.235%5Ev43%5Epc_blog_bottom_relevance_base1&utm_relevant_index=5
启动mysql命令:
docker run --name mysql-container -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql:latest
Dockerhouse
Dockerhub
MyBatis
- mybatis+mysql 实现数据读取?
参考博客;https://blog.csdn.net/qq_39746820/article/details/124571053
已经实现;
参考博客:https://blog.csdn.net/huangxiaoben/article/details/130683023
该博客中mapper继承的是BaseMapper,该类中以及存在数据库的增删改查等操作;
思考1:mybatis实现数据持久化
在springboot项目中会涉及到entity、mapper、controller、service四个文件夹
entity = 存储与数据库中某个数据表对应的实例对象的类;
通过@TableName("table name") 将数据库中的表映射到该类上;
通过resource文件夹中的与mapper同目录的.xml文件,编写sql语句实现映射;
mapper = 接口,创建要执行的抽象方法,具体的实现在resource中的同文件夹索引目录下;注解是@mapper
demo\src\main\java\com\example\testxhj1\demo\mapper\TestClass1Mapper.java
demo\src\main\resources\com\example\testxhj1\demo\mapper\TestClass1Mapper.xml
可以看出 两个文件夹只有java 以及 resources的区别;
.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.testxhj1.demo.mapper.TestClass1Mapper">
<select id="selectTestClass1ById" resultType="com.example.testxhj1.demo.entity.TestClass1">
select id,str1,str2 from table1 where id = #{id}
</select>
// 其中id的内容需要与mapper接口的抽象方法名称一致;
</mapper>
service = 与mapper接口相同,但是注解不同 @Service 同样也是接口
serviceImpl service接口的实现;使用mapper接口实现,自动装载@Autowired;
controller = 类,自动装载service接口;
整体调用流程是:controller类--service接口实现-mapper接口
- mybatis+mysql 导入csv数据?
参考博客:https://blog.51cto.com/u_16213374/7691073
https://cloud.tencent.com/developer/article/2106459
Clickhouse
基础概念:
背后的研发团队是俄罗斯的yandex公司,该公司是搜索引擎公司。
是关系数据库的一种,与传统的mysql不同采用行式存储不同,该数据库采用的是列式存储。
- windows + docker desktop 下载clickhouse
参考博客:https://blog.csdn.net/qubernet/article/details/121013960
命令出现问题:
PASSWORD=$(base < /dev/urandom | head -c8); echo “testroot”; echo -n “123456” | sha256sum | tr -d ‘-’
需要通过apt-get下载 coreutils包 和 openssl包
账号密码:
testroot
8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92
testroot
8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92
两次运行的结果都一样。
最新处理数据:
quber
8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92
存在问题1
问题描述:
按照参考博客配置,会出现:
std::exception. Code: 1001, type: std::out_of_range, e.what() = unordered_map::at: key not found (version 21.12.3.32 (official build))的问题
问题分析:
<quber>
这是XML元素的根标签,代表正在配置的ClickHouse用户名称,即“quber”。
<password_sha256_hex>
表示用户“quber”的密码经过SHA-256算法加密后得到此十六进制表示的哈希值;
<networks incl="networks" replace="replace">
incl=“networks” :指示可能有其他地方定义了一组通用的网络规则(如在父级配置或外部文件中),这里将包括(include)那些通用规则;
replace=“replace”:表示即使有通用规则存在,也应该完全替换(replace)为这里指定的网络规则,即只允许来自::/0的所有IPv6地址的连接。
<ip>::/0</ip>
指定了一个IPv6 CIDR块,::/0相当于IPv6中的“任意地址”,意味着用户可以从任何IPv6网络访问ClickHouse服务器。
<profile>quber</profile>
profile 指定了用户将使用的权限配置文件或访问控制配置文件的名称;
用户“quber”关联到同名的“quber”访问控制配置文件。
配置成quber不能实现访问,是否是quber的配置文件存在问题?待考证;
<quota>quber</quota>
quota 指定了用户将遵循的配额规则;
quber 同样表示用户将使用同名的配额配置文件;配额文件定义了该用户在资源使用方面的限制,如查询速率、磁盘空间使用量、内存使用量等,用于控制单个用户或用户组对系统资源的消耗。
配置成quber不能正常访问,是否不存在同名的配额配置文件?待考证;
想要配置成功,直接将profile和quota都配置成default即可。
问题2
描述:
vscode中采用SQLTools Clickhouse 插件,访问clickhouse数据库;
show databases; 命令可以使用
use xx数据库; 命令不可行,会报错;
scode使用 clickhouse插件 执行show databases 可以正常运行。但执行命令use xxx数据库 出现There is no session or session context has expired. 问题,给出具体原因以及解决方案
select * from 表1; 命令可以执行
分析:
具体原因未知。
问题3
描述:
多源数据库加载异常;
参考:
https://cloud.tencent.com/developer/article/2000075
问题4:
在docker desktop启动的contains中创建新的容器;
springboot项目配置clickhouse
参考博客1:https://blog.csdn.net/csdn_xpw/article/details/121981940 待验证;
描述:
springboot项目+clickhouse配置信息,仅通过配置application.properties文件配置,数据库不能实现访问;
需要创建一个类A具有clickhouse涉及变量,然后被@ConfigurationProperties修饰;
由于配置了链接池druid,则需要创建一个配置类B,将A作为属性创建到B类中,然后创建返回DruidDataSource对象的方法。
分析:
原因在于:Properties中配置了druid连接池,但是在代码中没有配置。
JPA
可以通过项目中的实现类生成数据库的表,还附带增删改查的方法。
Druid
Druid 是一个分布式的、支持实时多维联机分析处理OLAP (On-Line Analytical Processing)分析的数据处理系统。
项目相关内容的理解
Springboot启动日志理解
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v3.2.4)
## 标志着Spring Boot应用正在初始化和启动。可以自定义Beaner,在src/main/resources中配置;
2024-04-01T16:52:29.367+08:00 INFO 23720 --- [xhjclass1] [ main] c.x.t.xhjclass1.Xhjclass1Application : Starting Xhjclass1Application using Java 17.0.10 with PID 23720 (D:\xhjwork\testwork\databaseTest1\xhjclass1\target\classes started by 13834 in D:\xhjwork\testwork\databaseTest1\xhjclass1)
## 应用程序启动类,使用Java版本为17.0.10,进程ID(PID)为23720 ,用户ID为13834的操作员
2024-04-01T16:52:29.378+08:00 INFO 23720 --- [xhjclass1] [ main] c.x.t.xhjclass1.Xhjclass1Application : No active profile set, falling back to 1 default profile: "default"
## 当Spring Boot应用启动时,它会查找激活的profile(配置文件集)。没有找到用于区分不同环境下的应用配置,比如开发环境、测试环境和生产环境等,则默认回退到default properties。
2024-04-01T16:52:30.279+08:00 INFO 23720 --- [xhjclass1] [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
## Spring Boot应用在启动时正在自动配置并初始化Spring Data JPA的相关组件
2024-04-01T16:52:30.297+08:00 INFO 23720 --- [xhjclass1] [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 6 ms. Found 0 JPA repository interfaces.
## 扫描6毫秒,发现0个JPA依赖接口;
2024-04-01T16:52:30.393+08:00 WARN 23720 --- [xhjclass1] [ main] o.m.s.mapper.ClassPathMapperScanner : No MyBatis mapper was found in '[com.xhj.test1.xhjclass1]' package. Please check your configuration.
## MyBatis没有找到任何映射器接口(Mapper)。映射器接口是用来定义SQL操作的方法以及与XML映射文件关联的Java接口,在MyBatis中它们扮演着数据访问层的核心角色。
2024-04-01T16:52:31.051+08:00 INFO 23720 --- [xhjclass1] [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port 8080 (http)
## 初始化tomcat 以及其8080端口
2024-04-01T16:52:31.061+08:00 INFO 23720 --- [xhjclass1] [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
## 启动tomcat
2024-04-01T16:52:31.061+08:00 INFO 23720 --- [xhjclass1] [ main] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.19]
## Spring Boot应用已开始启动嵌入式的Apache Tomcat 10.1.19版本作为Web容器,用于托管和运行你的Web应用程序。
2024-04-01T16:52:31.162+08:00 INFO 23720 --- [xhjclass1] [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2024-04-01T16:52:31.164+08:00 INFO 23720 --- [xhjclass1] [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1734 ms
## 初始化一个嵌入式的WebApplicationContext。
2024-04-01T16:52:31.432+08:00 INFO 23720 --- [xhjclass1] [ main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default]
2024-04-01T16:52:31.564+08:00 INFO 23720 --- [xhjclass1] [ main] org.hibernate.Version : HHH000412: Hibernate ORM core version 6.4.4.Final
2024-04-01T16:52:31.591+08:00 INFO 23720 --- [xhjclass1] [ main] o.h.c.internal.RegionFactoryInitiator : HHH000026: Second-level cache disabled
## Hibernate ORM框架 处理日志
2024-04-01T16:52:31.835+08:00 INFO 23720 --- [xhjclass1] [ main] o.s.o.j.p.SpringPersistenceUnitInfo : No LoadTimeWeaver setup: ignoring JPA class transformer
## 当Spring找不到或无法设置LoadTimeWeaver时,会出现这条日志信息,意味着Spring不能启用JPA的类转换器(class transformer),即不会在类加载时对JPA实体类进行额外的处理。
2024-04-01T16:52:31.870+08:00 INFO 23720 --- [xhjclass1] [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
2024-04-01T16:52:33.047+08:00 INFO 23720 --- [xhjclass1] [ main] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection org.sqlite.jdbc4.JDBC4Connection@8f2e3e6
2024-04-01T16:52:33.047+08:00 INFO 23720 --- [xhjclass1] [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
## HikariCP连接池,它是Spring Boot应用中常用的一种高性能的JDBC连接池实现。
2024-04-01T16:52:33.371+08:00 INFO 23720 --- [xhjclass1] [ main] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration)
## 这条日志信息来自Hibernate ORM框架,它表明当前环境中没有可用的Java Transaction API (JTA) 平台。
2024-04-01T16:52:33.380+08:00 INFO 23720 --- [xhjclass1] [ main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
## Spring Framework在启动过程中完成了对JPA(Java Persistence API)持久化单元(Persistence Unit)'default'的Entity Manager Factory的初始化。
2024-04-01T16:52:33.421+08:00 WARN 23720 --- [xhjclass1] [ main] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
## Spring Boot默认开启了spring.jpa.open-in-view属性,这意味着在Spring MVC渲染视图(View Rendering)期间,仍会保持JPA的EntityManager处于打开状态,即实体管理器作用域跨越了HTTP请求的整个生命周期,包括视图渲染阶段。
## 可以通过spring.jpa.open-in-view=false 实现关闭
2024-04-01T16:52:34.206+08:00 INFO 23720 --- [xhjclass1] [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port 8080 (http) with context path ''
## Apache Tomcat服务器已经成功启动,并监听在8080端口上等待HTTP请求
2024-04-01T16:52:34.222+08:00 INFO 23720 --- [xhjclass1] [ main] c.x.t.xhjclass1.Xhjclass1Application : Started Xhjclass1Application in 5.343 seconds (process running for 5.879)
项目修改文件路径
修改项目文件夹的路径,即从:
main/java/com/demo/example/testxhj1/demo 改成:
main/java/com/demo
文件夹修改成功之后,需要对class类中的package以及import导包路径修改,之后就可以运行了。
以及再修改对应的mapper文件中涉及到类的定位等内容。
项目启动异常1java.lang.AbstractMethodError
异常描述:
java.lang.AbstractMethodError: Receiver class org.springframework.boot.env.EnvironmentPostProcessorApplicationListener does not define or inherit an implementation of the resolved method 'abstract boolean supportsSourceType(java.lang.Class)' of interface org.springframework.context.event.SmartApplicationListener.
异常分析:
pom文件中,添加如下配置,但是会报上述错误。
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.12.RELEASE</version>
</dependency>
原因分析:
springboot项目pom文件
<!-- 基本信息 -->
pom文件是maven构建工具使用的配置文件,用于定义项目的各种信息和依赖管理。
<groupId>com.unicom</groupId>
// 定义项目的组织唯一标识符,通常通过反域名的形式保证全球唯一性;
<artifactId>anon.sub</artifactId>
// 定义实际项目的名称与模块名称,与groupId构成项目的唯一坐标;
<version>1.0-SNAPSHOT</version>
// 指定项目的版本号
<packaging>jar</packaging>
// 指定项目打包后的类型
<name>anon.sub</name>
// 为项目提供一个人类可读的名称
<description>Anonymous Subscription</description>
// 为项目提供一个简短描述