From 0004596d6f11a33125894202ff22dea6a89a9062 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BD=97=E7=A5=A5?= <1366971433@qq.com> Date: Mon, 14 Jan 2019 17:59:46 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9Espring=20cloud=E7=94=A8?= =?UTF-8?q?=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- libraries/jackson-samples/pom.xml | 45 ++++++++++++ .../main/java/com/heibaiying/bean/User.java | 25 +++++++ .../com/heibaiying/jackson/JacksonUtils.java | 71 +++++++++++++++++++ .../src/test/java/JacksonTests.java | 21 ++++++ .../spring-cloud-feign/common/pom.xml | 22 ++++++ .../heibaiying/common/CommonApplication.java | 14 ++++ .../com/heibaiying/common/bean/Product.java | 33 +++++++++ .../heibaiying/common/feign/ProductFeign.java | 24 +++++++ .../common/CommonApplicationTests.java | 17 +++++ .../spring-cloud-feign/consumer/pom.xml | 50 +++++++++++++ .../consumer/ConsumerApplication.java | 18 +++++ .../consumer/controller/SellController.java | 37 ++++++++++ .../consumer/feign/CProductFeign.java | 13 ++++ .../src/main/resources/application.yml | 11 +++ .../src/main/resources/templates/product.ftl | 15 ++++ .../src/main/resources/templates/products.ftl | 16 +++++ .../consumer/ConsumerApplicationTests.java | 17 +++++ .../spring-cloud-feign/eureka/pom.xml | 31 ++++++++ .../heibaiying/eureka/EurekaApplication.java | 16 +++++ .../eureka/src/main/resources/application.yml | 12 ++++ .../eureka/EurekaApplicationTests.java | 17 +++++ spring-cloud/spring-cloud-feign/pom.xml | 64 +++++++++++++++++ .../spring-cloud-feign/producer/pom.xml | 43 +++++++++++ .../producer/ProducerApplication.java | 16 +++++ .../controller/ProducerController.java | 32 +++++++++ .../producer/service/IProductService.java | 11 +++ .../producer/service/impl/ProductService.java | 39 ++++++++++ .../src/main/resources/application.yml | 11 +++ .../producer/ProducerApplicationTests.java | 17 +++++ .../spring-cloud-ribbon/common/pom.xml | 22 ++++++ .../heibaiying/common/CommonApplication.java | 14 ++++ .../common/api/IProductService.java | 16 +++++ .../com/heibaiying/common/bean/Product.java | 33 +++++++++ .../common/CommonApplicationTests.java | 17 +++++ .../spring-cloud-ribbon/consumer/pom.xml | 50 +++++++++++++ .../consumer/ConsumerApplication.java | 16 +++++ .../consumer/config/RibbonConfig.java | 21 ++++++ .../consumer/controller/SellController.java | 37 ++++++++++ .../consumer/service/ProductService.java | 34 +++++++++ .../src/main/resources/application.yml | 11 +++ .../src/main/resources/templates/product.ftl | 15 ++++ .../src/main/resources/templates/products.ftl | 16 +++++ .../consumer/ConsumerApplicationTests.java | 17 +++++ .../spring-cloud-ribbon/eureka/pom.xml | 31 ++++++++ .../heibaiying/eureka/EurekaApplication.java | 16 +++++ .../eureka/src/main/resources/application.yml | 12 ++++ .../eureka/EurekaApplicationTests.java | 17 +++++ spring-cloud/spring-cloud-ribbon/pom.xml | 63 ++++++++++++++++ .../spring-cloud-ribbon/producer/pom.xml | 43 +++++++++++ .../producer/ProducerApplication.java | 16 +++++ .../controller/ProducerController.java | 31 ++++++++ .../producer/service/ProductService.java | 39 ++++++++++ .../src/main/resources/application.yml | 11 +++ .../producer/ProducerApplicationTests.java | 17 +++++ 54 files changed, 1373 insertions(+) create mode 100644 libraries/jackson-samples/pom.xml create mode 100644 libraries/jackson-samples/src/main/java/com/heibaiying/bean/User.java create mode 100644 libraries/jackson-samples/src/main/java/com/heibaiying/jackson/JacksonUtils.java create mode 100644 libraries/jackson-samples/src/test/java/JacksonTests.java create mode 100644 spring-cloud/spring-cloud-feign/common/pom.xml create mode 100644 spring-cloud/spring-cloud-feign/common/src/main/java/com/heibaiying/common/CommonApplication.java create mode 100644 spring-cloud/spring-cloud-feign/common/src/main/java/com/heibaiying/common/bean/Product.java create mode 100644 spring-cloud/spring-cloud-feign/common/src/main/java/com/heibaiying/common/feign/ProductFeign.java create mode 100644 spring-cloud/spring-cloud-feign/common/src/test/java/com/heibaiying/common/CommonApplicationTests.java create mode 100644 spring-cloud/spring-cloud-feign/consumer/pom.xml create mode 100644 spring-cloud/spring-cloud-feign/consumer/src/main/java/com/heibaiying/consumer/ConsumerApplication.java create mode 100644 spring-cloud/spring-cloud-feign/consumer/src/main/java/com/heibaiying/consumer/controller/SellController.java create mode 100644 spring-cloud/spring-cloud-feign/consumer/src/main/java/com/heibaiying/consumer/feign/CProductFeign.java create mode 100644 spring-cloud/spring-cloud-feign/consumer/src/main/resources/application.yml create mode 100644 spring-cloud/spring-cloud-feign/consumer/src/main/resources/templates/product.ftl create mode 100644 spring-cloud/spring-cloud-feign/consumer/src/main/resources/templates/products.ftl create mode 100644 spring-cloud/spring-cloud-feign/consumer/src/test/java/com/heibaiying/consumer/ConsumerApplicationTests.java create mode 100644 spring-cloud/spring-cloud-feign/eureka/pom.xml create mode 100644 spring-cloud/spring-cloud-feign/eureka/src/main/java/com/heibaiying/eureka/EurekaApplication.java create mode 100644 spring-cloud/spring-cloud-feign/eureka/src/main/resources/application.yml create mode 100644 spring-cloud/spring-cloud-feign/eureka/src/test/java/com/heibaiying/eureka/EurekaApplicationTests.java create mode 100644 spring-cloud/spring-cloud-feign/pom.xml create mode 100644 spring-cloud/spring-cloud-feign/producer/pom.xml create mode 100644 spring-cloud/spring-cloud-feign/producer/src/main/java/com/heibaiying/producer/ProducerApplication.java create mode 100644 spring-cloud/spring-cloud-feign/producer/src/main/java/com/heibaiying/producer/controller/ProducerController.java create mode 100644 spring-cloud/spring-cloud-feign/producer/src/main/java/com/heibaiying/producer/service/IProductService.java create mode 100644 spring-cloud/spring-cloud-feign/producer/src/main/java/com/heibaiying/producer/service/impl/ProductService.java create mode 100644 spring-cloud/spring-cloud-feign/producer/src/main/resources/application.yml create mode 100644 spring-cloud/spring-cloud-feign/producer/src/test/java/com/heibaiying/producer/ProducerApplicationTests.java create mode 100644 spring-cloud/spring-cloud-ribbon/common/pom.xml create mode 100644 spring-cloud/spring-cloud-ribbon/common/src/main/java/com/heibaiying/common/CommonApplication.java create mode 100644 spring-cloud/spring-cloud-ribbon/common/src/main/java/com/heibaiying/common/api/IProductService.java create mode 100644 spring-cloud/spring-cloud-ribbon/common/src/main/java/com/heibaiying/common/bean/Product.java create mode 100644 spring-cloud/spring-cloud-ribbon/common/src/test/java/com/heibaiying/common/CommonApplicationTests.java create mode 100644 spring-cloud/spring-cloud-ribbon/consumer/pom.xml create mode 100644 spring-cloud/spring-cloud-ribbon/consumer/src/main/java/com/heibaiying/consumer/ConsumerApplication.java create mode 100644 spring-cloud/spring-cloud-ribbon/consumer/src/main/java/com/heibaiying/consumer/config/RibbonConfig.java create mode 100644 spring-cloud/spring-cloud-ribbon/consumer/src/main/java/com/heibaiying/consumer/controller/SellController.java create mode 100644 spring-cloud/spring-cloud-ribbon/consumer/src/main/java/com/heibaiying/consumer/service/ProductService.java create mode 100644 spring-cloud/spring-cloud-ribbon/consumer/src/main/resources/application.yml create mode 100644 spring-cloud/spring-cloud-ribbon/consumer/src/main/resources/templates/product.ftl create mode 100644 spring-cloud/spring-cloud-ribbon/consumer/src/main/resources/templates/products.ftl create mode 100644 spring-cloud/spring-cloud-ribbon/consumer/src/test/java/com/heibaiying/consumer/ConsumerApplicationTests.java create mode 100644 spring-cloud/spring-cloud-ribbon/eureka/pom.xml create mode 100644 spring-cloud/spring-cloud-ribbon/eureka/src/main/java/com/heibaiying/eureka/EurekaApplication.java create mode 100644 spring-cloud/spring-cloud-ribbon/eureka/src/main/resources/application.yml create mode 100644 spring-cloud/spring-cloud-ribbon/eureka/src/test/java/com/heibaiying/eureka/EurekaApplicationTests.java create mode 100644 spring-cloud/spring-cloud-ribbon/pom.xml create mode 100644 spring-cloud/spring-cloud-ribbon/producer/pom.xml create mode 100644 spring-cloud/spring-cloud-ribbon/producer/src/main/java/com/heibaiying/producer/ProducerApplication.java create mode 100644 spring-cloud/spring-cloud-ribbon/producer/src/main/java/com/heibaiying/producer/controller/ProducerController.java create mode 100644 spring-cloud/spring-cloud-ribbon/producer/src/main/java/com/heibaiying/producer/service/ProductService.java create mode 100644 spring-cloud/spring-cloud-ribbon/producer/src/main/resources/application.yml create mode 100644 spring-cloud/spring-cloud-ribbon/producer/src/test/java/com/heibaiying/producer/ProducerApplicationTests.java diff --git a/libraries/jackson-samples/pom.xml b/libraries/jackson-samples/pom.xml new file mode 100644 index 0000000..ff876f1 --- /dev/null +++ b/libraries/jackson-samples/pom.xml @@ -0,0 +1,45 @@ + + + 4.0.0 + + com.heibaiying + jackson-samples + 1.0-SNAPSHOT + + + + org.apache.maven.plugins + maven-compiler-plugin + + 8 + 8 + + + + + + + + + com.fasterxml.jackson.core + jackson-databind + 2.9.8 + + + org.projectlombok + lombok + 1.18.4 + provided + + + junit + junit + 4.12 + test + + + + + \ No newline at end of file diff --git a/libraries/jackson-samples/src/main/java/com/heibaiying/bean/User.java b/libraries/jackson-samples/src/main/java/com/heibaiying/bean/User.java new file mode 100644 index 0000000..5d2dbab --- /dev/null +++ b/libraries/jackson-samples/src/main/java/com/heibaiying/bean/User.java @@ -0,0 +1,25 @@ +package com.heibaiying.bean; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; + +/** + * @author : heibaiying + */ + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class User { + + private String name; + + private int age; + + private float salary; + + private Date birthday; +} diff --git a/libraries/jackson-samples/src/main/java/com/heibaiying/jackson/JacksonUtils.java b/libraries/jackson-samples/src/main/java/com/heibaiying/jackson/JacksonUtils.java new file mode 100644 index 0000000..126aa77 --- /dev/null +++ b/libraries/jackson-samples/src/main/java/com/heibaiying/jackson/JacksonUtils.java @@ -0,0 +1,71 @@ +package com.heibaiying.jackson; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; + +import java.io.IOException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @author : heibaiying + * @description : jackson 的使用 + */ +public class JacksonUtils { + + private static ObjectMapper mapper = new ObjectMapper(); + + /*** + * spring 对象转换为json + */ + public static String objectToJson(Object object) throws JsonProcessingException { + return mapper.writeValueAsString(object); + } + + /*** + * spring json 转换为对象 + */ + public static T jsonToBean(String json, Class valueType) throws IOException { + return mapper.readValue(json, valueType); + } + + /*** + * spring json 转换为List + */ + public static List jsonToList(String json, Class valueType) throws IOException { + List> list = mapper.readValue(json, new TypeReference>() { + }); + return list.stream().map(value -> mapToBean(value, valueType)).collect(Collectors.toList()); + } + + /*** + * spring json 转换为Map (map的value为基本类型) + */ + public static Map jsonToMap(String json) throws IOException { + return mapper.readValue(json, Map.class); + } + + /*** + * spring json 转换为Map (map的value为bean) + */ + public static Map jsonToMap(String json, Class clazz) throws IOException { + Map> map = mapper.readValue(json, + new TypeReference>() { + }); + Map result = new HashMap<>(); + for (Map.Entry> entry : map.entrySet()) { + result.put(entry.getKey(), mapToBean(entry.getValue(), clazz)); + } + return result; + } + + /*** + * map 转换为 bean + */ + public static T mapToBean(Map map, Class valueType) { + return mapper.convertValue(map, valueType); + } +} diff --git a/libraries/jackson-samples/src/test/java/JacksonTests.java b/libraries/jackson-samples/src/test/java/JacksonTests.java new file mode 100644 index 0000000..f1e0bbc --- /dev/null +++ b/libraries/jackson-samples/src/test/java/JacksonTests.java @@ -0,0 +1,21 @@ +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.heibaiying.bean.User; +import com.heibaiying.jackson.JacksonUtils; +import org.junit.Test; + +import java.io.IOException; +import java.util.*; + +/** + * @author : heibaiying + * @description : jackson 测试 + */ +public class JacksonTests { + + @Test + public void test() throws IOException { + + } +} diff --git a/spring-cloud/spring-cloud-feign/common/pom.xml b/spring-cloud/spring-cloud-feign/common/pom.xml new file mode 100644 index 0000000..94a8365 --- /dev/null +++ b/spring-cloud/spring-cloud-feign/common/pom.xml @@ -0,0 +1,22 @@ + + + 4.0.0 + + + com.heibaiying.feign + spring-cloud-feign + 0.0.1-SNAPSHOT + + + common + + + + org.springframework.boot + spring-boot-starter-web + + + + + diff --git a/spring-cloud/spring-cloud-feign/common/src/main/java/com/heibaiying/common/CommonApplication.java b/spring-cloud/spring-cloud-feign/common/src/main/java/com/heibaiying/common/CommonApplication.java new file mode 100644 index 0000000..3675fb8 --- /dev/null +++ b/spring-cloud/spring-cloud-feign/common/src/main/java/com/heibaiying/common/CommonApplication.java @@ -0,0 +1,14 @@ +package com.heibaiying.common; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class CommonApplication { + + public static void main(String[] args) { + SpringApplication.run(CommonApplication.class, args); + } + +} + diff --git a/spring-cloud/spring-cloud-feign/common/src/main/java/com/heibaiying/common/bean/Product.java b/spring-cloud/spring-cloud-feign/common/src/main/java/com/heibaiying/common/bean/Product.java new file mode 100644 index 0000000..462d638 --- /dev/null +++ b/spring-cloud/spring-cloud-feign/common/src/main/java/com/heibaiying/common/bean/Product.java @@ -0,0 +1,33 @@ +package com.heibaiying.common.bean; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.Date; + +/** + * @author : heibaiying + * @description : 产品实体类 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class Product implements Serializable { + + // 产品序列号 + private int id; + + // 产品名称 + private String name; + + // 是否贵重品 + private Boolean isPrecious; + + //生产日期 + private Date dateInProduced; + + //产品价格 + private float price; +} diff --git a/spring-cloud/spring-cloud-feign/common/src/main/java/com/heibaiying/common/feign/ProductFeign.java b/spring-cloud/spring-cloud-feign/common/src/main/java/com/heibaiying/common/feign/ProductFeign.java new file mode 100644 index 0000000..a90c543 --- /dev/null +++ b/spring-cloud/spring-cloud-feign/common/src/main/java/com/heibaiying/common/feign/ProductFeign.java @@ -0,0 +1,24 @@ +package com.heibaiying.common.feign; + +import com.heibaiying.common.bean.Product; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; + +import java.util.List; + +/** + * @author : heibaiying + * @description : 声明式接口调用 + */ +public interface ProductFeign { + + @RequestMapping("products") + List productList(); + + /** + * 这是需要强调的是使用feign时候@PathVariable一定要用value指明参数, + * 不然会抛出.IllegalStateException: PathVariable annotation was empty on param 异常 + */ + @RequestMapping("product/{id}") + Product productDetail(@PathVariable(value = "id") int id); +} diff --git a/spring-cloud/spring-cloud-feign/common/src/test/java/com/heibaiying/common/CommonApplicationTests.java b/spring-cloud/spring-cloud-feign/common/src/test/java/com/heibaiying/common/CommonApplicationTests.java new file mode 100644 index 0000000..b02d448 --- /dev/null +++ b/spring-cloud/spring-cloud-feign/common/src/test/java/com/heibaiying/common/CommonApplicationTests.java @@ -0,0 +1,17 @@ +package com.heibaiying.common; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest +public class CommonApplicationTests { + + @Test + public void contextLoads() { + } + +} + diff --git a/spring-cloud/spring-cloud-feign/consumer/pom.xml b/spring-cloud/spring-cloud-feign/consumer/pom.xml new file mode 100644 index 0000000..2bf4af6 --- /dev/null +++ b/spring-cloud/spring-cloud-feign/consumer/pom.xml @@ -0,0 +1,50 @@ + + + 4.0.0 + + + com.heibaiying.feign + spring-cloud-feign + 0.0.1-SNAPSHOT + + + consumer + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.cloud + spring-cloud-starter-netflix-eureka-client + + + org.springframework.boot + spring-boot-starter-freemarker + + + + org.springframework.cloud + spring-cloud-starter-openfeign + + + + com.heibaiying.feign + common + 0.0.1-SNAPSHOT + compile + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + diff --git a/spring-cloud/spring-cloud-feign/consumer/src/main/java/com/heibaiying/consumer/ConsumerApplication.java b/spring-cloud/spring-cloud-feign/consumer/src/main/java/com/heibaiying/consumer/ConsumerApplication.java new file mode 100644 index 0000000..8116bec --- /dev/null +++ b/spring-cloud/spring-cloud-feign/consumer/src/main/java/com/heibaiying/consumer/ConsumerApplication.java @@ -0,0 +1,18 @@ +package com.heibaiying.consumer; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; +import org.springframework.cloud.openfeign.EnableFeignClients; + +@SpringBootApplication +@EnableDiscoveryClient +@EnableFeignClients +public class ConsumerApplication { + + public static void main(String[] args) { + SpringApplication.run(ConsumerApplication.class, args); + } + +} + diff --git a/spring-cloud/spring-cloud-feign/consumer/src/main/java/com/heibaiying/consumer/controller/SellController.java b/spring-cloud/spring-cloud-feign/consumer/src/main/java/com/heibaiying/consumer/controller/SellController.java new file mode 100644 index 0000000..7b01ffc --- /dev/null +++ b/spring-cloud/spring-cloud-feign/consumer/src/main/java/com/heibaiying/consumer/controller/SellController.java @@ -0,0 +1,37 @@ +package com.heibaiying.consumer.controller; + + +import com.heibaiying.common.bean.Product; +import com.heibaiying.consumer.feign.CProductFeign; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; + +import java.util.List; + +/** + * @author : heibaiying + */ +@Controller +@RequestMapping("sell") +public class SellController { + + @Autowired + private CProductFeign cproductFeign; + + @RequestMapping + public String productList(Model model) { + List products = cproductFeign.productList(); + model.addAttribute("products", products); + return "products"; + } + + @RequestMapping("product/{id}") + public String productDetail(@PathVariable int id, Model model) { + Product product = cproductFeign.productDetail(id); + model.addAttribute("product", product); + return "product"; + } +} diff --git a/spring-cloud/spring-cloud-feign/consumer/src/main/java/com/heibaiying/consumer/feign/CProductFeign.java b/spring-cloud/spring-cloud-feign/consumer/src/main/java/com/heibaiying/consumer/feign/CProductFeign.java new file mode 100644 index 0000000..588b79b --- /dev/null +++ b/spring-cloud/spring-cloud-feign/consumer/src/main/java/com/heibaiying/consumer/feign/CProductFeign.java @@ -0,0 +1,13 @@ +package com.heibaiying.consumer.feign; + +import com.heibaiying.common.feign.ProductFeign; +import org.springframework.cloud.openfeign.FeignClient; + +/** + * @author : heibaiying + * @description : 声明式接口调用 + */ +@FeignClient("producer") +public interface CProductFeign extends ProductFeign { + +} diff --git a/spring-cloud/spring-cloud-feign/consumer/src/main/resources/application.yml b/spring-cloud/spring-cloud-feign/consumer/src/main/resources/application.yml new file mode 100644 index 0000000..53c4ebd --- /dev/null +++ b/spring-cloud/spring-cloud-feign/consumer/src/main/resources/application.yml @@ -0,0 +1,11 @@ +server: + port: 8030 +# 指定服务命名 +spring: + application: + name: consumer +# 指定注册中心地址 +eureka: + client: + serviceUrl: + defaultZone: http://localhost:8010/eureka/ diff --git a/spring-cloud/spring-cloud-feign/consumer/src/main/resources/templates/product.ftl b/spring-cloud/spring-cloud-feign/consumer/src/main/resources/templates/product.ftl new file mode 100644 index 0000000..729f516 --- /dev/null +++ b/spring-cloud/spring-cloud-feign/consumer/src/main/resources/templates/product.ftl @@ -0,0 +1,15 @@ + + + + 产品详情 + + +
    +
  • 产品名称:${product.name}
  • +
  • 产品序列号:${product.id}
  • +
  • 是否贵重品:${product.isPrecious?string('是','否')}
  • +
  • 生产日期: ${product.dateInProduced?string("yyyy-MM-dd HH:mm:ss")}
  • +
  • 产品价格:${product.price}
  • +
