Spring Cloud + Vue前后端分离-第2章 使用Maven搭建SpringCloud项目

Spring Cloud + Vue前后端分离-第2章 使用Maven搭建SpringCloud项目

Maven两大核心功能:

        依赖管理(Jar包管理)

        构建项目(项目打包)

使用Eureka搭建注册中心

使用spring initializr创建spring cloud项目

SpringCloud和Maven简介

SpringBoot和SpringCloud:SpringBoot是单应用开发框架,SpringCloud是管理多个SpringBoot应用的微服务框架

GENERATE下载就可以了

下载完成后是个压缩包,解压后,打开idea,点击filer>open就可以导入项目了

项目初始化,要把代码管理优先做后,不管是学习还是工作,养成阶段性提交代码的习惯。代码管理选择git

一个项目里不是所有的文件都需要提交到git,比如.iml这个是idea本地项目文件,比如maven的target文件夹。所以用.gitignore帮我们自动排除

1.增加eureka子模块作为注册服务端

2.将单maven项目改造成maven父子项目

pom.xml(course)

<?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><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.2.2.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.course</groupId><artifactId>course</artifactId><version>0.0.1-SNAPSHOT</version><packaging>pom</packaging><name>course</name><description>Demo project for Spring Boot</description><modules><module>eureka</module></modules><properties><java.version>1.8</java.version><spring-cloud.version>Hoxton.RELEASE</spring-cloud.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><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>

pom.xml(eureka)

<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><parent><groupId>com.course</groupId><artifactId>course</artifactId><version>0.0.1-SNAPSHOT</version></parent><artifactId>eureka</artifactId><packaging>jar</packaging><name>eureka</name><url>http://maven.apache.org</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency></dependencies>
</project>

搭建业务模块-system

1.解决注册中心服务启动失败的问题
1.解决注册中心服务启动失败的问题

支持application.properties或application.yml文件,默认会读取resources目录下或resources/config目录下,后续会有读/config目录的示例

spring.application.name=eureka
server.port=8761
eureka.client.fetch-registry=false
eureka.client.register-with-eureka=false

springboot默认集成slf4j框架,它定义了一些日志接口,规范日志输出,真正的实现是logback或log4j,我们代码中写的都是slf4j的代码

2.优化启动日志显示

启动日志可以按需扩展,甚至可以打印一些有趣的字符图

