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;分别用两…

在 TS 中解析 ipa 文件

在 TS 中解析 ipa 文件 ipa即Xcode打包出来的APP的安装包&#xff0c;通过解析ipa中的文件&#xff0c;我们可以获得APP的DisplayName、Version、BundleIdentifier等信息&#xff0c; 同时也可以获取到APP证书的相关信息&#xff0c;包括APP的安装环境、证书的有效期、APP开通…

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…

LeetCode738. Monotone Increasing Digits

文章目录 一、题目二、题解 一、题目 An integer has monotone increasing digits if and only if each pair of adjacent digits x and y satisfy x < y. Given an integer n, return the largest number that is less than or equal to n with monotone increasing digi…

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

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

自动驾驶右向辅助功能规范

目 录 Contents 目录 1. 介绍 Introduction. 8 1.1 此文档的范围和目的 Scope and Purpose of This Document 8 1.2 参考文档References. 9 1.3 文档的维护 Maintenance of the Document 10 1.4 缩略词Abbreviations. 10 1.5 文档概述Document Overview.. 11 1.6 功能…

GoLong的学习之路,进阶,Viper(yaml等配置文件的管理)

本来有今天是继续接着上一章写微服务的。但是这几天有朋友说&#xff0c;再写Web框架的时候&#xff0c;遇到一个问题&#xff0c;就是很多的中间件&#xff08;redis&#xff0c;微信&#xff0c;mysql&#xff0c;mq&#xff09;的配置信息写的太杂了&#xff0c;很不好管理。…

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

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

jvm-sandbox-repeater 精简版部署之standalone模式

jvm-sandbox-repeater 仅仅提供了录制回放的能力&#xff0c;如果需要完成业务回归、实时监控、压测等平台&#xff0c;后面须要有一个数据中心负责采集数据的加工、存储、搜索&#xff0c;repeater-console提供了简单的demo示例&#xff1b;一个模块管理平台负责管理JVM-Sandb…

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

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

矩阵基本操作算法

题目描述&#xff1a; 题目描述 根据主函数和头文件提示&#xff0c;编写子函数void matrixInput(int (*mat)[COL]); void matrixPrint(int *mat[ROW]); void matrixAddT(int *mat); ​ 分别实现矩阵的输入&#xff0c;输出&#xff0c;与自身的转置相加&#xff1a;void matr…

微信小程序开发中的图片缺少后自动居中问题的解决,自动居中样式,自适应图片多少的写法

下面是写的wxml的view样式类似于web开发中的HTML文件 home-grid是我创建的一个父样式&#xff0c;采用子绝父相的定位方式 我在home-grid的父view&#xff08;类似于web中div&#xff09;中包含了三个小的子样式分别是下述代码中的class“yellowstar”&#xff0c;class“maint…

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;它被称为…

Java最全面试题专题---1、Java基础知识(2)

笔者有七八年的面试者经验&#xff0c;负责公司技术同学的社招和校招&#xff0c;近些年面试过三四百个技术同学&#xff0c;考虑接近年底这个时段&#xff0c;整理并更新一些以往的面试经验&#xff0c;希望同学们跳槽能有个更好的工作&#xff0c;如有需要的同学可以关注下笔…

Jenkins安装

环境 Ubuntu&#xff0c; 其他平台查看官方文档 步骤 安装jdk sudo apt-get install openjdk-8-jdk 安装Jenkins first add the key to your system wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -Then add a Jenkins apt repository …