Spring boot由于其
1、易于开发和维护。2、单个微服务启动快。3、局部修改部署容易。4、技术栈不受语言限制等优点受到越来越多公司的重视。spring-boot还集成了许多关于微服务开发的框架(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线,一次性令牌,全局锁,领导选举,分布式 会话,群集状态),使我们部署微服务免去了繁琐的配置。
下面我们来学习利用spring-boot搭建电商项目。
Spring Boot 2.0.0-SNAPSHOT 要求 Java 8 和 Spring Framework 5.0.2以上,Maven 3.2 以上或者Gradle 4。
本文使用 Spring Boot 2.0.0-SNAPSHOT Java9 和 Spring Framework 5.0.2.RELEASE以上,Maven 3.3.9。开发工具使用sping官方提供的spring suit tool 3.9.1(STS)。
一、Spring多模块化项目的搭建
首先我们需要建立一个Spring-boot的父项目,一个多模块项目通过一个父POM 引用一个或多个子模块来定义。
<!-- 定义spring-cloud的路径 --> <groupId>com.hzt.cloud</groupId> <artifactId>esupermarket</artifactId> <!-- 自定义父项目的版本 --> <version>1.0.0</version> <!-- 假如为父项目,打包方式必须为pom --> <packaging>pom</packaging>
并且删除文件根目录下所有文件,只留下pom.xml即可。
<!-- 使当前项目继承spring-boot 2.0 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.0.RELEASE</version> </parent>
然后定义我们所需要的spring-boot的版本,这样我们项目就是使用的spring-boot 2.0版本了。
<!-- 定义继承此父类的子模块,module中填写的为子模块的 artifactId--> <modules> <module>eureka-server</module> <module>eureka-server1</module> </modules>
同时插入我们即将定义的子模块,这样子模块既可以使用父模块中引入的依赖。
<dependencyManagement> <dependencies> <!-- 加入spring-boot 关于web的依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 统一依赖管理 --> <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>
加入spring-boot关于web以及统一依赖管理的模块.
<!-- 仓库管理 --> <repositories> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories>
这样我们父类模块的pom即搭建成功.
二、子模块 EurekaServer服务的搭建
右键父模块 new -> mavenmodule ,创建一个子模块
1、pom.xml的配置
<modelVersion>4.0.0</modelVersion> <!-- 项目名 , 不需要groupId和name标签--> <artifactId>eureka-server1</artifactId> <!-- 打包方式 --> <packaging>jar</packaging> <!-- 继承的父类 , 为父模块 --> <parent> <groupId>com.hzt.cloud</groupId> <artifactId>esupermarket</artifactId> <!-- 版本为父类定义的version标签 --> <version>1.0.0</version> <relativePath/> </parent> <dependencies> <!-- 引入关于 eureka-server的依赖 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency>
<!-- 用于注册中心访问账号认证 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency> </dependencies>
其中,spring-boot 2.0和2.0以前引入 eureka-server的artifactId有所区别。
2、启动类
@SpringBootApplication//启动注解,表示此为spring-boot的一个入口类 @EnableEurekaServer//此行注解代表为一个服务注册组件,此注解仅适用于eureka //@EnableDiscoveryClient//此注解同上,但是适用于其他服务注册主件 public class EurekaServerApplication { public static void main(String[] args) { SpringApplication.run(EurekaServerApplication.class, args); } }
我们可以根据不同的服务发现方式定义不同的注解。@EnableDiscoveryClient注解可以支持其他的服务发现方式。
3、application.yml配置文件
server:
#配置eurekaServer的端口号
port: 8761
security:
basic:
#代表开启账号密码认证,登录eurekaServer时需要输入账号密码
enabled: true
user:
name: root
password: 123
eureka:
client:
service-url:
#代表注册到eureka服务端的地址
defaultZone: http://root:123@127.0.0.1:8761/eureka
#该服务为注册中心,增加此行代表不在注册中心注册自己
register-with-eureka: false
#由于注册中心呢的职责是维护实例,为FALSE代表其不用去检索服务
fetch-registry: false
#配置主机名
instance:
hostname: peer1
#配置服务名
spring:
application:
name: eureka-server
同理 , 我们可以配置一个eurekaServer1搭建eurekaServer的高可用集群。其中peer1为我本地机器上配置的负载地址,指向www.peer1.com。启动服务器。