1.整体结构
其中
aigou_basic_parent:公共的抽取
aigou_basic_util:公共工具的抽取
aigou_eureka_7001:注册中心
aigou_plat_parent:平台管理
aigou_plat_interface:平台接口
aigou_plat_service:平台服务
aigou_zuul_9527:网关服务
项目流程:
1.需求收集
2.需求分析
3.需求设计
4.项目设计
5.迭代开发
6.测试
7.上线
2.aigou_parent的配置
只配置pom.xml代码如下
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Finchley.SR1</spring-cloud.version>
<springboot.version>2.0.5.RELEASE</springboot.version>
</properties>
<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>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${springboot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
3.注册中心的配置
3.1首先引入依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<!--eureka的服务依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
3.2配置文件application.yml的配置
server:
port: 7001
eureka:
instance:
hostname: eureka-7001.com
client:
fetch-registry: false #是否注册到eureka
register-with-eureka: false #是否从服务获取注册信息
service-url:
defaultZone: http://eureka-7001.com:7001/eureka/ #这里是另一个中心的地址
3.3启动类
@SpringBootApplication
@EnableEurekaServer
public class Enreka7001Application {
public static void main(String[] args) {
SpringApplication.run(Enreka7001Application.class);
}
}
4.公共工具的抽取
定义一个AjaxResult方便测试数据
public class AJaxResult {
//是否成功
private boolean success=true;
//返回提示信息
private String msg="登录成功";
//对象值,在我们返回前台数据时方便返回一个对象
private Object object;
//向外返回AJaxResult对象
public static AJaxResult me(){
return new AJaxResult();
}
public boolean isSuccess() {
return success;
}
//在每个set方法返回当前对象,方便链式编程
public AJaxResult setSuccess(boolean success) {
this.success = success;
return this;
}
public String getMsg() {
return msg;
}
public AJaxResult setMsg(String msg) {
this.msg = msg;
return this;
}
public Object getObject() {
return object;
}
public AJaxResult setObject(Object object) {
this.object = object;
return this;
}
@Override
public String toString() {
return "AJaxResult{" +
"success=" + success +
", msg='" + msg + '\'' +
", object=" + object +
'}';
}
}
5.平台接口
5.1其中pom.xml只需引入对公共工具的依赖即可
<dependencies>
<dependency>
<groupId>cn.itsource.aigou</groupId>
<artifactId>aigou_basic_util</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
5.2定义domain类方便测试‘
public class User {
private String name;
private String password;
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", password='" + password + '\'' +
'}';
}
public User(String name, String password) {
this.name = name;
this.password = password;
}
public User() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
6.平台服务的搭建
6.1pom.xml的配置
<dependencies>
<dependency>
<artifactId>aigou_plat_interface</artifactId>
<groupId>cn.itsource.aigou</groupId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--配置中心支持-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<!-- Eureka 客户端依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
</dependencies
6.2配置文件application.yml
server:
port: 8001
spring:
application:
name: USER-PROVIDER
eureka:
client:
service-url:
defaultZone: http://eureka-7001.com:7001/eureka #告诉服务提供者要把服务注册到哪儿 #单机环境
instance:
prefer-ip-address: true #显示客户端真实ip
6.3启动类
@SpringBootApplication
@EnableEurekaClient
public class Service8001Application {
public static void main(String[] args) {
SpringApplication.run(Service8001Application.class);
}
}
6.4controller层的代码
@RestController
@RequestMapping("/user")
public class UserController {
//post跳转
@RequestMapping(value = "/login",method = RequestMethod.POST)
public AJaxResult login(@RequestBody User user){
if(user!=null && !StringUtils.isEmpty(user.getName()) && !StringUtils.isEmpty(user.getPassword())){
String name = user.getName();
String password = user.getPassword();
if("admin".equals(name)&&"123".equals(password)){
return AJaxResult.me().setMsg("登录成功").setSuccess(true);
}
}
return AJaxResult.me().setSuccess(false).setMsg("登录失败");
}
//get跳转
@RequestMapping(value = "/login2",method = RequestMethod.GET)
public AJaxResult login2(){
return AJaxResult.me().setMsg("登录失败是get请求").setSuccess(false);
}
}
如此就可以使用接口测试工具postman进行数据的测试
7.服务网关zuul的配置
7.1引入依赖(其中配置了支持对swagger的支持,但增加了耦合度)
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<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-netflix-zuul</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
</dependencies>
7.2application.yml的配置
server:
port: 9527
spring:
application:
name: AIGOU-ZUUL-GATEWAY
eureka:
client:
service-url:
defaultZone: http://localhost:7001/eureka
instance:
instance-id: gateway-9527.com
prefer-ip-address: true
zuul:
routes:
aigouUser.serviceId: user-provider
aigouUser.path: /user/**
ignored-services: "*"
prefix: /aigou
7.3启动类
@SpringBootApplication
@EnableZuulProxy
@EnableEurekaClient
public class Zuul9527Application {
public static void main(String[] args) {
SpringApplication.run(Zuul9527Application.class);
}
}
7.4对swagger的支持定义两个类
7.4.1 SwaggerConfig 类
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo());
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("分布式购物系统")
.description("购物系统接口文档说明")
.termsOfServiceUrl("http://localhost:8081")
.contact(new Contact("wbtest", "", "[email protected]"))
.version("1.0")
.build();
}
}
7.4.2DocumentationConfig 类
@Component
@Primary
public class DocumentationConfig implements SwaggerResourcesProvider {
@Override
public List<SwaggerResource> get() {
List resources = new ArrayList<>();
//aigou网关前缀,user网关路径 ;swagger的路径 ,以后增加了接口就在这配置就ok
resources.add(swaggerResource("用户系统", "/aigou/user/v2/api-docs", "2.0"));
resources.add(swaggerResource("商品系统", "/aigou/product/v2/api-docs", "2.0"));
resources.add(swaggerResource("基础系统", "/aigou/common/v2/api-docs", "2.0"));
return resources;
}
private SwaggerResource swaggerResource(String name, String location, String version) {
SwaggerResource swaggerResource = new SwaggerResource();
swaggerResource.setName(name);
swaggerResource.setLocation(location);
swaggerResource.setSwaggerVersion(version);
return swaggerResource;
}
}
最后使用路径测试:http://127.0.0.1:9527/swagger-ui.html即可