+ + diff --git a/spring-cloud/spring-cloud-feign/consumer/src/main/resources/templates/products.ftl b/spring-cloud/spring-cloud-feign/consumer/src/main/resources/templates/products.ftl new file mode 100644 index 0000000..214fac7 --- /dev/null +++ b/spring-cloud/spring-cloud-feign/consumer/src/main/resources/templates/products.ftl @@ -0,0 +1,16 @@ + + + + 产品列表 + + +

产品列表:点击查看详情

+ + + diff --git a/spring-cloud/spring-cloud-feign/consumer/src/test/java/com/heibaiying/consumer/ConsumerApplicationTests.java b/spring-cloud/spring-cloud-feign/consumer/src/test/java/com/heibaiying/consumer/ConsumerApplicationTests.java new file mode 100644 index 0000000..82f5399 --- /dev/null +++ b/spring-cloud/spring-cloud-feign/consumer/src/test/java/com/heibaiying/consumer/ConsumerApplicationTests.java @@ -0,0 +1,17 @@ +package com.heibaiying.consumer; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest +public class ConsumerApplicationTests { + + @Test + public void contextLoads() { + } + +} + diff --git a/spring-cloud/spring-cloud-feign/eureka/pom.xml b/spring-cloud/spring-cloud-feign/eureka/pom.xml new file mode 100644 index 0000000..05f297d --- /dev/null +++ b/spring-cloud/spring-cloud-feign/eureka/pom.xml @@ -0,0 +1,31 @@ + + + 4.0.0 + + + com.heibaiying + spring-cloud-ribbon + 0.0.1-SNAPSHOT + + + eureka + + + + org.springframework.cloud + spring-cloud-starter-netflix-eureka-server + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + + diff --git a/spring-cloud/spring-cloud-feign/eureka/src/main/java/com/heibaiying/eureka/EurekaApplication.java b/spring-cloud/spring-cloud-feign/eureka/src/main/java/com/heibaiying/eureka/EurekaApplication.java new file mode 100644 index 0000000..bd54938 --- /dev/null +++ b/spring-cloud/spring-cloud-feign/eureka/src/main/java/com/heibaiying/eureka/EurekaApplication.java @@ -0,0 +1,16 @@ +package com.heibaiying.eureka; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; + +@SpringBootApplication +@EnableEurekaServer +public class EurekaApplication { + + public static void main(String[] args) { + SpringApplication.run(EurekaApplication.class, args); + } + +} + diff --git a/spring-cloud/spring-cloud-feign/eureka/src/main/resources/application.yml b/spring-cloud/spring-cloud-feign/eureka/src/main/resources/application.yml new file mode 100644 index 0000000..817356d --- /dev/null +++ b/spring-cloud/spring-cloud-feign/eureka/src/main/resources/application.yml @@ -0,0 +1,12 @@ +server: + port: 8010 +eureka: + instance: + hostname: localhost + client: + # 设置为false,代表不向注册中心注册自己 + register-with-eureka: false + # 注册中心主要用于维护服务,并不需要检索服务,所以设置为false + fetch-registry: false + serviceUrl: + defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ \ No newline at end of file diff --git a/spring-cloud/spring-cloud-feign/eureka/src/test/java/com/heibaiying/eureka/EurekaApplicationTests.java b/spring-cloud/spring-cloud-feign/eureka/src/test/java/com/heibaiying/eureka/EurekaApplicationTests.java new file mode 100644 index 0000000..b3e2d73 --- /dev/null +++ b/spring-cloud/spring-cloud-feign/eureka/src/test/java/com/heibaiying/eureka/EurekaApplicationTests.java @@ -0,0 +1,17 @@ +package com.heibaiying.eureka; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest +public class EurekaApplicationTests { + + @Test + public void contextLoads() { + } + +} + diff --git a/spring-cloud/spring-cloud-feign/pom.xml b/spring-cloud/spring-cloud-feign/pom.xml new file mode 100644 index 0000000..e3f5182 --- /dev/null +++ b/spring-cloud/spring-cloud-feign/pom.xml @@ -0,0 +1,64 @@ + + + 4.0.0 + pom + + + org.springframework.boot + spring-boot-starter-parent + 2.1.2.RELEASE + + + + com.heibaiying.feign + spring-cloud-feign + 0.0.1-SNAPSHOT + spring-cloud-feign + feign project for Spring Boot + + + eureka + common + consumer + producer + + + + 1.8 + Finchley.SR2 + + + + + org.springframework.boot + spring-boot-starter + + + + org.projectlombok + lombok + true + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.cloud + spring-cloud-dependencies + ${spring-cloud.version} + pom + import + + + + + + diff --git a/spring-cloud/spring-cloud-feign/producer/pom.xml b/spring-cloud/spring-cloud-feign/producer/pom.xml new file mode 100644 index 0000000..646e2d4 --- /dev/null +++ b/spring-cloud/spring-cloud-feign/producer/pom.xml @@ -0,0 +1,43 @@ + + + 4.0.0 + + + com.heibaiying.feign + spring-cloud-feign + 0.0.1-SNAPSHOT + + + producer + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.cloud + spring-cloud-starter-netflix-eureka-client + + + + com.heibaiying.feign + common + 0.0.1-SNAPSHOT + compile + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + + diff --git a/spring-cloud/spring-cloud-feign/producer/src/main/java/com/heibaiying/producer/ProducerApplication.java b/spring-cloud/spring-cloud-feign/producer/src/main/java/com/heibaiying/producer/ProducerApplication.java new file mode 100644 index 0000000..cb8e8fc --- /dev/null +++ b/spring-cloud/spring-cloud-feign/producer/src/main/java/com/heibaiying/producer/ProducerApplication.java @@ -0,0 +1,16 @@ +package com.heibaiying.producer; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; + +@SpringBootApplication +@EnableDiscoveryClient +public class ProducerApplication { + + public static void main(String[] args) { + SpringApplication.run(ProducerApplication.class, args); + } + +} + diff --git a/spring-cloud/spring-cloud-feign/producer/src/main/java/com/heibaiying/producer/controller/ProducerController.java b/spring-cloud/spring-cloud-feign/producer/src/main/java/com/heibaiying/producer/controller/ProducerController.java new file mode 100644 index 0000000..1c8888a --- /dev/null +++ b/spring-cloud/spring-cloud-feign/producer/src/main/java/com/heibaiying/producer/controller/ProducerController.java @@ -0,0 +1,32 @@ +package com.heibaiying.producer.controller; + + +import com.heibaiying.common.bean.Product; +import com.heibaiying.common.feign.ProductFeign; +import com.heibaiying.producer.service.IProductService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * @author : heibaiying + */ +@RestController +public class ProducerController{ + + @Autowired + private IProductService productService; + + @RequestMapping("products") + public List productList() { + return productService.queryAllProducts(); + } + + @RequestMapping("product/{id}") + public Product productDetail(@PathVariable int id) { + return productService.queryProductById(id); + } +} diff --git a/spring-cloud/spring-cloud-feign/producer/src/main/java/com/heibaiying/producer/service/IProductService.java b/spring-cloud/spring-cloud-feign/producer/src/main/java/com/heibaiying/producer/service/IProductService.java new file mode 100644 index 0000000..a7e0bbf --- /dev/null +++ b/spring-cloud/spring-cloud-feign/producer/src/main/java/com/heibaiying/producer/service/IProductService.java @@ -0,0 +1,11 @@ +package com.heibaiying.producer.service; + +import com.heibaiying.common.bean.Product; + +import java.util.List; +public interface IProductService { + + Product queryProductById(int id) ; + + List queryAllProducts(); +} diff --git a/spring-cloud/spring-cloud-feign/producer/src/main/java/com/heibaiying/producer/service/impl/ProductService.java b/spring-cloud/spring-cloud-feign/producer/src/main/java/com/heibaiying/producer/service/impl/ProductService.java new file mode 100644 index 0000000..3b6f015 --- /dev/null +++ b/spring-cloud/spring-cloud-feign/producer/src/main/java/com/heibaiying/producer/service/impl/ProductService.java @@ -0,0 +1,39 @@ +package com.heibaiying.producer.service.impl; + +import com.heibaiying.common.bean.Product; +import com.heibaiying.producer.service.IProductService; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +/** + * @author : heibaiying + * @description : 产品提供接口实现类 + */ +@Service +public class ProductService implements IProductService { + + private static List productList = new ArrayList<>(); + + static { + for (int i = 0; i < 20; i++) { + productList.add(new Product(i, "产品" + i, i / 2 == 0, new Date(), 66.66f * i)); + } + } + + public Product queryProductById(int id) { + for (Product product : productList) { + if (product.getId() == id) { + return product; + } + } + return null; + } + + + public List queryAllProducts() { + return productList; + } +} diff --git a/spring-cloud/spring-cloud-feign/producer/src/main/resources/application.yml b/spring-cloud/spring-cloud-feign/producer/src/main/resources/application.yml new file mode 100644 index 0000000..86c3b51 --- /dev/null +++ b/spring-cloud/spring-cloud-feign/producer/src/main/resources/application.yml @@ -0,0 +1,11 @@ +server: + port: 8020 +# 指定服务命名 +spring: + application: + name: producer +# 指定注册中心地址 +eureka: + client: + serviceUrl: + defaultZone: http://localhost:8010/eureka/ diff --git a/spring-cloud/spring-cloud-feign/producer/src/test/java/com/heibaiying/producer/ProducerApplicationTests.java b/spring-cloud/spring-cloud-feign/producer/src/test/java/com/heibaiying/producer/ProducerApplicationTests.java new file mode 100644 index 0000000..54cac2d --- /dev/null +++ b/spring-cloud/spring-cloud-feign/producer/src/test/java/com/heibaiying/producer/ProducerApplicationTests.java @@ -0,0 +1,17 @@ +package com.heibaiying.producer; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest +public class ProducerApplicationTests { + + @Test + public void contextLoads() { + } + +} + diff --git a/spring-cloud/spring-cloud-ribbon/common/pom.xml b/spring-cloud/spring-cloud-ribbon/common/pom.xml new file mode 100644 index 0000000..caeb464 --- /dev/null +++ b/spring-cloud/spring-cloud-ribbon/common/pom.xml @@ -0,0 +1,22 @@ + + + 4.0.0 + + + com.heibaiying + spring-cloud-ribbon + 0.0.1-SNAPSHOT + + + common + + + + org.springframework.boot + spring-boot-starter-web + + + + + diff --git a/spring-cloud/spring-cloud-ribbon/common/src/main/java/com/heibaiying/common/CommonApplication.java b/spring-cloud/spring-cloud-ribbon/common/src/main/java/com/heibaiying/common/CommonApplication.java new file mode 100644 index 0000000..3675fb8 --- /dev/null +++ b/spring-cloud/spring-cloud-ribbon/common/src/main/java/com/heibaiying/common/CommonApplication.java @@ -0,0 +1,14 @@ +package com.heibaiying.common; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class CommonApplication { + + public static void main(String[] args) { + SpringApplication.run(CommonApplication.class, args); + } + +} + diff --git a/spring-cloud/spring-cloud-ribbon/common/src/main/java/com/heibaiying/common/api/IProductService.java b/spring-cloud/spring-cloud-ribbon/common/src/main/java/com/heibaiying/common/api/IProductService.java new file mode 100644 index 0000000..d86874e --- /dev/null +++ b/spring-cloud/spring-cloud-ribbon/common/src/main/java/com/heibaiying/common/api/IProductService.java @@ -0,0 +1,16 @@ +package com.heibaiying.common.api; + +import com.heibaiying.common.bean.Product; + +import java.util.List; + +/** + * @author : heibaiying + * @description : 产品服务接口类 + */ +public interface IProductService { + + Product queryProductById(int id); + + List queryAllProducts(); +} diff --git a/spring-cloud/spring-cloud-ribbon/common/src/main/java/com/heibaiying/common/bean/Product.java b/spring-cloud/spring-cloud-ribbon/common/src/main/java/com/heibaiying/common/bean/Product.java new file mode 100644 index 0000000..462d638 --- /dev/null +++ b/spring-cloud/spring-cloud-ribbon/common/src/main/java/com/heibaiying/common/bean/Product.java @@ -0,0 +1,33 @@ +package com.heibaiying.common.bean; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.Date; + +/** + * @author : heibaiying + * @description : 产品实体类 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class Product implements Serializable { + + // 产品序列号 + private int id; + + // 产品名称 + private String name; + + // 是否贵重品 + private Boolean isPrecious; + + //生产日期 + private Date dateInProduced; + + //产品价格 + private float price; +} diff --git a/spring-cloud/spring-cloud-ribbon/common/src/test/java/com/heibaiying/common/CommonApplicationTests.java b/spring-cloud/spring-cloud-ribbon/common/src/test/java/com/heibaiying/common/CommonApplicationTests.java new file mode 100644 index 0000000..b02d448 --- /dev/null +++ b/spring-cloud/spring-cloud-ribbon/common/src/test/java/com/heibaiying/common/CommonApplicationTests.java @@ -0,0 +1,17 @@ +package com.heibaiying.common; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest +public class CommonApplicationTests { + + @Test + public void contextLoads() { + } + +} + diff --git a/spring-cloud/spring-cloud-ribbon/consumer/pom.xml b/spring-cloud/spring-cloud-ribbon/consumer/pom.xml new file mode 100644 index 0000000..90106c2 --- /dev/null +++ b/spring-cloud/spring-cloud-ribbon/consumer/pom.xml @@ -0,0 +1,50 @@ + + + 4.0.0 + + + com.heibaiying + spring-cloud-ribbon + 0.0.1-SNAPSHOT + + + consumer + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.cloud + spring-cloud-starter-netflix-eureka-client + + + org.springframework.boot + spring-boot-starter-freemarker + + + + org.springframework.cloud + spring-cloud-starter-netflix-ribbon + + + + com.heibaiying.eureka + common + 0.0.1-SNAPSHOT + compile + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + diff --git a/spring-cloud/spring-cloud-ribbon/consumer/src/main/java/com/heibaiying/consumer/ConsumerApplication.java b/spring-cloud/spring-cloud-ribbon/consumer/src/main/java/com/heibaiying/consumer/ConsumerApplication.java new file mode 100644 index 0000000..c390e36 --- /dev/null +++ b/spring-cloud/spring-cloud-ribbon/consumer/src/main/java/com/heibaiying/consumer/ConsumerApplication.java @@ -0,0 +1,16 @@ +package com.heibaiying.consumer; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; + +@SpringBootApplication +@EnableDiscoveryClient +public class ConsumerApplication { + + public static void main(String[] args) { + SpringApplication.run(ConsumerApplication.class, args); + } + +} + diff --git a/spring-cloud/spring-cloud-ribbon/consumer/src/main/java/com/heibaiying/consumer/config/RibbonConfig.java b/spring-cloud/spring-cloud-ribbon/consumer/src/main/java/com/heibaiying/consumer/config/RibbonConfig.java new file mode 100644 index 0000000..95f4ead --- /dev/null +++ b/spring-cloud/spring-cloud-ribbon/consumer/src/main/java/com/heibaiying/consumer/config/RibbonConfig.java @@ -0,0 +1,21 @@ +package com.heibaiying.consumer.config; + +import org.springframework.cloud.client.loadbalancer.LoadBalanced; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.client.RestTemplate; + +/** + * @author : heibaiying + */ +@Configuration +public class RibbonConfig { + + @LoadBalanced // 配置客户端负载均衡 + @Bean + public RestTemplate restTemplate() { + return new RestTemplate(); + } +} + + diff --git a/spring-cloud/spring-cloud-ribbon/consumer/src/main/java/com/heibaiying/consumer/controller/SellController.java b/spring-cloud/spring-cloud-ribbon/consumer/src/main/java/com/heibaiying/consumer/controller/SellController.java new file mode 100644 index 0000000..734e6c8 --- /dev/null +++ b/spring-cloud/spring-cloud-ribbon/consumer/src/main/java/com/heibaiying/consumer/controller/SellController.java @@ -0,0 +1,37 @@ +package com.heibaiying.consumer.controller; + + +import com.heibaiying.common.api.IProductService; +import com.heibaiying.common.bean.Product; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; + +import java.util.List; + +/** + * @author : heibaiying + */ +@Controller +@RequestMapping("sell") +public class SellController { + + @Autowired + private IProductService productService; + + @RequestMapping + public String productList(Model model) { + List products = productService.queryAllProducts(); + model.addAttribute("products", products); + return "products"; + } + + @RequestMapping("product/{id}") + public String productDetail(@PathVariable int id, Model model) { + Product product = productService.queryProductById(id); + model.addAttribute("product", product); + return "product"; + } +} diff --git a/spring-cloud/spring-cloud-ribbon/consumer/src/main/java/com/heibaiying/consumer/service/ProductService.java b/spring-cloud/spring-cloud-ribbon/consumer/src/main/java/com/heibaiying/consumer/service/ProductService.java new file mode 100644 index 0000000..48c76f7 --- /dev/null +++ b/spring-cloud/spring-cloud-ribbon/consumer/src/main/java/com/heibaiying/consumer/service/ProductService.java @@ -0,0 +1,34 @@ +package com.heibaiying.consumer.service; + +import com.heibaiying.common.api.IProductService; +import com.heibaiying.common.bean.Product; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; +import org.springframework.web.client.RestTemplate; + +import java.util.List; + +/** + * @author : heibaiying + * @description : 产品提供接口实现类 + */ +@Service +public class ProductService implements IProductService { + + @Autowired + private RestTemplate restTemplate; + + public Product queryProductById(int id) { + ResponseEntity responseEntity = restTemplate.getForEntity("http://producer/product/{1}", Product.class, id); + return responseEntity.getBody(); + } + + + public List queryAllProducts() { + ResponseEntity responseEntity = restTemplate.getForEntity("http://producer/products", List.class); + List productList = responseEntity.getBody(); + return productList; + } + +} diff --git a/spring-cloud/spring-cloud-ribbon/consumer/src/main/resources/application.yml b/spring-cloud/spring-cloud-ribbon/consumer/src/main/resources/application.yml new file mode 100644 index 0000000..53c4ebd --- /dev/null +++ b/spring-cloud/spring-cloud-ribbon/consumer/src/main/resources/application.yml @@ -0,0 +1,11 @@ +server: + port: 8030 +# 指定服务命名 +spring: + application: + name: consumer +# 指定注册中心地址 +eureka: + client: + serviceUrl: + defaultZone: http://localhost:8010/eureka/ diff --git a/spring-cloud/spring-cloud-ribbon/consumer/src/main/resources/templates/product.ftl b/spring-cloud/spring-cloud-ribbon/consumer/src/main/resources/templates/product.ftl new file mode 100644 index 0000000..729f516 --- /dev/null +++ b/spring-cloud/spring-cloud-ribbon/consumer/src/main/resources/templates/product.ftl @@ -0,0 +1,15 @@ + + + + 产品详情 + + +
    +
  • 产品名称:${product.name}
  • +
  • 产品序列号:${product.id}
  • +
  • 是否贵重品:${product.isPrecious?string('是','否')}
  • +
  • 生产日期: ${product.dateInProduced?string("yyyy-MM-dd HH:mm:ss")}
  • +
  • 产品价格:${product.price}
  • +
