# clouddemo **Repository Path**: zcat1024/clouddemo ## Basic Information - **Project Name**: clouddemo - **Description**: springcloud项目搭建案例 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: dev_20190716 - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2019-07-16 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README --- typora-root-url: images --- # clouddemo #### 介绍 springcloud项目搭建 #### 软件架构 软件架构说明 #### 安装教程 ### springcloud项目搭建--构建父工程(1) ##### 1、创建一个maven父工程clouddemo 作为基础工程只保留pom.xml文件(注意packaging一定要选择pom) ​ File-->new-->projetc-->maven project ![1](/1.PNG) ##### 2、配置 pom.xml ```xml 4.0.0 com.zdb clouddemo 0.0.1-SNAPSHOT pom my first springcloud project UTF-8 UTF-8 1.8 org.springframework.boot spring-boot-starter-parent 1.5.9.RELEASE ../pom.xml org.springframework.cloud spring-cloud-dependencies Edgware.SR3 pom import org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-devtools runtime true org.projectlombok lombok true ``` (springboot与springcloud版本对应关系可参考 https://www.cnblogs.com/zhuwenjoyce/p/10261079.html>) ### springcloud项目搭建--整合Eureka (2) ##### 1、新建clouddemo-eureka子模块 右击clouddemo工程-->new -->project-->Maven Module 1.1、配置pom.xml文件 ``` 4.0.0 com.zdb clouddemo 0.0.1-SNAPSHOT clouddemo-eureka jar org.springframework.cloud spring-cloud-starter-eureka-server ``` 1.2、创建ClouddemoEurekaApplication启动类 ``` package com.zdb; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; @SpringBootApplication @EnableEurekaServer // 开启Eureka服务 public class ClouddemoEurekaApplication { public static void main(String[] args) { SpringApplication.run(ClouddemoEurekaApplication.class, args); } } ``` 1.3、编写配置文件application.yml ``` spring: profiles: active: dev ``` 1.4、编写配置文件application-dev.yml ```yaml server: port: 10010 # 端口 spring: application: name: clouddemo-eureka-server # 应用名称,会在Eureka中显示 eureka: client: register-with-eureka: false # 是否注册自己的信息到EurekaServer,默认是true fetch-registry: false # 是否拉取其它服务的信息,默认是true service-url: # EurekaServer的地址,现在是自己的地址,如果是集群,需要加上其它Server的地址。 defaultZone: http://127.0.0.1:${server.port}/eureka #安全停止服务 endpoints: shutdown: enabled: true sensitive: false ``` 1.5、测试 暂无任何服务注册 ![5](/5.PNG) ##### 2、创建clouddemo-cli子模块注册到eureka服务 右击clouddemo工程-->new -->project-->Maven Module 2.1、pom.xml配置 ``` 4.0.0 com.zdb clouddemo 0.0.1-SNAPSHOT clouddemo-cli clouddemo-client org.springframework.cloud spring-cloud-starter-eureka org.mybatis.spring.boot mybatis-spring-boot-starter 1.3.2 mysql mysql-connector-java 5.1.20 tk.mybatis mapper-spring-boot-starter 2.0.2 org.springframework.cloud spring-cloud-starter-openfeign ``` 2.2、新建启动类ClouddemoCliApplication ```java package com.zdb; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication @EnableEurekaClient // 注册到eureka服务 public class ClouddemoCliApplication { public static void main(String[] args) { SpringApplication.run(ClouddemoCliApplication.class, args); } } ``` 2.3、控制器类 HelloApi ```java package com.zdb.api; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("hello") public class HelloApi { @GetMapping("index") public Object index() { return "clouddemo-cli"; } } ``` 2.4、配置文件application.yml ```yaml spring: profiles: active: dev ``` 2.5、配置文件application-dev.yml ```yaml server: port: 10011 spring: datasource: url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8 username: root password: 123456 driver-class-name: com.mysql.jdbc.Driver application: name: clouddemo-cli eureka: client: service-url: # EurekaServer地址 defaultZone: http://127.0.0.1:10010/eureka instance: prefer-ip-address: true # 当调用getHostname获取实例的hostname时,返回ip而不是host名称 ip-address: 127.0.0.1 # 指定自己的ip信息,不指定的话会自己寻找 ``` 2.6、配置文件application-prod.yml ```yaml server: port: 10011 spring: datasource: url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8 username: root password: 123456 driver-class-name: com.mysql.jdbc.Driver application: name: clouddemo-cli eureka: client: service-url: # EurekaServer地址 defaultZone: http://127.0.0.1:10010/eureka instance: prefer-ip-address: true # 当调用getHostname获取实例的hostname时,返回ip而不是host名称 ip-address: 127.0.0.1 # 指定自己的ip信息,不指定的话会自己寻找 ``` ##### 3、运行ClouddemoCliApplication,浏览器访问 ![2](/2.PNG) ##### 4、刷新 , 服务clouddemo-cli成功注册 ![6](/6.PNG) ### springcloud项目搭建--整合swagger(3) ##### 1、在父工程clouddemo的pom.xml中添加添加swagger2相关依赖 ``` io.springfox springfox-swagger2 2.5.0 io.springfox springfox-swagger-ui 2.5.0 ``` 完整pom ``` 4.0.0 com.zdb clouddemo 0.0.1-SNAPSHOT pom my first springcloud project clouddemo-cli UTF-8 UTF-8 1.8 org.springframework.boot spring-boot-starter-parent 1.5.9.RELEASE ../pom.xml org.springframework.cloud spring-cloud-dependencies Edgware.SR3 pom import org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-devtools runtime true org.projectlombok lombok true io.springfox springfox-swagger2 2.5.0 io.springfox springfox-swagger-ui 2.5.0 org.springframework.boot spring-boot-maven-plugin ``` ##### 2、在子模块clouddemo-cli中新建配置类SwaggerConfig ```java package com.zdb.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.service.ApiInfo; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.swagger2.annotations.EnableSwagger2; @Configuration @EnableSwagger2 public class SwaggerConfig { @Bean public Docket createRestApi() { return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()) .select().apis(RequestHandlerSelectors.basePackage("com")) // 扫描com包 .paths(PathSelectors.any()).build(); } private ApiInfo apiInfo() { return new ApiInfoBuilder().title("ZDB API Doc") .description("This is a restful api document of Zdb.") .version("1.0").build(); } } ``` ##### 3、修改子模块clouddemo-cli的HelloApi ```java package com.zdb.api; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("hello") @Api(tags = "Hello模块") public class HelloApi { @GetMapping("index") @ApiOperation(value = "swagger测试") @ApiImplicitParams({ @ApiImplicitParam(paramType = "query", name = "name", dataType = "String", required = false, value = "测试参数", defaultValue = "swwager") }) public Object index(String name) { return "clouddemo-cli " + name; } } ``` ##### 4、浏览器访问 ![3](/3.PNG) 测试结果 ![4](/4.PNG) ### springcloud项目搭建--整合JPA(3) ##### 1、新建子工程 clouddemo-bean为整合jpa做准备 1.1、引入jpa相关依赖 ``` 4.0.0 com.zdb clouddemo 0.0.1-SNAPSHOT clouddemo-bean org.springframework.boot spring-boot-starter-data-jpa ``` 1.2、创建User.java ```java package com.zdb.bean; import java.util.Date; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; import lombok.Data; import org.hibernate.annotations.GenericGenerator; @Data @Entity @Table(name = "user") public class User { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Integer id; private String username; private String password; private int sex; @Column(name = "nick_name") private String nickName; @Column(name = "register_date") private Date registerDate; } ``` ##### 2、新建子工程 clouddemo-jpa 2.1、pom.xml文件配置 ``` 4.0.0 com.zdb clouddemo 0.0.1-SNAPSHOT ../pom.xml clouddemo-jpa jar com.zdb clouddemo-bean 0.0.1-SNAPSHOT org.springframework.cloud spring-cloud-starter-eureka mysql mysql-connector-java 5.1.20 ``` 2.2、创建ClouddemoJpaApplication启动类 ``` package com.zdb; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; @SpringBootApplication @EnableEurekaClient // 注册到eureka服务 public class ClouddemoJpaApplication { public static void main(String[] args) { SpringApplication.run(ClouddemoJpaApplication.class, args); } } ``` 2.3、新建UserRepository接口 ``` package com.zdb.repository; import org.springframework.data.jpa.repository.JpaRepository; import com.zdb.bean.User; public interface UserRepository extends JpaRepository{ } ``` 2.4、 新建UserApi控制器类 ```java package com.zdb.api; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.zdb.bean.User; import com.zdb.repository.UserRepository; @RestController @RequestMapping("user") public class UserApi { @Autowired private UserRepository userRepository; @GetMapping("fingUserById/{id}") public User fingUserById(@PathVariable Integer id) { return userRepository.findOne(id); } } ``` 2.5、配置application.yml文件 ``` spring: profiles: active: dev ``` 2.6、配置application-dev.yml文件 ``` server: port: 10012 spring: datasource: url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8 username: root password: 123456 driver-class-name: com.mysql.jdbc.Driver application: name: clouddemo-jpa-a jpa: hibernate: ddl-auto: update naming: physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl show-sql: true properties: hibernate: format_sql: true eureka: client: service-url: # EurekaServer地址 defaultZone: http://127.0.0.1:10010/eureka instance: prefer-ip-address: true # 当调用getHostname获取实例的hostname时,返回ip而不是host名称 ip-address: 127.0.0.1 # 指定自己的ip信息,不指定的话会自己寻找 main: allow-bean-definition-overriding: true #当遇到同样名字的时候,是否允许覆盖注册 ``` ##### 3、浏览器访问 **** ![7](C:\Users\ZDB\Pictures\springcloud\7.PNG) ### springcloud项目搭建--整合feign(4) 4.1、在子模块clouddemo-cli引入clouddemo-bean与feign相关依赖 ```xml com.zdb clouddemo-bean 0.0.1-SNAPSHOT org.springframework.cloud spring-cloud-starter-openfeign ``` 4.2、在子模块clouddemo-cli中新建FeignClients接口 ```jva package com.zdb.feign; import org.springframework.cloud.netflix.feign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import com.zdb.bean.User; @FeignClient("clouddemo-jpa-a") public interface FeignClients { @GetMapping("user/fingUserById/{id}") public User findUserByid(@PathVariable("id") Integer id); } ``` 4.3、修改子模块clouddemo-cli的启动类 ``` package com.zdb; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; import org.springframework.cloud.netflix.feign.EnableFeignClients; @SpringBootApplication @EnableEurekaClient // 注册到eureka服务 @EnableFeignClients // 注册为feign客户端 public class ClouddemoCliApplication { public static void main(String[] args) { SpringApplication.run(ClouddemoCliApplication.class, args); } } ``` 4.4、新建UserAip、UserService、FeignClients ```java package com.zdb.api; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.fasterxml.jackson.core.sym.Name; import com.zdb.bean.User; import com.zdb.service.UserService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; @Api(value = "用户模块", tags = "用户模块") @RestController @RequestMapping("user") public class UserApi { @Autowired private UserService UserService; @GetMapping("/findUserById/{id}") @ApiOperation("查询用户") public User findUserById(@PathVariable Integer id) { return UserService.findOneUser(id); } } ``` ```java package com.zdb.service; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.zdb.bean.User; import com.zdb.feign.FeignClients; @Service public class UserService { @Autowired private FeignClients feignClients; public User findOneUser(Integer id) { return feignClients.findUserByid(id); } } ``` ```java package com.zdb.feign; import org.springframework.cloud.netflix.feign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import com.zdb.bean.User; @FeignClient("clouddemo-jpa-a") public interface FeignClients { @GetMapping("user/fingUserById/{id}") public User findUserByid(@PathVariable("id") Integer id); } ``` 5、swageer测试,也可以直接浏览器访问 ![8](/8.PNG) #### 使用说明 1. xxxx 2. xxxx 3. xxxx #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request #### 码云特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. 码云官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解码云上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是码云最有价值开源项目,是码云综合评定出的优秀开源项目 5. 码云官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. 码云封面人物是一档用来展示码云会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)