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>1.5.9.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
#配置服务名
security:
basic:
#代表开启账号密码认证
enabled: true
user:
name: root
password: 123
同理 , 我们可以配置一个eurekaServer1搭建eurekaServer的高可用集群。其中peer1为我本地机器上配置的负载地址,指向www.peer1.com。启动服务器。