赞
踩
git代码地址:https://gitee.com/it-sherlock/java-project-template。
介绍SpringCloud,以及搭建环境。
SpringCloud是分布式微服务架构的一站式解决方案,是多种微服务架构落地技术的集合体。俗称:微服务全家桶。
整体架构图:
之前SpringCloud有D版和SpringBoot 1.X版配合搭建,这两个版本已经过时了。
现在使用SpringCloud H版和SpringBoot 2.X版。
SpringCloud的版本命名规则:
SpringBoot和SpringCloud有严格的版本对应,他们之前不同版本可能存在冲突!因此必须严格按照官网来对应。
更详细的版本对应查看网址:http://start.spring.io/actuator/info
之后使用,JSON处理工具:tool.lu 格式化出来:
之后学习的环境搭建版本:
以下红叉的是已经停止更新维护的。
服务注册中心:
服务调用:
服务降级(熔断):
服务网关:
服务配置:
服务总线:
总体上,技术图:
因为使用的是maven环境,就是约定 > 配置 > 编码
。
第一步:创建maven父工程项目,选择maven版本。
第二步:修改整个项目环境的字符编码集,改为UTF-8。
Transparent native-to-ascii conversion的意思是:自动转换ASCII编码。
第三步:注解生效激活。
第四步:java编辑版本选择8版本。
第五步:File Type 过滤,随意设置,这个就是过滤那些像.idea ,.iml等等的这种和代码本身没有直接关联的可以不让他们显示。
第一步:packaging设置为pom,父工程都会设置为pom。
第二步:除了pom,像src文件夹都删除掉。
第三步:配置pom文件相关依赖版本。
<?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.itholmes.springcloud</groupId> <artifactId>cloud2020</artifactId> <version>1.0-SNAPSHOT</version> <!--父工程打包方式一定是pom--> <packaging>pom</packaging> <!--统一管理jar包版本呢--> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <junit.version>4.12</junit.version> <log4j.version>1.2.17</log4j.version> <lombk.version>1.16.18</lombk.version> <mysql.version>8.0.18</mysql.version> <druid.version>1.1.16</druid.version> <mybatis.spring.boot.version>1.3.0</mybatis.spring.boot.version> </properties> <!--dependencyManagement的作用:子模块继承之后,提供的作用:锁定版本+子module不用写groupId和version--> <dependencyManagement> <dependencies> <!--springboot 2.2.2版本--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.2.2.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> <!--spring cloud Hoxton.SR1--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Hoxton.SR1</version> <type>pom</type> <scope>import</scope> </dependency> <!--spring cloud alibaba 2.1.0 RELEASE--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>2.1.0.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> <!--mybatis版本--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>${mybatis.spring.boot.version}</version> </dependency> <!--junit--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> </dependency> <!--log4j--> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>${log4j.version}</version> </dependency> </dependencies> </dependencyManagement> <name>Maven</name> <!-- FIXME change it to the project's website --> <url>http://maven.apache.org/</url> <inceptionYear>2001</inceptionYear> </project>
可以跳过单元测试的按钮:
type-aliases-package可以生命别名!!
mybatis:
mapper-locations: classpath:mapper/*.xml
type-aliases-package: com.itholmes.springcloud.entities # 所有Entity别名类所在包
useGeneratedKeys=“true” 和 keyProperty主键 从而返回值就是主键ID值:
<insert id="create" parameterType="Payment" useGeneratedKeys="true" keyProperty="id">
insert into payment (serial) values (#{serial})
</insert>
第一步:Adding devtools 。
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-devtools -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<version>2.7.0</version>
</dependency>
第二步:Adding plugin。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<!-- <version>2.6.7</version>-->
<configuration>
<!--fork 设置为 true,实际上是会在 maven 编译的时候新创建一个虚拟机执行。这个新创建 JVM 就是这里的 fork。-->
<fork>true</fork>
<addResources>true</addResources>
</configuration>
</plugin>
</plugins>
</build>
第三步:Enabling automatic build。设置idea。
第四步:update the value of。
在pom.xml文件执行快捷键:
第五步:重启idea,这样就会热部署自动化配置了。
启动多个项目的时候,就使用idea的Dashboard。
如何让Run Dashboard显示到idea的下方任务栏中:
第一步:打开父项目对应的.idea目录,找到workspace.xml文件。
第二步:添加配置如下中:
第三步:重启idea就可以了。
一般多个微服务都会公用一个公用模块项目(一般叫做common)。
这个项目存放的一般都是pojo类,Utils工具类等等公共代码。通过maven的install或者deploy的特性,通过GAV添加对应依赖,从本地或者私服来获得该jar包。
Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率。
Hutool是项目中“util”包友好的替代
,它节省了开发人员对项目中公用类和公用工具方法的封装时间
,使开发专注于业务,同时可以最大限度的避免封装不完善带来的bug。
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.6.5</version>
</dependency>
第一步:导入SpringBoot相关依赖。
<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> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> </dependency>
第二步:在Resource目录下,创建application.yml文件。
第三步:在创建对应的SpringBoot启动Main方法。
package com.itholmes.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class OrderMain80 {
public static void main(String[] args) {
SpringApplication.run(OrderMain80.class,args);
}
}
作用:
1、可以获取服务信息
2、用于向consul或者zookeeper作为注册中心的时候提供注册服务(就是提供注册服务的)
可以通过微服务名称,获取注册中心的各种信息。
// DiscoveryClient来自于org.springframework.cloud.client.discovery.DiscoveryClient @Resource private DiscoveryClient discoveryClient; @GetMapping(value = "/payment/discovery") public Object discovery(){ // 获取微服务的名称信息 List<String> services = discoveryClient.getServices(); for (String element : services) { // 日志信息,也会在控制台打印出来 log.info("******element:"+element); } // 获取一个微服务名称下面的所有微服务,毕竟一个微服务名称,可以有多个微服务 List<ServiceInstance> instances = discoveryClient.getInstances("CLOUD-PAYMENT-SERVICE"); for (ServiceInstance instance : instances) { // 日志信息,也会在控制台打印出来 log.info(instance.getServiceId()+"\t"+instance.getHost()+"\t"+instance.getPort()+"\t"+instance.getUri()); } return this.discoveryClient; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。