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

第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项目

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;


@SpringBootApplication

public 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依赖,并注册到注册中心

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路由转发配置,调试成功

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[ISCTF 2023]——Web、Misc较全详细Writeup、Re、Crypto部分Writeup

前言 由于懒我直接把上交的wp稍加修改拉上来了&#xff0c;凑活看 文章目录 前言Pwntest_ncnc_shell ReverseCreakmeEasyRebabyReeasy_z3mix_reeasy_flower_tea Webwhere_is_the_flag圣杯战争!!!绕进你的心里easy_websitewafrez_ini1z_Ssqldouble_picklewebincludefuzz!恐怖G…

全网最新最全的自动化测试:python+pytest接口自动化-接口测试基础

接口定义 一般我们所说的接口即API&#xff0c;那什么又是API呢&#xff0c;百度给的定义如下&#xff1a; API&#xff08;Application Programming Interface&#xff0c;应用程序接口&#xff09;是一些预先定义的接口&#xff08;如函数、HTTP接口&#xff09;&#xff0c…

从0到1的跨境电商创业经验分享!个人如何做跨境电商创业?

近年来&#xff0c;跨境电商成为了一种非常流行的创业方式&#xff0c;都知道国内贸易不好做&#xff0c;许多卖家都想通过跨境电商创业&#xff0c;但他们不知道具体的过程&#xff0c;今天龙哥我就分享一下我自己在跨境电商创业总结出来的经验&#xff0c;帮助你在跨境电商领…

【powerjob】定时任务调度器 xxl-job和powerjob对比

文章目录 同类产品对比资源及部署相关资源占用对比&#xff1a;部署方式&#xff1a;xxl job :调度器&#xff1a;执行器&#xff1a; powerjob&#xff1a;调度器&#xff1a;执行器&#xff1a; 总结 背景&#xff1a; 目前系统的定时任务主要通过Spring框架自带的Scheduled注…

buuctf [极客大挑战 2019]Havefun1

解题思路&#xff1a; 小习惯 本题先看看源码或者检查一下&#xff0c;可能这是俺的一个小习惯。 源码里面都看到了php的代码 php代码解析&#xff1a; $cat$_GET[cat]; echo $cat; if($catdog){ echo Syc{cat_cat_cat_cat}; } 1.$ca…

新手村之SQL——分组与子查询

1.GROUP BY GROUP BY 函数就是 SQL 中用来实现分组的函数&#xff0c;其用于结合聚合函数&#xff0c;能根据给定数据列的每个成员对查询结果进行分组统计&#xff0c;最终得到一个分组汇总表。 mysql> SELECT country, COUNT(country) AS teacher_count-> FROM teacher…

T-SQL的多表查询

前面讲述过的所有查询都是基于单个数据库表的查询。如果一个查询需要对多个表进行操作&#xff0c;就称为联接查询&#xff0c;联接查询的结果集或结果称为表之间的联接。 联接查询实际上是通过各个表之间共同列的关联性来查询数据的&#xff0c;它是关系数据库查询最主要的特征…

听GPT 讲Rust源代码--src/tools(7)

File: rust/src/tools/rust-analyzer/crates/ide/src/inlay_hints/chaining.rs 在Rust源代码中&#xff0c;rust-analyzer/crates/ide/src/inlay_hints/chaining.rs这个文件的作用是生成Rust代码中的链式调用提示。 具体来说&#xff0c;当我们使用链式调用时&#xff0c;例如A…

C语言——深入理解指针(5)

目录 1. sizeof和strlen的对比 1.1 sizeof 1.2 strlen 1.3 sizeof和strlen 的对比 2. 数据和指针题解析 2.1 一维数组 2.2 字符数组 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2,6 2.3 二维数组 3. 指针运算题解析 3.1 例1 3.2 例2 3.3 例3 3.4 例4 3.5 例5 3.6 例…

python中的进制转换和原码,反码,补码

python中的进制转换和原码,反码,补码 计算机文件大小单位 b bit 位(比特) B Byte 字节 1Byte 8 bit #一个字节等于8位 可以简写成 1B 8b 1KB 1024B 1MB 1024KB 1GB 1024MB 1TB 1024GB 1PB 1024TB 1EB 1024PB 进制分类 二进制:由2个数字组成,有0 和 1 pyth…

