Hoxton.SR10
版本:Hoxton.SR10
版本的SpringCloud所支持的 2.3.8.RELEASE
:SpringBoot2.3.8.RELEASE
所推荐的 JDK8和Maven3.5.4(3.3+)SpringCloud-Hoxton.SR10
和 SpringBoot2.3.8.RELEASE
官方PDF文档首先我们先来搭建一个聚合项目也就是一个空到只有 pom.xml
文件的maven项目,pom.xml文件内容
<?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>
<!-- GAV 坐标 -->
<groupId>code.xiaohh</groupId>
<artifactId>cloud-alibaba-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 打包方式 -->
<packaging>pom</packaging>
<properties>
<!-- Maven 项目属性 -->
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- 统一依赖管理 -->
<spring.boot.version>2.3.8.RELEASE</spring.boot.version>
<spring.cloud.version>Hoxton.SR10</spring.cloud.version>
<spring.cloud.alibaba.version>2.2.5.RELEASE</spring.cloud.alibaba.version>
<mybatisplus.version>3.4.2</mybatisplus.version>
<lombok.version>1.18.18</lombok.version>
</properties>
<!-- 统一依赖管理 -->
<dependencyManagement>
<dependencies>
<!-- SpringBoot 相关依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring.boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- SpringCloud相关依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring.cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- cloud alibaba -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring.cloud.alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- mybatis-plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatisplus.version}</version>
<exclusions>
<exclusion>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- lombok 相关依赖 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
然后建立一个 cloud-alibaba-common 模块作为一个统一类的管理:
然后接下来的步骤和创建maven项目一样,其中pom.xml文件:
<?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">
<parent>
<artifactId>cloud-alibaba-demo</artifactId>
<groupId>code.xiaohh</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>cloud-alibaba-common</artifactId>
<!-- 打包方式 -->
<packaging>jar</packaging>
<properties>
<!-- Maven 项目属性 -->
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!-- openfeign -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!-- mybatis plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
</dependency>
<!-- commons lang -->
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
</dependencies>
</project>
其中的代码都是一些公用的工具类,因为不想让文档过于臃肿,待会会提交到git仓库
创建 cloud-alibaba-payment
支付模块,pom.xml文件:
<?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">
<parent>
<artifactId>cloud-alibaba-demo</artifactId>
<groupId>code.xiaohh</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>cloud-alibaba-payment</artifactId>
<!-- 打包方式 -->
<packaging>jar</packaging>
<properties>
<!-- Maven 项目属性 -->
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- 共有依赖 -->
<dependency>
<groupId>code.xiaohh</groupId>
<artifactId>cloud-alibaba-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- SpringMVC -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 健康检查 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- nacos 注册中心 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- nacos 配置中心 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<!-- SpringBoot 项目编译成可执行 jar 包的插件 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
bootstrap.yml:
spring:
cloud:
nacos:
discovery: # 注册中心
server-addr: 192.168.1.230:8848 #请更换成自己的nacos地址
config: # 配置中心
server-addr: 192.168.1.230:8848 #请更换成自己的nacos地址
file-extension: yml # 配置中心文件的后缀
application.yml:
server:
port: 2020 # 服务器端口号
spring:
application:
name: cloud-alibaba-payment # 应用名,也就是注册到注册中心的名字
datasource: # 数据库配置
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.1.230:3306/cloud_payment?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
username: root
password: root
profiles:
active: dev # 当前处于开发环境
mybatis-plus: # mybatis plus 配置
mapper-locations: classpath:mapper/payment/*.xml # mapper 文件配置
type-aliases-package: code.xiaohh.cloudalibaba.common.entities # entities 的别名都在哪个包下
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 设置打印SQL语句
PaymentApplication.java:
package code.xiaohh.cloudalibaba.payment;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
/**
* <p>
* 支付模块启动类
* </p>
*
* @author XiaoHH
* @version 1.0
* @date 2021-04-10 星期六 14:53:51
* @file PaymentApplication.java
*/
@EnableDiscoveryClient // 启用注册中心
@EnableFeignClients(basePackages = "code.xiaohh.cloudalibaba.common.feigns") // 启用远程调用
@SpringBootApplication
public class PaymentApplication {
public static void main(String[] args) {
// 启动支付模块
SpringApplication.run(PaymentApplication.class, args);
System.out.println("^V^ 支付模块启动成功 ^V^\n" +
"/-\\ /-\\ /-\\ /-\\ /-\\ /-\\\n" +
" X i a o H H\n" +
"\\-/ \\-/ \\-/ \\-/ \\-/ \\-/");
}
}
payment数据库建库建表语句:
DROP DATABASE IF EXISTS `cloud_payment`;
CREATE DATABASE `cloud_payment`;
USE `cloud_payment`;
CREATE TABLE `payment` (
`payment_id` BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '支付id',
`serial` VARCHAR(50) NOT NULL COMMENT '支付流水号'
) COMMENT '支付表';
接下来的代码我们用 renren-generator
的代码生成器生成以下,其实也就是SpringBoot的SSM项目的代码,可以查看我的文章SpringBoot搭建SSM项目,点击这里下载代码生成器,代码生成器步骤请自己去看人家的官方微信,首先添加在数据库当中添加一条数据看看效果:
添加成功,SQL语句也成功发送:
数据库当中:
同时我们生成订单模块的微服务,代码基本上相同,不同的地方:
application.yml数据库连接的url配置和应用名端口号(仅仅只列出了不同的地方):
server:
port: 2030 # 服务器端口号
spring:
application:
name: cloud-alibaba-order # 应用名,也就是注册到注册中心的名字
datasource:
url: jdbc:mysql://192.168.1.230:3306/cloud_order?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
order数据库建库建表语句:
DROP DATABASE IF EXISTS `cloud_order`;
CREATE DATABASE `cloud_order`;
USE `cloud_order`;
CREATE TABLE `order` (
`order_id` BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '订单id',
`order_number` VARCHAR(50) NOT NULL COMMENT '订单号'
) COMMENT '订单表';
同样用代码生成器生成代码,然后我们来到nacos服务列表,可以看到nacos服务注册是成功的
然后我们来试试注册中心,注册中心配置读取的规则如下:
${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
# 应用名-当前环境.配置中心文件的后缀
那么根据 bootstrap.yml
和 application.yml
的配置则:
cloud-alibaba-order
模块的配置名为 cloud-alibaba-order-dev.yml
cloud-alibaba-payment
模块的配置名为 cloud-alibaba-payment-dev.yml
现在去nacos配置中心添加配置:
订单服务配置:
支付模块配置:
查看配置号的配置
重启之后可以发现两个服务分别在 8080 和 8090 启动成功
根据SpringCloud的架构图我们还需要一个服务网关来路由将请求推送到指定服务:
我们再建立一个 cloud-alibaba-gateway
来作为服务网关
pom.xml:
<?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">
<parent>
<artifactId>cloud-alibaba-demo</artifactId>
<groupId>code.xiaohh</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>cloud-alibaba-gateway</artifactId>
<!-- 打包方式 -->
<packaging>jar</packaging>
<properties>
<!-- Maven 项目属性 -->
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- 网关服务 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!-- nacos 注册中心 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- nacos 配置中心 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<!-- SpringBoot 项目编译成可执行 jar 包的插件 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
bootstrap.yml:
spring:
cloud:
nacos:
discovery: # 注册中心
server-addr: 192.168.1.230:8848 #请更换成自己的nacos地址
config: # 配置中心
server-addr: 192.168.1.230:8848 #请更换成自己的nacos地址
file-extension: yml # 配置中心文件的后缀
application.yml:
server:
port: 80 # 服务器端口号
spring:
application:
name: cloud-alibaba-gateway # 应用名,也就是注册到注册中心的名字
profiles:
active: dev # 当前处于开发环境
cloud:
gateway: # 网关配置
routes: # 路由配置
# 订单服务的路由
- id: cloud-alibaba-order-route # 单个路由的id
uri: lb://cloud-alibaba-order # 路由条件满足后跳转到这个服务
predicates:
- Path=/api/order/** # 断言,当请求url满足这个路径要求时路由
filters:
- RewritePath=/api/(?<segment>.*),/$\{segment} # 路径重写,确保不会404
#支付服务的路由
- id: cloud-alibaba-payment-route # 单个路由的id
uri: lb://cloud-alibaba-payment # 路由条件满足后跳转到这个服务
predicates:
- Path=/api/payment/** # 断言,当请求url满足这个路径要求时路由
filters:
- RewritePath=/api/(?<segment>.*),/$\{segment} # 路径重写,确保不会404
GatewayApplication.java:
package code.xiaohh.cloudalibaba.gateway;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
/**
* <p>
* 网关模块启动类
* </p>
*
* @author XiaoHH
* @version 1.0
* @date 2021-04-10 星期六 16:42:08
* @file GatewayApplication.java
*/
@EnableDiscoveryClient
@SpringBootApplication
public class GatewayApplication {
public static void main(String[] args) {
// 启动网关模块
SpringApplication.run(GatewayApplication.class, args);
System.out.println("^V^ 网关模块启动成功 ^V^\n" +
"/-\\ /-\\ /-\\ /-\\ /-\\ /-\\\n" +
" X i a o H H\n" +
"\\-/ \\-/ \\-/ \\-/ \\-/ \\-/");
}
}
好的,网关配置好了,现在我们来测试以下:
根据路径重写规则发送获取订单id为1的请求:
http://127.0.0.1/api/order/order/info/1
可以看到请求的是网关的80端口,并且转发到订单服务了,订单服务打印SQL语句:
再来测试支付模块:
http://127.0.0.1/api/payment/payment/info/1
同样请求成功:
支付同样的也打印了SQL语句:
昨天刚学了html的一些内容,就迫不及待的想做个京东上面的搜索条,结果做是做出...
1.ajax跨域传递值是所需要的回传的类型为jsonp $.ajax({url: "http://.......",t...
文章目录 前言 本周最重要的五件事情 本周搞砸的四件事情 本周的四个启发 前言 ...
在项目开始之前我们可以先去了解一下IConfiguration接口,.Net Core Web应用程序...
2 月 18 日消息 据外媒 Windowslatest 报道,在预览版本中发现的参考资料表明,...
首先插件配备好了,写一个HTML测试一下 首先创建一个文件夹,创建一个HTML 文件...
IT之家2月18日消息外媒 Windows Latest 报道,微软正在与谷歌合作进行一项新的改...
JSP spring boot / cloud 使用filter防止XSS 一.前言 XSS(跨站脚本攻击) 跨站脚...
第一课趣味二进制——修改植物大战僵尸数据 任务介绍 学习目标 知识需求 需求工...
一.前言 .NET Core 是一个通用开发平台,由 Microsoft 和 GitHub 上的 .NET 社区...