+ + diff --git a/spring-cloud/spring-cloud-ribbon/consumer/src/main/resources/templates/products.ftl b/spring-cloud/spring-cloud-ribbon/consumer/src/main/resources/templates/products.ftl new file mode 100644 index 0000000..214fac7 --- /dev/null +++ b/spring-cloud/spring-cloud-ribbon/consumer/src/main/resources/templates/products.ftl @@ -0,0 +1,16 @@ + + + + 产品列表 + + +

产品列表:点击查看详情

+ + + diff --git a/spring-cloud/spring-cloud-ribbon/consumer/src/test/java/com/heibaiying/consumer/ConsumerApplicationTests.java b/spring-cloud/spring-cloud-ribbon/consumer/src/test/java/com/heibaiying/consumer/ConsumerApplicationTests.java new file mode 100644 index 0000000..82f5399 --- /dev/null +++ b/spring-cloud/spring-cloud-ribbon/consumer/src/test/java/com/heibaiying/consumer/ConsumerApplicationTests.java @@ -0,0 +1,17 @@ +package com.heibaiying.consumer; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest +public class ConsumerApplicationTests { + + @Test + public void contextLoads() { + } + +} + diff --git a/spring-cloud/spring-cloud-ribbon/eureka/pom.xml b/spring-cloud/spring-cloud-ribbon/eureka/pom.xml new file mode 100644 index 0000000..05f297d --- /dev/null +++ b/spring-cloud/spring-cloud-ribbon/eureka/pom.xml @@ -0,0 +1,31 @@ + + + 4.0.0 + + + com.heibaiying + spring-cloud-ribbon + 0.0.1-SNAPSHOT + + + eureka + + + + org.springframework.cloud + spring-cloud-starter-netflix-eureka-server + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + + diff --git a/spring-cloud/spring-cloud-ribbon/eureka/src/main/java/com/heibaiying/eureka/EurekaApplication.java b/spring-cloud/spring-cloud-ribbon/eureka/src/main/java/com/heibaiying/eureka/EurekaApplication.java new file mode 100644 index 0000000..bd54938 --- /dev/null +++ b/spring-cloud/spring-cloud-ribbon/eureka/src/main/java/com/heibaiying/eureka/EurekaApplication.java @@ -0,0 +1,16 @@ +package com.heibaiying.eureka; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; + +@SpringBootApplication +@EnableEurekaServer +public class EurekaApplication { + + public static void main(String[] args) { + SpringApplication.run(EurekaApplication.class, args); + } + +} + diff --git a/spring-cloud/spring-cloud-ribbon/eureka/src/main/resources/application.yml b/spring-cloud/spring-cloud-ribbon/eureka/src/main/resources/application.yml new file mode 100644 index 0000000..817356d --- /dev/null +++ b/spring-cloud/spring-cloud-ribbon/eureka/src/main/resources/application.yml @@ -0,0 +1,12 @@ +server: + port: 8010 +eureka: + instance: + hostname: localhost + client: + # 设置为false,代表不向注册中心注册自己 + register-with-eureka: false + # 注册中心主要用于维护服务,并不需要检索服务,所以设置为false + fetch-registry: false + serviceUrl: + defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ \ No newline at end of file diff --git a/spring-cloud/spring-cloud-ribbon/eureka/src/test/java/com/heibaiying/eureka/EurekaApplicationTests.java b/spring-cloud/spring-cloud-ribbon/eureka/src/test/java/com/heibaiying/eureka/EurekaApplicationTests.java new file mode 100644 index 0000000..b3e2d73 --- /dev/null +++ b/spring-cloud/spring-cloud-ribbon/eureka/src/test/java/com/heibaiying/eureka/EurekaApplicationTests.java @@ -0,0 +1,17 @@ +package com.heibaiying.eureka; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest +public class EurekaApplicationTests { + + @Test + public void contextLoads() { + } + +} + diff --git a/spring-cloud/spring-cloud-ribbon/pom.xml b/spring-cloud/spring-cloud-ribbon/pom.xml new file mode 100644 index 0000000..afc8f0e --- /dev/null +++ b/spring-cloud/spring-cloud-ribbon/pom.xml @@ -0,0 +1,63 @@ + + + 4.0.0 + pom + + + org.springframework.boot + spring-boot-starter-parent + 2.1.2.RELEASE + + + + com.heibaiying + spring-cloud-ribbon + 0.0.1-SNAPSHOT + spring-cloud-ribbon + ribbon project for Spring Boot + + + eureka + common + consumer + producer + + + + 1.8 + Finchley.SR2 + + + + + org.springframework.boot + spring-boot-starter + + + + org.projectlombok + lombok + true + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.cloud + spring-cloud-dependencies + ${spring-cloud.version} + pom + import + + + + + + diff --git a/spring-cloud/spring-cloud-ribbon/producer/pom.xml b/spring-cloud/spring-cloud-ribbon/producer/pom.xml new file mode 100644 index 0000000..e62167a --- /dev/null +++ b/spring-cloud/spring-cloud-ribbon/producer/pom.xml @@ -0,0 +1,43 @@ + + + 4.0.0 + + + com.heibaiying + spring-cloud-ribbon + 0.0.1-SNAPSHOT + + + producer + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.cloud + spring-cloud-starter-netflix-eureka-client + + + + com.heibaiying.eureka + common + 0.0.1-SNAPSHOT + compile + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + + diff --git a/spring-cloud/spring-cloud-ribbon/producer/src/main/java/com/heibaiying/producer/ProducerApplication.java b/spring-cloud/spring-cloud-ribbon/producer/src/main/java/com/heibaiying/producer/ProducerApplication.java new file mode 100644 index 0000000..cb8e8fc --- /dev/null +++ b/spring-cloud/spring-cloud-ribbon/producer/src/main/java/com/heibaiying/producer/ProducerApplication.java @@ -0,0 +1,16 @@ +package com.heibaiying.producer; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; + +@SpringBootApplication +@EnableDiscoveryClient +public class ProducerApplication { + + public static void main(String[] args) { + SpringApplication.run(ProducerApplication.class, args); + } + +} + diff --git a/spring-cloud/spring-cloud-ribbon/producer/src/main/java/com/heibaiying/producer/controller/ProducerController.java b/spring-cloud/spring-cloud-ribbon/producer/src/main/java/com/heibaiying/producer/controller/ProducerController.java new file mode 100644 index 0000000..cdb597f --- /dev/null +++ b/spring-cloud/spring-cloud-ribbon/producer/src/main/java/com/heibaiying/producer/controller/ProducerController.java @@ -0,0 +1,31 @@ +package com.heibaiying.producer.controller; + + +import com.heibaiying.common.api.IProductService; +import com.heibaiying.common.bean.Product; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * @author : heibaiying + */ +@RestController +public class ProducerController { + + @Autowired + private IProductService productService; + + @RequestMapping("products") + public List productList() { + return productService.queryAllProducts(); + } + + @RequestMapping("product/{id}") + public Product productDetail(@PathVariable int id) { + return productService.queryProductById(id); + } +} diff --git a/spring-cloud/spring-cloud-ribbon/producer/src/main/java/com/heibaiying/producer/service/ProductService.java b/spring-cloud/spring-cloud-ribbon/producer/src/main/java/com/heibaiying/producer/service/ProductService.java new file mode 100644 index 0000000..e010634 --- /dev/null +++ b/spring-cloud/spring-cloud-ribbon/producer/src/main/java/com/heibaiying/producer/service/ProductService.java @@ -0,0 +1,39 @@ +package com.heibaiying.producer.service; + +import com.heibaiying.common.api.IProductService; +import com.heibaiying.common.bean.Product; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +/** + * @author : heibaiying + * @description : 产品提供接口实现类 + */ +@Service +public class ProductService implements IProductService { + + private static List productList = new ArrayList<>(); + + static { + for (int i = 0; i < 20; i++) { + productList.add(new Product(i, "产品" + i, i / 2 == 0, new Date(), 66.66f * i)); + } + } + + public Product queryProductById(int id) { + for (Product product : productList) { + if (product.getId() == id) { + return product; + } + } + return null; + } + + + public List queryAllProducts() { + return productList; + } +} diff --git a/spring-cloud/spring-cloud-ribbon/producer/src/main/resources/application.yml b/spring-cloud/spring-cloud-ribbon/producer/src/main/resources/application.yml new file mode 100644 index 0000000..86c3b51 --- /dev/null +++ b/spring-cloud/spring-cloud-ribbon/producer/src/main/resources/application.yml @@ -0,0 +1,11 @@ +server: + port: 8020 +# 指定服务命名 +spring: + application: + name: producer +# 指定注册中心地址 +eureka: + client: + serviceUrl: + defaultZone: http://localhost:8010/eureka/ diff --git a/spring-cloud/spring-cloud-ribbon/producer/src/test/java/com/heibaiying/producer/ProducerApplicationTests.java b/spring-cloud/spring-cloud-ribbon/producer/src/test/java/com/heibaiying/producer/ProducerApplicationTests.java new file mode 100644 index 0000000..54cac2d --- /dev/null +++ b/spring-cloud/spring-cloud-ribbon/producer/src/test/java/com/heibaiying/producer/ProducerApplicationTests.java @@ -0,0 +1,17 @@ +package com.heibaiying.producer; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest +public class ProducerApplicationTests { + + @Test + public void contextLoads() { + } + +} +