如何无线桥接路由器,让你的网络覆盖范围变大,做到网络信号无缝连接

你是否希望通过在两个路由器之间创建无线网桥(网络桥接)来扩大网络覆盖范围?好吧,你来对地方了!在当今日益互联的世界,拥有一个强大可靠的网络比以往任何时候都更重要。 无线网桥允许你无线连接两个或多个路由器,有效地扩展网络覆盖范围,并在更大的区域提供无缝的互联…

巧借C++算法实现冒泡排序算法

目录 引言冒泡排序原理具体实现步骤示例代码时间复杂度和稳定性优化可能性结束语 引言 作为计算机专业出身的开发者&#xff0c;以及从事软件开发相关的小伙伴&#xff0c;想必对C语言并不陌生&#xff0c;它是一门非常厉害的编程语言&#xff0c;不仅是基于程序底层的语言&a…

Proteus8.16仿真软件安装图文教程(Proteus 8 Professional)

Proteus8.16 &#x1f527;软件安装包下载链接&#xff1a;&#x1f527;视频教程&#x1f527;1 安装软件解压&#x1f527;2 安装&#x1f527;3 破解&#x1f527;4 汉化 &#x1f527;软件安装包下载链接&#xff1a; Proteus8.16软件下载链接 1、本文关于Proteus8.16 SP…

关于“你对SpringCloud的理解”

看看普通人和高手是如何回答这个问题的&#xff1f; 普通人 Spring Cloud 是一套微服务解决方案 它包括配置中心、RPC 通信、服务注册、服务熔断等组件 高手 Spring Cloud 是一套 分布式微服务的技术解决方案 它提供了快速构建分布式系统的 常用的一些组件 比如说配置…

人工智能与供应链行业融合:开启智能化供应链的新时代

随着人工智能技术的快速发展&#xff0c;供应链行业正迎来革命性变革。本文将探索人工智能在供应链管理中的应用领域&#xff0c;并分析其带来的益处和挑战&#xff0c;展望人工智能与供应链融合的未来发展趋势。 引言 供应链管理是企业运营中不可或缺的重要组成部分。它涵盖了…

Typora免费版安装教程(仅供学习)

目录 一、Typora简介二、Typora安装三、Typora补丁四、Typora使用体验五、总结 一、Typora简介 Typora是一款非常流行的Markdown编辑器&#xff0c;它能够将Markdown文本转化为漂亮的排版&#xff0c;并且支持实时预览。Typora具有简单易用的界面&#xff0c;使得用户可以轻松地…

微机原理9

一、单项选择题(本大题共15小题,每小题3分、共45分。在每小题给出的四个备选项中,选出一个正确的答案,请将选定的答案填涂在答题纸的相应位置上。) 8088 系统的内存最大容量为 16MB. 其地址总线为&#xff08;&#xff09; A. 16 位 B. 20 位 C. 24 位 D. 32 位 2,以CPU为核心…

鸿宇多用户商城user.php RCE漏洞复现

0x01 产品简介 鸿宇多用户商城是一款支持各行业的多商家入驻型电商平台系统,商家版APP,微信商城,小程序及各种主流营销模块应有尽有,是一个功能强大的电子商务平台,旨在为企业和个人提供全面的在线购物解决方案。 0x02 漏洞概述 鸿宇多用户商城 user.php 存在任意命令执行漏洞…

无人机停机坪的主要功能有哪些

随着无人机行业领域的不断完善&#xff0c;无人机停机坪作为一项关键基础设施&#xff0c;正发挥着越来越重要的作用。无人机停机坪也叫无人机机巢、无人机机库、无人机机场。无人机停机坪不仅是无人机的“家”&#xff0c;更是其高效运行的关键环节。让我们一同探索无人机停机…

SQL Sever 基础知识 - 数据筛选(3)

SQL Sever 基础知识 - 四、数据筛选 第7节 BETWEEN7.1 BETWEEN 运算符概述7.2 BETWEEN 示例7.2.1 BETWEEN 与数字示例7.2.2 BETWEEN 和日期示例 第8节 LIKE8.1 LIKE运算符概述8.2 转义字符8.3 LIKE 示例8.3.1 % (百分号) 通配符示例8.3.2 _(下划线)通配符示例8.3.3 [字符列表] …