javaee之黑马乐优商城1
问题1:整体的项目架构与技术选型




技术选型

开发环境

域名测试

如何把项目起来,以及每一个目录结构大概是什么样子
通过webpack去启动了有个项目,这里还是热部署,文件改动,内容就会改动

Dev这个命令会生成一个本地循环地址和ip,然后直接访问这个ip就可以访问到项目
下面说一下关键目录结构

说一下里面的webpack.base.conf.js这个配置文件

再来说config这个文件夹,是项目的配置文件,里面的Index.js可以定义端口,一般后端端口我们全部设置为80开始的端口,前端就是90打头

每个页面是如何找到的
在src下面是我们存放的具体相关页面

下面看一下主体文件

主页面的一个修改
下面说一下怎么找到具体的一个页面

这里每一个title都对应了一个路由


基本上来说前端页面就是这样进行修改的
整体的项目创建
先来创建一个大的父工程,用来给子工程管理依赖
采用无骨架方式创建一个父工程
引入下面依赖
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.leiyou.parent</groupId><artifactId>leiyou</artifactId><version>1.0.0-SNAPSHOT</version><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.1.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version><spring-cloud.version>Finchley.RC1</spring-cloud.version><mybatis.starter.version>1.3.2</mybatis.starter.version><mapper.starter.version>2.0.2</mapper.starter.version><druid.starter.version>1.1.9</druid.starter.version><mysql.version>5.1.32</mysql.version><pageHelper.starter.version>1.2.3</pageHelper.starter.version><leyou.latest.version>1.0.0-SNAPSHOT</leyou.latest.version><fastDFS.client.version>1.26.1-RELEASE</fastDFS.client.version></properties><dependencyManagement><dependencies><!-- springCloud --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency><!-- mybatis启动器 --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>${mybatis.starter.version}</version></dependency><!-- 通用Mapper启动器 --><dependency><groupId>tk.mybatis</groupId><artifactId>mapper-spring-boot-starter</artifactId><version>${mapper.starter.version}</version></dependency><!-- 分页助手启动器 --><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>${pageHelper.starter.version}</version></dependency><!-- mysql驱动 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version></dependency><!--FastDFS客户端--><dependency><groupId>com.github.tobato</groupId><artifactId>fastdfs-client</artifactId><version>${fastDFS.client.version}</version></dependency></dependencies></dependencyManagement><!--放到这个下面的依赖会直接把子类继承--><dependencies><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.4</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build><repositories><repository><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/milestone</url><snapshots><enabled>false</enabled></snapshots></repository></repositories>
</project>
既然这是一个微服务项目,那么就会涉及到注册中心,网关
下面去搭建一个ly-registry模块,这里面的注册中心采用eureka来进行注册
在父类的基础之上创建一个模块

这里说一个问题:引入Eureka的依赖报红问题
Eureka的依赖是依赖于Spring Cloud的,Spring cloud的版本的不同会导致Eureka可能下载不下来。
所以,首先Spring cloud的引入版本很重要,你的maven镜像能不能把这个spring cloud下载到本地
先来看以前用到的Spring cloud版本


这个版本对应的就是Spring cloud的如下版本

看一下仓库下面的spring boot的版本

这个问题是你如果在父类pom文件里面引入的spring cloud版本不能下载下来,那么后面的Eureka你根本导入不进来。
下面在创建一个网关的服务


这个网关这个位置必须提供两个依赖

RestTemplate的用法

常用的方法如下:

几个注解的作用





下面说一下关于通用mapper的用法
关于通用mapper的用法

在Eureka中出现找不到服务

先来说一下,关于某个服务的配置,比如user-serive这个服务,它会被注册到eureka注册中心,那么这个服务就会发送一个心跳给一个eureka,告诉它,它是存在的,这个心跳的配置就是


一个用于检测心跳多久发送一次,主要用于判断服务是否健康。
一个用于在服务端多久没收到这个服务的心跳就会默认杀死这个服务

关于ribbon的配置

关于项目结构问题

item是一个商品微服务,它的下面有一组接口与服务组件,接口就是类,这个类的pom文件不需要任何依赖,但是在ly-item-service里面还是需要很多依赖的

它这个业务逻辑大概是这样

上面pom文件与yml文件都配完了,下面说一下如何测试能够打通
这里需要测试的几个微服务
ly-item
ly-registry
ly-gateway
微服务启动可能出现的问题1:

上面的问题可能是配置文件出了问题

hikari没找到数据库驱动管理类
微服务启动还可能出现的问题

连接拒绝,连接失败,这个时候直接make clean
它的作用如下

下面说一下在写项目的过程中的异常处理
ResponseEntity这个类,它是继承了HttpEntity这个类,可以添加HtttpStatus状态码。
常见的http状态码

关于枚举类的一些说明
枚举里面可以定义常量,变量与方法(方法一般采用构造方法定义),这里可以通过枚举本身的构造方法为枚举常量赋值

解决域名映射问题
一般来说,在网络中存在一台DNS域名解析器,这台域名解析器能解析网络中已经注册好了的域名配置,但是如果没有注册域名,就需要去本地的Host文件进行修改

