springcloud微服务后台框架架构搭建
1.顶级父类搭建
IDE-idea
jdk,maven都是1.8版本
1.新建一个普通的maven项目
新建项目流程类似,这里截图一次,有其他操作的另外截图
这里先不在pom.xml中导入依赖,结构搭建起来了再根据需求导入对应的依赖
2.aigou_eureka_server7001
公共通用子模块以及平台子模块的搭建
就得到如下层级结构
得到如下层次结构
这样项目结构就搭建好了
顶级父类pom.xml配置文件
<!--顶级父类的pom配置-->
<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>
<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>
3.aigou2_eureka_server_7001注册中心的配置
eureka的pom.xml
<dependencies>
<!--web的依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--test的依赖-->
<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>
配置application.yml
server:
port: 7001
eureka:
instance:
hostname: eureka-7001.com
client:
fetch-registry: false #是否注册到eureka
register-with-eureka: false #是否从服务获取注册信息
service-url:
defaultZone: http://www.eureka-7001.com:7001/eureka/ #这里是另一个中心的地址
创建启动类
@SpringBootApplication
@EnableEurekaServer //eureka注册中心的服务端
public class aigou_EurekaApplication7001 {
public static void main(String[] args) {
SpringApplication.run(aigou_EurekaApplication7001.class);
}
}
4.返回数据AjaxResult的创建
这个数据结构比较重要
package cn.itsource.aigou;
public class AjaxResult {
private Boolean success =true; //操作是否成功
private String msg="操作成功"; //默认信息
private Object object; //返回的数据,以对象的形式返回
public AjaxResult(Boolean success, String msg, Object object) {
this.success = success;
this.msg = msg;
this.object = object;
}
public AjaxResult() {
}
//准备一个静态方法me(),
public static AjaxResult me(){
return new AjaxResult();
}
public Boolean getSuccess() {
return success;
}
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;
}
//设置对象,返回自己,return this,为链式编程做准备
public AjaxResult setObject(Object object) {
this.object = object;
return this;
}
@Override
public String toString() {
return "AjaxResult{" +
"success=" + success +
", msg='" + msg + '\'' +
", object=" + object +
'}';
}
}
以上是写在aigou_basic_parent中的子模块aigou_basic_util下的src/java下
5.swagger接口文档提供
微服务一般都前后端分离,因此,后端写好接口会应当让前台能够随时查看,为了后期项目合成统一简单,但是通过swagger的方式,有代码侵入的问题,但是影响不大
swagger在zuul中需要配置,在某个自己的服务中也需要配置
下面是在zuul中的swagger配置
pom.xm;配置
<dependencies>
<dependency>
<groupId>cn.itsource.aigou</groupId>
<artifactId>aigou_basic_util</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!--zuul的依赖-->
<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>
<!--zuul网关-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
<!--网关中导入swagger的依赖-->
<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>
application.yml
server:
port: 9527 #zuul网关的端口
spring:
application:
name: AIGOU-ZUUL-GATEWAY #zuul网关服务的名字
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 #服务id
aigouUser.path: /user/** #服务路径
ignored-services: "*"
prefix: /aigou #前缀
启动类
@SpringBootApplication
@EnableEurekaClient
@EnableZuulProxy
public class ZuulApplication_9527 {
public static void main(String[] args) {
SpringApplication.run(ZuulApplication_9527.class);
}
}
两个配置类–>
DocumentationConfig类
@Component
@Primary
public class DocumentationConfig implements SwaggerResourcesProvider {
@Override
public List<SwaggerResource> get() {
List resources = new ArrayList<>();
//aigou网关前缀,employee网关路径 ;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;
}
}
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();
}
}
网关中配置好了,每个服务在自己的配置中心依照类似的配置配置就好了
得到如下结果
其自己服务中配置得到的结果
6.postman的使用介绍
postman是一款,接口测试工具
根据AjaxResult和逻辑判断得到如下结果
先这样!tata