package com.course;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.core.env.Environment;/*** Hello world!**/
@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {private static final Logger logger = LoggerFactory.getLogger(EurekaApplication.class);//    public static void main(String[] args) {
//        SpringApplication.run(EurekaApplication.class, args);
//    }public static void main(String[] args) {SpringApplication app = new SpringApplication(EurekaApplication.class);Environment env = app.run(args).getEnvironment();logger.info("启动成功!!");logger.info("Eureka地址: \thttp://127.0.0.1:{}", env.getProperty("server.port"));}}

logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration><!-- 修改一下路径--><property name="PATH" value="/log/imooc/course/eureka"></property><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder>
<!--            <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %highlight(%-5level) %blue(%-50logger{50}:%-4line) %msg%n</Pattern>--><Pattern>%d{ss.SSS} %highlight(%-5level) %blue(%-30logger{30}:%-4line) %msg%n</Pattern></encoder></appender><appender name="TRACE_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${PATH}/trace.log</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><FileNamePattern>${PATH}/trace.%d{yyyy-MM-dd}.%i.log</FileNamePattern><timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"><maxFileSize>10MB</maxFileSize></timeBasedFileNamingAndTriggeringPolicy></rollingPolicy><layout><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %-50logger{50}:%-4line %green(%-8X{UUID}) %msg%n</pattern></layout></appender><appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${PATH}/error.log</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><FileNamePattern>${PATH}/error.%d{yyyy-MM-dd}.%i.log</FileNamePattern><timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"><maxFileSize>10MB</maxFileSize></timeBasedFileNamingAndTriggeringPolicy></rollingPolicy><layout><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %-50logger{50}:%-4line %green(%-8X{UUID}) %msg%n</pattern></layout><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>ERROR</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter></appender><root level="ERROR"><appender-ref ref="ERROR_FILE" /></root><root level="TRACE"><appender-ref ref="TRACE_FILE" /></root><root level="INFO"><appender-ref ref="STDOUT" /></root>
</configuration>

小建议:养成阶段性提交代码的习惯,可以是完成一个小功能。并且每天下班前提交本地代码,前提是不能编译报错或影响已有的功能 

2.新建Maven子项目system

maven父子模块的配置: 在子模块中使用parent标签指向父模块,在父模块中使用module标签引入子模块

将system配置成最简单的SpringBoot项目

(注意:java和resources是同级目录!!!小编大意,求原谅)

package com.course.system;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.core.env.Environment;@SpringBootApplicationpublic class SystemApplication {private static final Logger logger = LoggerFactory.getLogger(SystemApplication.class);public static void main(String[] args) {SpringApplication app = new SpringApplication(SystemApplication.class);Environment env = app.run(args).getEnvironment();logger.info("启动成功!!");logger.info("System地址: \thttp://127.0.0.1:{}", env.getProperty("server.port"));}}
spring.application.name=system
server.port=9001

<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><parent><groupId>com.course</groupId><artifactId>course</artifactId><version>0.0.1-SNAPSHOT</version></parent><artifactId>system</artifactId><packaging>jar</packaging><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies>
</project>

3.将system注册到注册中心

第1步:增加eureka-client依赖

第2步:增加配置,指向注册中心的地址

第3步:增加@EnableEurekaClient

搭建路由模块-gateway

SpringCloug的网关组件可以用gateway或zuul,最早使用的是zuul,后面spring自己出了gateway

网关主要功能:

        限流(流量控制);

        重试(请求失败时重试,慎用);

        跨域(前后端不在同一个域);

        路由(转发请求);

        鉴权(登录校验,签名校验)等...

新建Maven子项目gateway

步骤和system模块一样改一些参数

新增gateway子模块,增加gateway依赖,并注册到注册中心

(注意:java和resources是同级目录!!!小编大意,求原谅) 

spring.application.name=gateway
server.port=9000
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/#路由转发
spring.cloud.gateway.routes[0].id=system
spring.cloud.gateway.routes[0].uri=http://127.0.0.1:9001
spring.cloud.gateway.routes[0].predicates[0].name=Path
spring.cloud.gateway.routes[0].predicates[0].args[0]=/system/**

<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><parent><groupId>com.course</groupId><artifactId>course</artifactId><version>0.0.1-SNAPSHOT</version></parent><artifactId>gateway</artifactId><packaging>jar</packaging><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency></dependencies>
</project>

路由转发

路由转发:将外部请求转发到实际的业务模块进行处理。

1.在gateway增加system路由转发配置,调试成功

我们做的所有的改动都需要重启应用才能生效,后续我们介绍热部署,不再需要手动重启,从而提高开发效率

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

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

相关文章

FastAPI之声明请求参数示例数据

在Pydantic模型中添加额外的JSON模式数据 您可以声明Pydantic模型的示例&#xff0c;这些示例将被添加到生成的JSON模式中。 示例代码 from fastapi import FastAPI from pydantic import BaseModelapp FastAPI()class Item(BaseModel):name: strdescription: str | None …

(C语言实现)高精度除法 (洛谷 P2005 A/B Problem II)

前言 本期我们分享用C语言实现高精度除法&#xff0c;可通过该题测试点我点我&#xff0c;洛谷 p2005。 那么话不多说我们开始吧。 讲解 大家还记不记得小学的时候我们是怎么做除法的&#xff1f;我们以1115为例。 我们的高精度除法也将采用这个思路进行&#xff0c;分别用两…

Python-算术运算符详解

运算符 算术运算符 关系运算符 逻辑运算符 赋值运算符 算术运算符&#xff1a;加减乘除 %求余 **平方 // 先算乘方&#xff0c;再算乘除&#xff0c;最后是加减。括号可以改变优先级 0不能作为除数&#xff08;不论是整型0还是浮点0&#xff09; 除法截断&#xff1a;舍弃小…

UDP群聊

客户端 import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.EventQueue; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader…

使用VBA快速统计词组(单词组合)词频

实例需求&#xff1a;产品清单如A列所示&#xff0c;现在如下统计词组词频。想必各位小伙伴都指定如何使用字典对象实现去重&#xff0c;进而实现单个单词的词频统计。 但是统计词组词频就没有那么简单了&#xff0c;为了便于演示&#xff0c;此处的词组只限于两个单词的组合。…

【解决办法】Pycharm中新添加或者导入项目文件名红色!

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、问题描述二、问题原因三、解决办法 一、问题描述 Pycharm的代码中添加新的文件夹&#xff0c;发现文件夹下的文件名是红色的&#xff0c;如下图&#xff1a; …

设计模式——单例模式(Singleton Pattern)

概述 单例模式确保一个类只有一个实例&#xff0c;而且自行实例化并向整个系统提供整个实例&#xff0c;这个类称为单例类&#xff0c;它提供全局访问的方法。单例模式是一种对象创建型模式。单例模式有三个要点&#xff1a;一是某个类只能有一个实例&#xff1b;二是它必须自行…

Java---线程讲解(二)

文章目录 1. Runnable接口2. 卖票案例3. 同步代码块解决数据安全问题4. 同步方法解决数据安全问题5. 线程安全的类6. Lock锁 1. Runnable接口 1. 创建线程的另一种方法是声明一个实现Runnable接口的类&#xff0c;之后重写run()方法&#xff0c;然后可以分配类的实例&#xff0…

基于remix+metamask+ganache的智能合约部署调用

在我们部署合约时为了让它更接近真实区块链去中心化体验&#xff0c;我们需要调用小狐狸&#xff08;Metamask&#xff09;来进行真实交易&#xff0c;而metamask里没有内置虚拟测试币&#xff0c;我们需要进行调用Ganache来添加带有虚拟测试币的账号。以上就是三者的关系&…

从 MLOps 到 LMOps 的关键技术嬗变

本文整理自 2023 年 9 月 3 日 QCon 全球软件开发大会 2023 北京站 —— 从 MLOps 到 LMOps 分论坛的同名主题演讲。 本次分享的内容结构如下&#xff1a; 从 MLOps 到 LMOps&#xff1b; MLOps 概述、挑战与解决方案&#xff1b; LMOps 实施挑战与关键技术&#xff08;大模…

[FPGA 学习记录] 快速开发的法宝——IP核

快速开发的法宝——IP核 文章目录 1 IP 核是什么2 为什么要使用 IP 核3 IP 核的存在形式4 IP 核的缺点5 Quartus II 软件下 IP 核的调用6 Altera IP 核的分类 在本小节当中&#xff0c;我们来学习一下 IP 核的相关知识。 IP 核在 FPGA 开发当中应用十分广泛&#xff0c;它被称为…

使用Golang构建高性能网络爬虫

目录 一、Golang的特点 二、构建网络爬虫的步骤 三、关键技术和注意事项 使用协程进行并发处理 使用通道进行协程间的通信 合理控制并发数和处理速度 遵守网站使用协议和法律法规 防止被网站封禁或限制访问 优化网页解析和数据处理 异常处理和错误处理 日志记录和监控…

vmware虚拟机17 安装macos14过程及问题处理亲测

前期准备 1、可引导可虚拟机安装的macOS Sonoma 14 ISO镜像安装文件 我找到得地址&#xff0c;下载自行解决啦 2、VMware虚拟机应用软件 官网下载就好&#xff0c;搜个码搞定 3、解锁工具macOS Unlocker 开始安装&#xff1a; 1、打开VMware软件&#xff0c;新建一个系统…

Bert-vits2新版本V2.1英文模型本地训练以及中英文混合推理(mix)

中英文混合输出是文本转语音(TTS)项目中很常见的需求场景&#xff0c;尤其在技术文章或者技术视频领域里&#xff0c;其中文文本中一定会夹杂着海量的英文单词&#xff0c;我们当然不希望AI口播只会念中文&#xff0c;Bert-vits2老版本(2.0以下版本)并不支持英文训练和推理&…

完整方案开放下载!详解中国移动《通信网络中量子计算应用研究报告》

8月30日&#xff0c;中国移动在第四届科技周暨战略性新兴产业共创发展大会上重磅发布了《通信网络中量子计算应用研究报告》。 玻色量子作为中国移动在光量子计算领域的唯一一家合作企业兼战投企业&#xff0c;在量子计算应用于通信行业达成了深入合作&#xff0c;并在5G天线多…

干货分享|300平米A级机房设计方案

本方案中XXX计算机中心机房建设工程&#xff0c;是XXX的数据中心&#xff0c;机房位于建筑的X层&#xff0c;计算机机房面积300㎡。采购设备以及装修工艺主要用于XXX所属计算机机房装修工程。 考虑到中心机房投资大、使用周期长&#xff0c;而业主业务发展快&#xff0c;现代技…

空间地图GIS基础

关注微信公众号掌握更多技术动态 --------------------------------------------------------------- 一、GIS基本概念 地理信息系统&#xff08;Geographic Informaiton System, GIS&#xff09;是一个可以建立、浏览、查询、分析地理空间数据的软件系统&#xff0c;其功能小…

【RHCE】openlab搭建web网站

网站需求&#xff1a; 1、基于域名 www.openlab.com 可以访问网站内容为 welcome to openlab!!! 增加映射 [rootlocalhost ~]# vim /etc/hosts 创建网页 [rootlocalhost ~]# mkdir -p /www/openlab [rootlocalhost ~]# echo welcome to openlab > /www/openlab/index.h…

利用法线贴图渲染逼真的3D老虎模型

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 当谈到游戏角色的3D模型风格时&#xff0c;有几种不同的风格&#xf…

3-Mybatis

文章目录 Mybatis概述什么是Mybatis&#xff1f;Mybatis导入知识补充数据持久化持久层 第一个Mybatis程序&#xff1a;数据的增删改查查创建环境编写代码1、目录结构2、核心配置文件&#xff1a;resources/mybatis-config.xml3、mybatis工具类&#xff1a;Utils/MybatisUtils4、…