# 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

##### 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、测试 暂无任何服务注册

##### 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,浏览器访问

##### 4、刷新 , 服务clouddemo-cli成功注册

### 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、浏览器访问

测试结果

### 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、浏览器访问 ****

### 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测试,也可以直接浏览器访问

#### 使用说明
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/)