去把localhost配置到映射文件里面

映射ip可以做了,但是端口号怎么解决,采用nginx来做。

这里的核心就是nginx帮我们监听80端口,端口过来之后,根据location来帮我们负责路径的转发
每一个server块就是一个请求路由,然后帮我监听相应的请求路径,然后根据location的定位负责进行转发。
为什么manage.leyou.com这个过来,会一直跳转失败呢

看一下上面的配置,监听的一个server_name是manage.leyou.com ,而这个在DNS网关里面是没有配置过的,所以需要在本地的Hosts里面进行一个配置,也就是在linux机器上做一个配置,但是没有去配,linux找不到这个ip地址.
另外需要再次说明的是,在IDEA对后端项目的配置上,不能这样去配置

也就是说划红线的位置不能是localhost,因为如果是locahost就只有本地机器才能访问到 ,我们现在需要用linux去访问这个位置,配置成0.0.0.0就代表任何ip都可以进行访问

这里必须修改一下windows上面的hosts文件

上面的端口全部改成linux 的主机ip,不然路由不到

下面展示一下反向代理的正确配置

下面进入实际的业务层操作

这是它的后端

相关文章:
javaee之黑马乐优商城1
问题1:整体的项目架构与技术选型 技术选型 开发环境 域名测试 如何把项目起来,以及每一个目录结构大概是什么样子 通过webpack去启动了有个项目,这里还是热部署,文件改动,内容就会改动 Dev这个命令会生成一个本地循环…...
滴滴前端一面面经(已挂)
面试过程 前段时间面试了滴滴的前端实习岗位,大厂的面试机会很难得,复习了很多前端知识。 拿到面试机会,是在地铁上投递了boss,当时hr看了我的简历就和我约了第二天的面试。电脑也没带,晚上就用手机复习了前端的一些…...
靠谱的适合上班族做的副业,这几种一定要试试!
作为上班族,我们的时间常常被工作和日常生活所占据,很少有机会去追求自己的兴趣和创造额外的收入来源。然而,副业是一种理想的选择,可以帮助我们实现多样化的发展,并在经济上取得一定的突破。正如书中所言:…...
VSCode连接服务器
Pycharm连接服务器参考我的另一篇文章Pycharm远程连接服务器_pycharm进入服务器虚拟环境终端_Jumbo星的博客-CSDN博客 本质上Pycharm和VSCode都只是IDE,没有什么好坏之分。但是因为Pycharm连接服务器(准确来说是部署)需要买professional。而…...
Python爬虫网络安全:优劣势和适用范围分析
各位Python程序猿大佬们!在当今数字化时代,网络安全是至关重要的。保护你的网络通信安全对于个人和组织来说都是非常重要的任务。在本文中,我将与你一起探讨Python网络安全编程中的代理、虚拟专用网络和TLS这三个关键概念,分析它们…...
swift APP缓存
这里的APP缓存是指Cache文件夹里的内容,iOS系统从iOS 10开始就支持系统自动清理功能了。 建议重要的内容不要放到 Cache文件夹中。 一、获取缓存 /// 获取缓存大小public static func getCacheSize() -> String {let folderPath NSSearchPathForDirectoriesIn…...
Linux中的dpkg指令(dpkg -l | grep XXX等)
dpkg是Debian包管理系统中的一个工具,用于在Linux系统中安装、升级、删除和管理软件包。它是Debian、Ubuntu以及基于它们的发行版中的包管理器。 dpkg 有很多用法,常用之举例:dpkg -l | grep apt 显示系统中安装的与apt相关(命名)…...
import type {} from ‘module‘ 具体解释
import type { AxiosInstance, AxiosRequestConfig } from axiosimport type { RequestConfig, RequestInterceptors } from ./typesimport type {} from module 是 TypeScript 中的一种导入语法,用于导入类型声明而不导入具体的值,它告诉 TypeScript 编…...
十年JAVA搬砖路——数据结构线性结构
线性结构 线性表是一种数据结构,用于存储一组有序的数据元素。它的特点是数据元素之间存在一对一的关系,每个元素只有一个前驱和一个后继(除了第一个元素和最后一个元素)。线性表可以用数组或链表来实现。 数据是指事物的符号表…...
Mybatis为什么需要预编译等一系列问题
1 SQL 预编译 SQL 预编译是一种提高数据库访问效率的技术,它通过将 SQL 语句预编译并存储在数据库中,减少每次执行时需要进行解析和编译的开销,从而提高数据库访问的效率。 在预编译阶段,SQL 语句会被解析并转换为可执行的二进制…...
【JVM基础】JVM入门基础
目录 JVM的位置三种 JVMJVM体系结构类加载器双亲委派机制概念例子作用 沙箱安全机制组成沙箱的基本组件 NativeJNI:Java Native Interface(本地方法接口)Native Method Stack(本地方法栈) PC寄存器(Program…...
【SpringBoot】详细介绍Spring Boot中@Component
在Spring Boot中,Component是一个通用的注解,用于标识一个类是Spring框架中的组件。Component注解是Spring的核心注解之一,它提供了自动扫描和实例化bean的功能。 具体来说,Component注解的作用是将一个普通的Java类转化为Spring…...
Redis执行lua脚本-Time函数-获取当前时间
演变过程: TIME 命令返回当前服务器的时间,包含两个条目 Unix 时间戳和这一秒已经过去的微秒数。 eval " local res redis.call(time); return res; " 0 eval " local current_time redis.call(TIME) local unix_timestamp tonumb…...
前端无需install快速调试npm包,Console-Import使用
Console-Import是一个Chrome扩展插件,可以方便地从Chrome控制台导入JavaScript和CSS资源。它可以帮助我们在开发过程中快速调试和测试第三方库或代码。 下载地址 安装 要安装Console-Import,请在Chrome网上应用店搜索“Console-Import”,然…...
构建稳定的爬虫系统:如何选择合适的HTTP代理服务商
在构建一个稳定、高效的爬虫系统中,选择合适的HTTP代理服务商是至关重要的一步。本文将介绍如何选取可靠且性能优秀的HTTP代理服务供应商,来完成搭建一个强大而稳定的爬虫系统。 1.了解不同类型和特点 -免费公开代理服务器:提供免费但可能存在限制或不…...
Python爬虫基础:使用Scrapy库初步探索
Scrapy是Python中最流行的网页爬虫框架之一,强大且功能丰富。通过Scrapy,你可以快速创建一个爬虫,高效地抓取和处理网络数据。在这篇文章中,我们将介绍如何使用Scrapy构建一个基础的爬虫。 一、Scrapy简介及安装 Scrapy是一个用…...
MacBookPro重装系统图文教程
关机 长按电源按钮10s即可强制关机 快捷键选择 Intel Command-R:获得安装过的最新的 macOS,但不会升级到最高版Option-Command-R:获得与 Mac 兼容的最新版 macOSShift-Option-Command-R:获得 Mac 自带的 macOS 或者与它最接近且…...
Android 6.0长按电源键添加重启菜单
重启图标:frameworks/base/core/res/res/drawable-hdpi/ic_lock_power_reboot_alpha.pngframeworks/base/core/res/res/drawable/ic_lock_power_reboot.xml <?xml version"1.0" encoding"utf-8"?> <!-- Copyright (C) 2014 The And…...
Python股票交易---均值回归
免责声明:本文提供的信息仅用于教育目的,不应被视为专业投资建议。在做出投资决策时进行自己的研究并谨慎行事非常重要。投资涉及风险,您做出的任何投资决定完全由您自己负责。 在本文中,您将了解什么是均值回归交易算法ÿ…...
机器人制作开源方案 | 桌面级机械臂--本体说明+驱动及控制
一、本体说明 1. 机械臂整体描述 该桌面级机械臂为模块化设计,包含主机模块1个、转台模块1个、二级摆动模块1个、可编程示教盒1个、2种末端执行器、高清摄像头,以及适配器、组装工具、备用零件等。可将模块快速组合为一个带被动关节的串联3自由度机械臂…...
【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...
图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...
MySQL 8.0 事务全面讲解
以下是一个结合两次回答的 MySQL 8.0 事务全面讲解,涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容,并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念(ACID) 事务是…...
LRU 缓存机制详解与实现(Java版) + 力扣解决
📌 LRU 缓存机制详解与实现(Java版) 一、📖 问题背景 在日常开发中,我们经常会使用 缓存(Cache) 来提升性能。但由于内存有限,缓存不可能无限增长,于是需要策略决定&am…...
MySQL 部分重点知识篇
一、数据库对象 1. 主键 定义 :主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 :确保数据的完整性,便于数据的查询和管理。 示例 :在学生信息表中,学号可以作为主键ÿ…...
2025-05-08-deepseek本地化部署
title: 2025-05-08-deepseek 本地化部署 tags: 深度学习 程序开发 2025-05-08-deepseek 本地化部署 参考博客 本地部署 DeepSeek:小白也能轻松搞定! 如何给本地部署的 DeepSeek 投喂数据,让他更懂你 [实验目的]:理解系统架构与原…...
ubuntu中安装conda的后遗症
缘由: 在编译rk3588的sdk时,遇到编译buildroot失败,提示如下: 提示缺失expect,但是实测相关工具是在的,如下显示: 然后查找借助各个ai工具,重新安装相关的工具,依然无解。 解决&am…...
GeoServer发布PostgreSQL图层后WFS查询无主键字段
在使用 GeoServer(版本 2.22.2) 发布 PostgreSQL(PostGIS)中的表为地图服务时,常常会遇到一个小问题: WFS 查询中,主键字段(如 id)莫名其妙地消失了! 即使你在…...
7种分类数据编码技术详解:从原理到实战
在数据分析和机器学习领域,分类数据(Categorical Data)的处理是一个基础但至关重要的环节。分类数据指的是由有限数量的离散值组成的数据类型,如性别(男/女)、颜色(红/绿/蓝)或产品类…...
