From ef4cb53451f28d7c6a19b88e0975f2e06b7d8eae Mon Sep 17 00:00:00 2001
From: quding
Date: Sun, 4 Jun 2017 11:00:52 +0800
Subject: [PATCH 01/15] Spring Cloud
---
.../Service-Discovery-Eureka/pom.xml | 28 +++++++
.../java/cn/mrdear/EurekaApplication.java | 17 +++++
.../src/main/resources/application.yml | 19 +++++
.../Service-Product-Consumer-Feign/pom.xml | 30 ++++++++
.../java/UserConsumeFeignApplication.java | 46 ++++++++++++
.../controller/ConsumeUserController.java | 41 +++++++++++
.../cn/medear/springcloud/entity/User.java | 25 +++++++
.../springcloud/restclient/UserClient.java | 20 +++++
.../src/main/resources/application.yml | 18 +++++
.../Service-Product-Consumer-Ribbon/pom.xml | 22 ++++++
.../springcloud/UserConsumeApplication.java | 19 +++++
.../mrdear/springcloud/config/BeanConfig.java | 22 ++++++
.../controller/ConsumeUserController.java | 25 +++++++
.../src/main/resources/application.yml | 18 +++++
.../Service-User-Provider/pom.xml | 47 ++++++++++++
.../main/java/cn/mrdear/UserApplication.java | 19 +++++
.../cn/mrdear/controller/UserController.java | 61 ++++++++++++++++
.../src/main/java/cn/mrdear/entity/User.java | 32 ++++++++
.../mrdear/resporitory/UserResporitory.java | 15 ++++
.../src/main/resources/application.yml | 20 +++++
.../src/main/resources/database/data.sql | 3 +
.../src/main/resources/database/schema.sql | 6 ++
Spring-Cloud-Demo/pom.xml | 73 +++++++++++++++++++
23 files changed, 626 insertions(+)
create mode 100644 Spring-Cloud-Demo/Service-Discovery-Eureka/pom.xml
create mode 100644 Spring-Cloud-Demo/Service-Discovery-Eureka/src/main/java/cn/mrdear/EurekaApplication.java
create mode 100644 Spring-Cloud-Demo/Service-Discovery-Eureka/src/main/resources/application.yml
create mode 100644 Spring-Cloud-Demo/Service-Product-Consumer-Feign/pom.xml
create mode 100644 Spring-Cloud-Demo/Service-Product-Consumer-Feign/src/main/java/UserConsumeFeignApplication.java
create mode 100644 Spring-Cloud-Demo/Service-Product-Consumer-Feign/src/main/java/cn/medear/springcloud/controller/ConsumeUserController.java
create mode 100644 Spring-Cloud-Demo/Service-Product-Consumer-Feign/src/main/java/cn/medear/springcloud/entity/User.java
create mode 100644 Spring-Cloud-Demo/Service-Product-Consumer-Feign/src/main/java/cn/medear/springcloud/restclient/UserClient.java
create mode 100644 Spring-Cloud-Demo/Service-Product-Consumer-Feign/src/main/resources/application.yml
create mode 100644 Spring-Cloud-Demo/Service-Product-Consumer-Ribbon/pom.xml
create mode 100644 Spring-Cloud-Demo/Service-Product-Consumer-Ribbon/src/main/java/cn/mrdear/springcloud/UserConsumeApplication.java
create mode 100644 Spring-Cloud-Demo/Service-Product-Consumer-Ribbon/src/main/java/cn/mrdear/springcloud/config/BeanConfig.java
create mode 100644 Spring-Cloud-Demo/Service-Product-Consumer-Ribbon/src/main/java/cn/mrdear/springcloud/controller/ConsumeUserController.java
create mode 100644 Spring-Cloud-Demo/Service-Product-Consumer-Ribbon/src/main/resources/application.yml
create mode 100644 Spring-Cloud-Demo/Service-User-Provider/pom.xml
create mode 100644 Spring-Cloud-Demo/Service-User-Provider/src/main/java/cn/mrdear/UserApplication.java
create mode 100644 Spring-Cloud-Demo/Service-User-Provider/src/main/java/cn/mrdear/controller/UserController.java
create mode 100644 Spring-Cloud-Demo/Service-User-Provider/src/main/java/cn/mrdear/entity/User.java
create mode 100644 Spring-Cloud-Demo/Service-User-Provider/src/main/java/cn/mrdear/resporitory/UserResporitory.java
create mode 100644 Spring-Cloud-Demo/Service-User-Provider/src/main/resources/application.yml
create mode 100644 Spring-Cloud-Demo/Service-User-Provider/src/main/resources/database/data.sql
create mode 100644 Spring-Cloud-Demo/Service-User-Provider/src/main/resources/database/schema.sql
create mode 100644 Spring-Cloud-Demo/pom.xml
diff --git a/Spring-Cloud-Demo/Service-Discovery-Eureka/pom.xml b/Spring-Cloud-Demo/Service-Discovery-Eureka/pom.xml
new file mode 100644
index 0000000..9d30f7b
--- /dev/null
+++ b/Spring-Cloud-Demo/Service-Discovery-Eureka/pom.xml
@@ -0,0 +1,28 @@
+
+
+
+ cn.mrdear.springcloud
+ springcloud-parent
+ 1.0.0
+
+ 4.0.0
+ service-discovery-eureka
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-eureka-server
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+
+
+
\ No newline at end of file
diff --git a/Spring-Cloud-Demo/Service-Discovery-Eureka/src/main/java/cn/mrdear/EurekaApplication.java b/Spring-Cloud-Demo/Service-Discovery-Eureka/src/main/java/cn/mrdear/EurekaApplication.java
new file mode 100644
index 0000000..b60fdc0
--- /dev/null
+++ b/Spring-Cloud-Demo/Service-Discovery-Eureka/src/main/java/cn/mrdear/EurekaApplication.java
@@ -0,0 +1,17 @@
+package cn.mrdear;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
+
+/**
+ * @author Niu Li
+ * @since 2017/5/25
+ */
+@EnableEurekaServer//启动服务注册中心
+@SpringBootApplication
+public class EurekaApplication {
+ public static void main(String[] args) {
+ SpringApplication.run(EurekaApplication.class,args);
+ }
+}
diff --git a/Spring-Cloud-Demo/Service-Discovery-Eureka/src/main/resources/application.yml b/Spring-Cloud-Demo/Service-Discovery-Eureka/src/main/resources/application.yml
new file mode 100644
index 0000000..4bb275e
--- /dev/null
+++ b/Spring-Cloud-Demo/Service-Discovery-Eureka/src/main/resources/application.yml
@@ -0,0 +1,19 @@
+
+server:
+ port: 8761
+
+spring:
+ application:
+ name: eureka-server
+
+eureka:
+ instance:
+ hostname: localhost
+ prefer-ip-address: true
+ client:
+ register-with-eureka: false
+ fetch-registry: false
+ service-url:
+ defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
+
+
diff --git a/Spring-Cloud-Demo/Service-Product-Consumer-Feign/pom.xml b/Spring-Cloud-Demo/Service-Product-Consumer-Feign/pom.xml
new file mode 100644
index 0000000..57785b7
--- /dev/null
+++ b/Spring-Cloud-Demo/Service-Product-Consumer-Feign/pom.xml
@@ -0,0 +1,30 @@
+
+
+
+ springcloud-parent
+ cn.mrdear.springcloud
+ 1.0.0
+
+ 4.0.0
+
+ cn.mrdear.springcloud
+ Service-Product-Consumer-Feign
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-feign
+
+
+ io.github.openfeign
+ feign-httpclient
+ 9.5.0
+
+
+ org.springframework.cloud
+ spring-cloud-starter-eureka
+
+
+
\ No newline at end of file
diff --git a/Spring-Cloud-Demo/Service-Product-Consumer-Feign/src/main/java/UserConsumeFeignApplication.java b/Spring-Cloud-Demo/Service-Product-Consumer-Feign/src/main/java/UserConsumeFeignApplication.java
new file mode 100644
index 0000000..7ad8139
--- /dev/null
+++ b/Spring-Cloud-Demo/Service-Product-Consumer-Feign/src/main/java/UserConsumeFeignApplication.java
@@ -0,0 +1,46 @@
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.config.RequestConfig;
+import org.apache.http.config.RegistryBuilder;
+import org.apache.http.conn.socket.ConnectionSocketFactory;
+import org.apache.http.conn.socket.PlainConnectionSocketFactory;
+import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClientBuilder;
+import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
+import org.springframework.cloud.netflix.feign.EnableFeignClients;
+import org.springframework.context.annotation.Bean;
+
+
+/**
+ * @author Niu Li
+ * @since 2017/6/3
+ */
+@SpringBootApplication(scanBasePackages = "cn.medear.springcloud.controller")
+@EnableDiscoveryClient
+@EnableFeignClients(basePackages = "cn.medear.springcloud.restclient")
+public class UserConsumeFeignApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(UserConsumeFeignApplication.class, args);
+ }
+
+ /**
+ * 自定义feign的Httpclient,其注入在HttpClientFeignLoadBalancedConfiguration中
+ * @return
+ */
+ @Bean
+ public HttpClient feignHttpClient() {
+ PoolingHttpClientConnectionManager HTTP_CLIENT_CONNECTION_MANAGER =
+ new PoolingHttpClientConnectionManager(RegistryBuilder.create().register("http", PlainConnectionSocketFactory.getSocketFactory()).register("https", SSLConnectionSocketFactory.getSocketFactory()).build());
+ HTTP_CLIENT_CONNECTION_MANAGER.setDefaultMaxPerRoute(100);
+ HTTP_CLIENT_CONNECTION_MANAGER.setMaxTotal(200);
+ RequestConfig requestConfig = RequestConfig.custom().setConnectionRequestTimeout(60000).setConnectTimeout(60000).setSocketTimeout(60000).build();
+ CloseableHttpClient httpClient = HttpClientBuilder.create()
+ .setConnectionManager(HTTP_CLIENT_CONNECTION_MANAGER)
+ .setDefaultRequestConfig(requestConfig).build();
+ return httpClient;
+ }
+}
diff --git a/Spring-Cloud-Demo/Service-Product-Consumer-Feign/src/main/java/cn/medear/springcloud/controller/ConsumeUserController.java b/Spring-Cloud-Demo/Service-Product-Consumer-Feign/src/main/java/cn/medear/springcloud/controller/ConsumeUserController.java
new file mode 100644
index 0000000..e53e366
--- /dev/null
+++ b/Spring-Cloud-Demo/Service-Product-Consumer-Feign/src/main/java/cn/medear/springcloud/controller/ConsumeUserController.java
@@ -0,0 +1,41 @@
+package cn.medear.springcloud.controller;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+import cn.medear.springcloud.entity.User;
+import cn.medear.springcloud.restclient.UserClient;
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * 用于消费UserService的类
+ * @author Niu Li
+ * @since 2017/6/3
+ */
+@RestController
+@Slf4j
+public class ConsumeUserController {
+
+ @Resource
+ private UserClient userClient;
+
+ private static final ObjectMapper objectMapper = new ObjectMapper();
+
+ @GetMapping("/{id}")
+ public String findUserById(@PathVariable Long id) {
+ User user = userClient.findById(id);
+ String valueAsString = null;
+ try {
+ valueAsString = objectMapper.writeValueAsString(user);
+ } catch (JsonProcessingException e) {
+ log.error("parse json error. {}",e);
+ }
+ return valueAsString;
+ }
+}
diff --git a/Spring-Cloud-Demo/Service-Product-Consumer-Feign/src/main/java/cn/medear/springcloud/entity/User.java b/Spring-Cloud-Demo/Service-Product-Consumer-Feign/src/main/java/cn/medear/springcloud/entity/User.java
new file mode 100644
index 0000000..2dc8e22
--- /dev/null
+++ b/Spring-Cloud-Demo/Service-Product-Consumer-Feign/src/main/java/cn/medear/springcloud/entity/User.java
@@ -0,0 +1,25 @@
+package cn.medear.springcloud.entity;
+
+import java.io.Serializable;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
+
+/**
+ * @author Niu Li
+ * @since 2017/6/3
+ */
+@Data
+@NoArgsConstructor
+@ToString
+public class User implements Serializable{
+
+ private static final long serialVersionUID = -2885884654600114856L;
+
+ private Long id;
+
+ private String username;
+
+ private String password;
+}
diff --git a/Spring-Cloud-Demo/Service-Product-Consumer-Feign/src/main/java/cn/medear/springcloud/restclient/UserClient.java b/Spring-Cloud-Demo/Service-Product-Consumer-Feign/src/main/java/cn/medear/springcloud/restclient/UserClient.java
new file mode 100644
index 0000000..28606ea
--- /dev/null
+++ b/Spring-Cloud-Demo/Service-Product-Consumer-Feign/src/main/java/cn/medear/springcloud/restclient/UserClient.java
@@ -0,0 +1,20 @@
+package cn.medear.springcloud.restclient;
+
+import org.springframework.cloud.netflix.feign.FeignClient;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+
+import cn.medear.springcloud.entity.User;
+
+/**
+ * @author Niu Li
+ * @since 2017/6/4
+ */
+@FeignClient("service-user-provider")
+public interface UserClient {
+
+ @RequestMapping(value = "/{id}",method = RequestMethod.GET)
+ User findById(@PathVariable("id") Long id);
+
+}
diff --git a/Spring-Cloud-Demo/Service-Product-Consumer-Feign/src/main/resources/application.yml b/Spring-Cloud-Demo/Service-Product-Consumer-Feign/src/main/resources/application.yml
new file mode 100644
index 0000000..7495a61
--- /dev/null
+++ b/Spring-Cloud-Demo/Service-Product-Consumer-Feign/src/main/resources/application.yml
@@ -0,0 +1,18 @@
+server:
+ port: 8085
+
+spring:
+ application:
+ name: service-product-consumer-fegin
+
+eureka:
+ client:
+ service-url:
+ default-zone: http://localhost:8761/eureka/
+ instance:
+ prefer-ip-address: true
+
+feign:
+ httpclient:
+ enabled: true
+
diff --git a/Spring-Cloud-Demo/Service-Product-Consumer-Ribbon/pom.xml b/Spring-Cloud-Demo/Service-Product-Consumer-Ribbon/pom.xml
new file mode 100644
index 0000000..5418098
--- /dev/null
+++ b/Spring-Cloud-Demo/Service-Product-Consumer-Ribbon/pom.xml
@@ -0,0 +1,22 @@
+
+
+
+ springcloud-parent
+ cn.mrdear.springcloud
+ 1.0.0
+
+ 4.0.0
+
+ cn.mrdear.springcloud
+ Service-Product-Consumer-Ribbon
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-eureka
+
+
+
+
\ No newline at end of file
diff --git a/Spring-Cloud-Demo/Service-Product-Consumer-Ribbon/src/main/java/cn/mrdear/springcloud/UserConsumeApplication.java b/Spring-Cloud-Demo/Service-Product-Consumer-Ribbon/src/main/java/cn/mrdear/springcloud/UserConsumeApplication.java
new file mode 100644
index 0000000..5366289
--- /dev/null
+++ b/Spring-Cloud-Demo/Service-Product-Consumer-Ribbon/src/main/java/cn/mrdear/springcloud/UserConsumeApplication.java
@@ -0,0 +1,19 @@
+package cn.mrdear.springcloud;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
+
+/**
+ * @author Niu Li
+ * @since 2017/6/3
+ */
+@SpringBootApplication
+@EnableDiscoveryClient
+public class UserConsumeApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(UserConsumeApplication.class,args);
+ }
+
+}
diff --git a/Spring-Cloud-Demo/Service-Product-Consumer-Ribbon/src/main/java/cn/mrdear/springcloud/config/BeanConfig.java b/Spring-Cloud-Demo/Service-Product-Consumer-Ribbon/src/main/java/cn/mrdear/springcloud/config/BeanConfig.java
new file mode 100644
index 0000000..13e312c
--- /dev/null
+++ b/Spring-Cloud-Demo/Service-Product-Consumer-Ribbon/src/main/java/cn/mrdear/springcloud/config/BeanConfig.java
@@ -0,0 +1,22 @@
+package cn.mrdear.springcloud.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 Niu Li
+ * @since 2017/6/3
+ */
+@Configuration
+//@RibbonClient(name = "user-resporitory",configuration = MyConfig.class)
+//可以指定针对某服务器采取指定的配置负载均衡算法,配置文件中配置更加方便
+public class BeanConfig {
+
+ @Bean
+ @LoadBalanced //开启客户端负载均衡,自动配置类在LoadBalancerAutoConfiguration中
+ public RestTemplate restTemplate(){
+ return new RestTemplate();
+ }
+}
diff --git a/Spring-Cloud-Demo/Service-Product-Consumer-Ribbon/src/main/java/cn/mrdear/springcloud/controller/ConsumeUserController.java b/Spring-Cloud-Demo/Service-Product-Consumer-Ribbon/src/main/java/cn/mrdear/springcloud/controller/ConsumeUserController.java
new file mode 100644
index 0000000..a839637
--- /dev/null
+++ b/Spring-Cloud-Demo/Service-Product-Consumer-Ribbon/src/main/java/cn/mrdear/springcloud/controller/ConsumeUserController.java
@@ -0,0 +1,25 @@
+package cn.mrdear.springcloud.controller;
+
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.client.RestTemplate;
+
+import javax.annotation.Resource;
+
+/**
+ * 用于消费UserService的类
+ * @author Niu Li
+ * @since 2017/6/3
+ */
+@RestController
+public class ConsumeUserController {
+
+ @Resource
+ private RestTemplate restTemplate;
+
+ @GetMapping("/{id}")
+ public String findUserById(@PathVariable Long id) {
+ return restTemplate.getForObject("http://service-user-provider/"+id,String.class);
+ }
+}
diff --git a/Spring-Cloud-Demo/Service-Product-Consumer-Ribbon/src/main/resources/application.yml b/Spring-Cloud-Demo/Service-Product-Consumer-Ribbon/src/main/resources/application.yml
new file mode 100644
index 0000000..5a8b8f1
--- /dev/null
+++ b/Spring-Cloud-Demo/Service-Product-Consumer-Ribbon/src/main/resources/application.yml
@@ -0,0 +1,18 @@
+server:
+ port: 8082
+
+spring:
+ application:
+ name: service-product-consumer-ribbon
+
+eureka:
+ client:
+ service-url:
+ default-zone: http://localhost:8761/eureka/
+ instance:
+ prefer-ip-address: true
+
+# 负载均衡配置为随机,不配置默认轮询
+user-resporitory:
+ ribbon:
+ NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
diff --git a/Spring-Cloud-Demo/Service-User-Provider/pom.xml b/Spring-Cloud-Demo/Service-User-Provider/pom.xml
new file mode 100644
index 0000000..e1b37bb
--- /dev/null
+++ b/Spring-Cloud-Demo/Service-User-Provider/pom.xml
@@ -0,0 +1,47 @@
+
+
+
+ springcloud-parent
+ cn.mrdear.springcloud
+ 1.0.0
+
+ 4.0.0
+
+ cn.mrdear.springcloud
+ Service-User-Provider
+
+
+
+
+ com.h2database
+ h2
+ runtime
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+ org.springframework.boot
+ spring-boot-starter-data-jpa
+
+
+ org.springframework.cloud
+ spring-cloud-starter-eureka
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+
+
+
+
\ No newline at end of file
diff --git a/Spring-Cloud-Demo/Service-User-Provider/src/main/java/cn/mrdear/UserApplication.java b/Spring-Cloud-Demo/Service-User-Provider/src/main/java/cn/mrdear/UserApplication.java
new file mode 100644
index 0000000..acfdfec
--- /dev/null
+++ b/Spring-Cloud-Demo/Service-User-Provider/src/main/java/cn/mrdear/UserApplication.java
@@ -0,0 +1,19 @@
+package cn.mrdear;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
+
+/**
+ * @author Niu Li
+ * @since 2017/5/25
+ */
+@EnableDiscoveryClient
+@SpringBootApplication
+public class UserApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(UserApplication.class,args);
+ }
+
+}
diff --git a/Spring-Cloud-Demo/Service-User-Provider/src/main/java/cn/mrdear/controller/UserController.java b/Spring-Cloud-Demo/Service-User-Provider/src/main/java/cn/mrdear/controller/UserController.java
new file mode 100644
index 0000000..4135af0
--- /dev/null
+++ b/Spring-Cloud-Demo/Service-User-Provider/src/main/java/cn/mrdear/controller/UserController.java
@@ -0,0 +1,61 @@
+package cn.mrdear.controller;
+
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.cloud.client.ServiceInstance;
+import org.springframework.cloud.client.discovery.DiscoveryClient;
+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.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+import javax.annotation.Resource;
+
+import cn.mrdear.entity.User;
+import cn.mrdear.resporitory.UserResporitory;
+
+/**
+ * @author Niu Li
+ * @since 2017/5/25
+ */
+@RestController
+public class UserController {
+
+ @Value("${spring.application.name}")
+ private String serverName;
+
+ @Resource
+ private UserResporitory userResporitory;
+
+ @Resource
+ private DiscoveryClient discoveryClient;
+
+ @RequestMapping(value = "/add" ,method = RequestMethod.GET)
+ public User add(String username,String password) {
+ User user = new User();
+ user.setUsername(username);
+ user.setPassword(password);
+ userResporitory.saveAndFlush(user);
+ return user;
+ }
+
+ @GetMapping("/{id}")
+ public User find(@PathVariable Long id) {
+ return userResporitory.findOne(id);
+ }
+
+ @GetMapping("/list")
+ public List findAll(){
+ return userResporitory.findAll();
+ }
+
+ @GetMapping("/console")
+ public List console(){
+ List instances = discoveryClient.getInstances(serverName);
+ return instances;
+ }
+
+}
diff --git a/Spring-Cloud-Demo/Service-User-Provider/src/main/java/cn/mrdear/entity/User.java b/Spring-Cloud-Demo/Service-User-Provider/src/main/java/cn/mrdear/entity/User.java
new file mode 100644
index 0000000..fb3e22c
--- /dev/null
+++ b/Spring-Cloud-Demo/Service-User-Provider/src/main/java/cn/mrdear/entity/User.java
@@ -0,0 +1,32 @@
+package cn.mrdear.entity;
+
+import java.io.Serializable;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
+
+/**
+ * @author Niu Li
+ * @since 2017/6/3
+ */
+@Data
+@NoArgsConstructor
+@ToString
+@Entity
+public class User implements Serializable{
+
+ private static final long serialVersionUID = -2885884654600114856L;
+
+ @Id
+ @GeneratedValue
+ private Long id;
+
+ private String username;
+
+ private String password;
+}
diff --git a/Spring-Cloud-Demo/Service-User-Provider/src/main/java/cn/mrdear/resporitory/UserResporitory.java b/Spring-Cloud-Demo/Service-User-Provider/src/main/java/cn/mrdear/resporitory/UserResporitory.java
new file mode 100644
index 0000000..36ec6bd
--- /dev/null
+++ b/Spring-Cloud-Demo/Service-User-Provider/src/main/java/cn/mrdear/resporitory/UserResporitory.java
@@ -0,0 +1,15 @@
+package cn.mrdear.resporitory;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+import cn.mrdear.entity.User;
+
+/**
+ * @author Niu Li
+ * @since 2017/6/3
+ */
+@Repository
+public interface UserResporitory extends JpaRepository{
+
+}
diff --git a/Spring-Cloud-Demo/Service-User-Provider/src/main/resources/application.yml b/Spring-Cloud-Demo/Service-User-Provider/src/main/resources/application.yml
new file mode 100644
index 0000000..dec0aa8
--- /dev/null
+++ b/Spring-Cloud-Demo/Service-User-Provider/src/main/resources/application.yml
@@ -0,0 +1,20 @@
+server:
+ port: 8083
+spring:
+ application:
+ name: service-user-provider
+ jpa:
+ generate-ddl: false
+ show-sql: true
+ hibernate:
+ ddl-auto: none
+ datasource:
+ platform: h2
+ schema: classpath:database/schema.sql
+ data: classpath:database/data.sql
+eureka:
+ client:
+ service-url:
+ default-zone: http://localhost:8761/eureka/
+ instance:
+ prefer-ip-address: true
\ No newline at end of file
diff --git a/Spring-Cloud-Demo/Service-User-Provider/src/main/resources/database/data.sql b/Spring-Cloud-Demo/Service-User-Provider/src/main/resources/database/data.sql
new file mode 100644
index 0000000..8d203ef
--- /dev/null
+++ b/Spring-Cloud-Demo/Service-User-Provider/src/main/resources/database/data.sql
@@ -0,0 +1,3 @@
+INSERT INTO user(username,password) VALUES ('张三','111111');
+INSERT INTO user(username,password) VALUES ('李四','111111');
+INSERT INTO user(username,password) VALUES ('王二','111111');
\ No newline at end of file
diff --git a/Spring-Cloud-Demo/Service-User-Provider/src/main/resources/database/schema.sql b/Spring-Cloud-Demo/Service-User-Provider/src/main/resources/database/schema.sql
new file mode 100644
index 0000000..737b628
--- /dev/null
+++ b/Spring-Cloud-Demo/Service-User-Provider/src/main/resources/database/schema.sql
@@ -0,0 +1,6 @@
+drop table user if exists;
+create table user (
+ id INT(11) AUTO_INCREMENT PRIMARY KEY ,
+ username VARCHAR(255),
+ password VARCHAR(255)
+ );
\ No newline at end of file
diff --git a/Spring-Cloud-Demo/pom.xml b/Spring-Cloud-Demo/pom.xml
new file mode 100644
index 0000000..01ab607
--- /dev/null
+++ b/Spring-Cloud-Demo/pom.xml
@@ -0,0 +1,73 @@
+
+
+ 4.0.0
+
+ cn.mrdear.springcloud
+ springcloud-parent
+ pom
+ 1.0.0
+
+
+ Service-Discovery-Eureka
+ Service-User-Provider
+ Service-Product-Consumer-Ribbon
+ Service-Product-Consumer-Feign
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 1.5.2.RELEASE
+
+
+
+ Dalston.SR1
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+ org.projectlombok
+ lombok
+
+
+
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-dependencies
+ ${spring.cloud.version}
+ pom
+ import
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.6.1
+
+ 1.8
+ 1.8
+ 1.8
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
\ No newline at end of file
From 0fc097f900c4afd22ba18c4c3ed5ddd099d21311 Mon Sep 17 00:00:00 2001
From: quding
Date: Sun, 4 Jun 2017 11:04:16 +0800
Subject: [PATCH 02/15] readme
---
README.MD | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/README.MD b/README.MD
index 5f8d063..e9d7053 100644
--- a/README.MD
+++ b/README.MD
@@ -51,5 +51,9 @@ SpringDataJPA+QueryDSL使用,需要配合博客博文http://www.jianshu.com/p/e3
--------------
SpringDataRedis学习的一个Demo,内容不多,配合博文:[redis学习记录(四)-SpringDataRedis分析](http://mrdear.cn/2017/03/29/linux/redis%E5%AD%A6%E4%B9%A0%E8%AE%B0%E5%BD%95(%E5%9B%9B)-SpringDataRedis%E5%88%86%E6%9E%90/)可以很好的入手
-12.待添加
+12.Spring-Cloud-Demo
+--------------
+学习Spring Cloud的一个Demo,其中对于Eureka,Ribbon,Feign等都有相应的Demo,相应博文会更新在[我的博客](mrdear.cn)上,希望对你有帮助
+
+13.待添加
--------------
From 93b4c65d0f3c9d09353af12f7484b569588d5e74 Mon Sep 17 00:00:00 2001
From: quding
Date: Sun, 4 Jun 2017 13:39:25 +0800
Subject: [PATCH 03/15] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=96=AD=E8=B7=AF?=
=?UTF-8?q?=E5=99=A8=20Demo?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../pom.xml | 25 +++++++++++
.../UserConsumeFeignHystrixApplication.java | 19 +++++++++
.../controller/ConsumeUserController.java | 41 +++++++++++++++++++
.../cn/medear/springcloud/entity/User.java | 25 +++++++++++
.../springcloud/restclient/UserClient.java | 21 ++++++++++
.../failback/UserClientFailBack.java | 40 ++++++++++++++++++
.../src/main/resources/application.yml | 24 +++++++++++
.../src/main/resources/application.yml | 5 +++
.../src/main/resources/application.yml | 2 +-
Spring-Cloud-Demo/pom.xml | 1 +
10 files changed, 202 insertions(+), 1 deletion(-)
create mode 100644 Spring-Cloud-Demo/Service-Product-Consumer-Feign-Hystrix/pom.xml
create mode 100644 Spring-Cloud-Demo/Service-Product-Consumer-Feign-Hystrix/src/main/java/UserConsumeFeignHystrixApplication.java
create mode 100644 Spring-Cloud-Demo/Service-Product-Consumer-Feign-Hystrix/src/main/java/cn/medear/springcloud/controller/ConsumeUserController.java
create mode 100644 Spring-Cloud-Demo/Service-Product-Consumer-Feign-Hystrix/src/main/java/cn/medear/springcloud/entity/User.java
create mode 100644 Spring-Cloud-Demo/Service-Product-Consumer-Feign-Hystrix/src/main/java/cn/medear/springcloud/restclient/UserClient.java
create mode 100644 Spring-Cloud-Demo/Service-Product-Consumer-Feign-Hystrix/src/main/java/cn/medear/springcloud/restclient/failback/UserClientFailBack.java
create mode 100644 Spring-Cloud-Demo/Service-Product-Consumer-Feign-Hystrix/src/main/resources/application.yml
diff --git a/Spring-Cloud-Demo/Service-Product-Consumer-Feign-Hystrix/pom.xml b/Spring-Cloud-Demo/Service-Product-Consumer-Feign-Hystrix/pom.xml
new file mode 100644
index 0000000..7a1f4b0
--- /dev/null
+++ b/Spring-Cloud-Demo/Service-Product-Consumer-Feign-Hystrix/pom.xml
@@ -0,0 +1,25 @@
+
+
+
+ springcloud-parent
+ cn.mrdear.springcloud
+ 1.0.0
+
+ 4.0.0
+
+ cn.mrdear.springcloud
+ Service-Product-Consumer-Feign-Hystrix
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-feign
+
+
+ org.springframework.cloud
+ spring-cloud-starter-eureka
+
+
+
\ No newline at end of file
diff --git a/Spring-Cloud-Demo/Service-Product-Consumer-Feign-Hystrix/src/main/java/UserConsumeFeignHystrixApplication.java b/Spring-Cloud-Demo/Service-Product-Consumer-Feign-Hystrix/src/main/java/UserConsumeFeignHystrixApplication.java
new file mode 100644
index 0000000..e9f93d4
--- /dev/null
+++ b/Spring-Cloud-Demo/Service-Product-Consumer-Feign-Hystrix/src/main/java/UserConsumeFeignHystrixApplication.java
@@ -0,0 +1,19 @@
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
+import org.springframework.cloud.netflix.feign.EnableFeignClients;
+
+
+/**
+ * @author Niu Li
+ * @since 2017/6/3
+ */
+@SpringBootApplication(scanBasePackages = "cn.medear.springcloud")
+@EnableDiscoveryClient
+@EnableFeignClients(basePackages = "cn.medear.springcloud.restclient")
+public class UserConsumeFeignHystrixApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(UserConsumeFeignHystrixApplication.class, args);
+ }
+}
diff --git a/Spring-Cloud-Demo/Service-Product-Consumer-Feign-Hystrix/src/main/java/cn/medear/springcloud/controller/ConsumeUserController.java b/Spring-Cloud-Demo/Service-Product-Consumer-Feign-Hystrix/src/main/java/cn/medear/springcloud/controller/ConsumeUserController.java
new file mode 100644
index 0000000..e53e366
--- /dev/null
+++ b/Spring-Cloud-Demo/Service-Product-Consumer-Feign-Hystrix/src/main/java/cn/medear/springcloud/controller/ConsumeUserController.java
@@ -0,0 +1,41 @@
+package cn.medear.springcloud.controller;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+import cn.medear.springcloud.entity.User;
+import cn.medear.springcloud.restclient.UserClient;
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * 用于消费UserService的类
+ * @author Niu Li
+ * @since 2017/6/3
+ */
+@RestController
+@Slf4j
+public class ConsumeUserController {
+
+ @Resource
+ private UserClient userClient;
+
+ private static final ObjectMapper objectMapper = new ObjectMapper();
+
+ @GetMapping("/{id}")
+ public String findUserById(@PathVariable Long id) {
+ User user = userClient.findById(id);
+ String valueAsString = null;
+ try {
+ valueAsString = objectMapper.writeValueAsString(user);
+ } catch (JsonProcessingException e) {
+ log.error("parse json error. {}",e);
+ }
+ return valueAsString;
+ }
+}
diff --git a/Spring-Cloud-Demo/Service-Product-Consumer-Feign-Hystrix/src/main/java/cn/medear/springcloud/entity/User.java b/Spring-Cloud-Demo/Service-Product-Consumer-Feign-Hystrix/src/main/java/cn/medear/springcloud/entity/User.java
new file mode 100644
index 0000000..2dc8e22
--- /dev/null
+++ b/Spring-Cloud-Demo/Service-Product-Consumer-Feign-Hystrix/src/main/java/cn/medear/springcloud/entity/User.java
@@ -0,0 +1,25 @@
+package cn.medear.springcloud.entity;
+
+import java.io.Serializable;
+
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
+
+/**
+ * @author Niu Li
+ * @since 2017/6/3
+ */
+@Data
+@NoArgsConstructor
+@ToString
+public class User implements Serializable{
+
+ private static final long serialVersionUID = -2885884654600114856L;
+
+ private Long id;
+
+ private String username;
+
+ private String password;
+}
diff --git a/Spring-Cloud-Demo/Service-Product-Consumer-Feign-Hystrix/src/main/java/cn/medear/springcloud/restclient/UserClient.java b/Spring-Cloud-Demo/Service-Product-Consumer-Feign-Hystrix/src/main/java/cn/medear/springcloud/restclient/UserClient.java
new file mode 100644
index 0000000..2d75906
--- /dev/null
+++ b/Spring-Cloud-Demo/Service-Product-Consumer-Feign-Hystrix/src/main/java/cn/medear/springcloud/restclient/UserClient.java
@@ -0,0 +1,21 @@
+package cn.medear.springcloud.restclient;
+
+import org.springframework.cloud.netflix.feign.FeignClient;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+
+import cn.medear.springcloud.entity.User;
+import cn.medear.springcloud.restclient.failback.UserClientFailBack;
+
+/**
+ * @author Niu Li
+ * @since 2017/6/4
+ */
+@FeignClient(name = "service-user-provider",fallbackFactory = UserClientFailBack.class)
+public interface UserClient {
+
+ @RequestMapping(value = "/{id}",method = RequestMethod.GET)
+ User findById(@PathVariable("id") Long id);
+
+}
diff --git a/Spring-Cloud-Demo/Service-Product-Consumer-Feign-Hystrix/src/main/java/cn/medear/springcloud/restclient/failback/UserClientFailBack.java b/Spring-Cloud-Demo/Service-Product-Consumer-Feign-Hystrix/src/main/java/cn/medear/springcloud/restclient/failback/UserClientFailBack.java
new file mode 100644
index 0000000..4004042
--- /dev/null
+++ b/Spring-Cloud-Demo/Service-Product-Consumer-Feign-Hystrix/src/main/java/cn/medear/springcloud/restclient/failback/UserClientFailBack.java
@@ -0,0 +1,40 @@
+package cn.medear.springcloud.restclient.failback;
+
+import org.springframework.stereotype.Component;
+
+import cn.medear.springcloud.entity.User;
+import cn.medear.springcloud.restclient.UserClient;
+import feign.hystrix.FallbackFactory;
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * 用户调用断路器
+ * @author Niu Li
+ * @since 2017/6/4
+ */
+@Slf4j
+@Component
+public class UserClientFailBack implements FallbackFactory{
+
+ private static UserClient userClient = new UserClientFailBackWithInfo();
+
+ /**
+ * 错误返回内容配置
+ */
+ @Override
+ public UserClient create(Throwable throwable) {
+ log.error("UserClient hystrix open,error is {}",throwable.getMessage());
+ return userClient;
+ }
+
+
+ private static class UserClientFailBackWithInfo implements UserClient{
+ @Override
+ public User findById(Long id) {
+ User user = new User();
+ user.setId(0L);
+ user.setUsername("失败用户");
+ return user;
+ }
+ }
+}
diff --git a/Spring-Cloud-Demo/Service-Product-Consumer-Feign-Hystrix/src/main/resources/application.yml b/Spring-Cloud-Demo/Service-Product-Consumer-Feign-Hystrix/src/main/resources/application.yml
new file mode 100644
index 0000000..729bcbe
--- /dev/null
+++ b/Spring-Cloud-Demo/Service-Product-Consumer-Feign-Hystrix/src/main/resources/application.yml
@@ -0,0 +1,24 @@
+server:
+ port: 8086
+
+spring:
+ application:
+ name: service-product-consumer-fegin-hystrix
+
+eureka:
+ client:
+ service-url:
+ default-zone: http://localhost:8761/eureka/
+ instance:
+ prefer-ip-address: true
+
+#开启断路器
+feign:
+ hystrix:
+ enabled: true
+
+# 负载均衡配置为随机,不配置默认轮询
+service-user-provider:
+ ribbon:
+ NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
+
diff --git a/Spring-Cloud-Demo/Service-Product-Consumer-Feign/src/main/resources/application.yml b/Spring-Cloud-Demo/Service-Product-Consumer-Feign/src/main/resources/application.yml
index 7495a61..a57867d 100644
--- a/Spring-Cloud-Demo/Service-Product-Consumer-Feign/src/main/resources/application.yml
+++ b/Spring-Cloud-Demo/Service-Product-Consumer-Feign/src/main/resources/application.yml
@@ -16,3 +16,8 @@ feign:
httpclient:
enabled: true
+# 负载均衡配置为随机,不配置默认轮询
+service-user-provider:
+ ribbon:
+ NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
+
diff --git a/Spring-Cloud-Demo/Service-Product-Consumer-Ribbon/src/main/resources/application.yml b/Spring-Cloud-Demo/Service-Product-Consumer-Ribbon/src/main/resources/application.yml
index 5a8b8f1..efa8d13 100644
--- a/Spring-Cloud-Demo/Service-Product-Consumer-Ribbon/src/main/resources/application.yml
+++ b/Spring-Cloud-Demo/Service-Product-Consumer-Ribbon/src/main/resources/application.yml
@@ -13,6 +13,6 @@ eureka:
prefer-ip-address: true
# 负载均衡配置为随机,不配置默认轮询
-user-resporitory:
+service-user-provider:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
diff --git a/Spring-Cloud-Demo/pom.xml b/Spring-Cloud-Demo/pom.xml
index 01ab607..9b0ac77 100644
--- a/Spring-Cloud-Demo/pom.xml
+++ b/Spring-Cloud-Demo/pom.xml
@@ -14,6 +14,7 @@
Service-User-Provider
Service-Product-Consumer-Ribbon
Service-Product-Consumer-Feign
+ Service-Product-Consumer-Feign-Hystrix
From d0e943a204a7835ec71a824bc19f107f807bfb7f Mon Sep 17 00:00:00 2001
From: quding
Date: Tue, 13 Jun 2017 16:21:41 +0800
Subject: [PATCH 04/15] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=20Dubbo-Demo?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Dubbo-Demo/Service-Client/pom.xml | 14 ++
.../java/cn/mrdear/client/dto/UserDTO.java | 8 +
.../mrdear/client/service/IUserService.java | 32 ++++
Dubbo-Demo/Service-Consumer/pom.xml | 14 ++
.../mrdear/consumer/manager/UserManager.java | 11 ++
.../manager/impl/UserManagerImpl.java | 9 ++
.../src/main/resources/applicationContext.xml | 15 ++
.../java/cn/mrdear/test/UserManagerTest.java | 8 +
.../src/test/resources/applicationContext.xml | 27 ++++
Dubbo-Demo/Service-Provider/pom.xml | 14 ++
.../java/cn/mrdear/provider/Application.java | 8 +
.../mrdear/provider/convert/UserConvert.java | 8 +
.../mrdear/provider/dao/UserRepository.java | 8 +
.../java/cn/mrdear/provider/domain/User.java | 39 +++++
.../provider/service/UserServiceImpl.java | 8 +
.../src/main/resources/applicationContext.xml | 6 +
.../src/main/resources/db.properties | 23 +++
.../src/main/resources/h2/data.sql | 0
.../src/main/resources/h2/schema.sql | 10 ++
.../src/main/resources/logback.xml | 19 +++
.../java/cn/mrdear/test/UserServiceTest.java | 8 +
.../src/test/resources/applicationContext.xml | 140 ++++++++++++++++++
.../src/test/resources/db.properties | 24 +++
.../src/test/resources/h2/data.sql | 6 +
.../src/test/resources/h2/schema.sql | 10 ++
.../src/test/resources/logback.xml | 19 +++
Dubbo-Demo/doc/readme.md | 0
Dubbo-Demo/pom.xml | 81 ++++++++++
.../classes/cn/mrdear/Application.class | Bin 0 -> 882 bytes
29 files changed, 569 insertions(+)
create mode 100644 Dubbo-Demo/Service-Client/pom.xml
create mode 100644 Dubbo-Demo/Service-Client/src/main/java/cn/mrdear/client/dto/UserDTO.java
create mode 100644 Dubbo-Demo/Service-Client/src/main/java/cn/mrdear/client/service/IUserService.java
create mode 100644 Dubbo-Demo/Service-Consumer/pom.xml
create mode 100644 Dubbo-Demo/Service-Consumer/src/main/java/cn/mrdear/consumer/manager/UserManager.java
create mode 100644 Dubbo-Demo/Service-Consumer/src/main/java/cn/mrdear/consumer/manager/impl/UserManagerImpl.java
create mode 100644 Dubbo-Demo/Service-Consumer/src/main/resources/applicationContext.xml
create mode 100644 Dubbo-Demo/Service-Consumer/src/test/java/cn/mrdear/test/UserManagerTest.java
create mode 100644 Dubbo-Demo/Service-Consumer/src/test/resources/applicationContext.xml
create mode 100644 Dubbo-Demo/Service-Provider/pom.xml
create mode 100644 Dubbo-Demo/Service-Provider/src/main/java/cn/mrdear/provider/Application.java
create mode 100644 Dubbo-Demo/Service-Provider/src/main/java/cn/mrdear/provider/convert/UserConvert.java
create mode 100644 Dubbo-Demo/Service-Provider/src/main/java/cn/mrdear/provider/dao/UserRepository.java
create mode 100644 Dubbo-Demo/Service-Provider/src/main/java/cn/mrdear/provider/domain/User.java
create mode 100644 Dubbo-Demo/Service-Provider/src/main/java/cn/mrdear/provider/service/UserServiceImpl.java
create mode 100644 Dubbo-Demo/Service-Provider/src/main/resources/applicationContext.xml
create mode 100644 Dubbo-Demo/Service-Provider/src/main/resources/db.properties
create mode 100644 Dubbo-Demo/Service-Provider/src/main/resources/h2/data.sql
create mode 100644 Dubbo-Demo/Service-Provider/src/main/resources/h2/schema.sql
create mode 100644 Dubbo-Demo/Service-Provider/src/main/resources/logback.xml
create mode 100644 Dubbo-Demo/Service-Provider/src/test/java/cn/mrdear/test/UserServiceTest.java
create mode 100644 Dubbo-Demo/Service-Provider/src/test/resources/applicationContext.xml
create mode 100644 Dubbo-Demo/Service-Provider/src/test/resources/db.properties
create mode 100644 Dubbo-Demo/Service-Provider/src/test/resources/h2/data.sql
create mode 100644 Dubbo-Demo/Service-Provider/src/test/resources/h2/schema.sql
create mode 100644 Dubbo-Demo/Service-Provider/src/test/resources/logback.xml
create mode 100644 Dubbo-Demo/doc/readme.md
create mode 100644 Dubbo-Demo/pom.xml
create mode 100644 Spring-Cloud-Demo/Service-User-Provider/target/classes/cn/mrdear/Application.class
diff --git a/Dubbo-Demo/Service-Client/pom.xml b/Dubbo-Demo/Service-Client/pom.xml
new file mode 100644
index 0000000..bac9551
--- /dev/null
+++ b/Dubbo-Demo/Service-Client/pom.xml
@@ -0,0 +1,14 @@
+
+
+
+ cn.mrdear.dubbo
+ Dubbo-Demo
+ 1.0.0
+
+ 4.0.0
+ Service-Client
+
+
+
\ No newline at end of file
diff --git a/Dubbo-Demo/Service-Client/src/main/java/cn/mrdear/client/dto/UserDTO.java b/Dubbo-Demo/Service-Client/src/main/java/cn/mrdear/client/dto/UserDTO.java
new file mode 100644
index 0000000..91a4eb0
--- /dev/null
+++ b/Dubbo-Demo/Service-Client/src/main/java/cn/mrdear/client/dto/UserDTO.java
@@ -0,0 +1,8 @@
+package cn.mrdear.client.dto;
+
+/**
+ * @author Niu Li
+ * @since 2017/6/12
+ */
+public class UserDTO {
+}
diff --git a/Dubbo-Demo/Service-Client/src/main/java/cn/mrdear/client/service/IUserService.java b/Dubbo-Demo/Service-Client/src/main/java/cn/mrdear/client/service/IUserService.java
new file mode 100644
index 0000000..e0baf07
--- /dev/null
+++ b/Dubbo-Demo/Service-Client/src/main/java/cn/mrdear/client/service/IUserService.java
@@ -0,0 +1,32 @@
+package cn.mrdear.client.service;
+
+import cn.mrdear.client.dto.UserDTO;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 用户服务
+ * @author Niu Li
+ * @since 2017/6/12
+ */
+public interface IUserService {
+
+ /**
+ * 根据id查找
+ */
+ UserDTO findById(Long id);
+
+ /**
+ * 根据id批量查询
+ */
+ List queryByIds(Collection ids);
+
+ /**
+ * 更新用户
+ * @return 返回更新后的实体
+ */
+ UserDTO updateById(UserDTO userDTO);
+
+
+}
diff --git a/Dubbo-Demo/Service-Consumer/pom.xml b/Dubbo-Demo/Service-Consumer/pom.xml
new file mode 100644
index 0000000..f3f36e2
--- /dev/null
+++ b/Dubbo-Demo/Service-Consumer/pom.xml
@@ -0,0 +1,14 @@
+
+
+
+ cn.mrdear.dubbo
+ Dubbo-Demo
+ 1.0.0
+
+ 4.0.0
+ Service-Consumer
+
+
+
\ No newline at end of file
diff --git a/Dubbo-Demo/Service-Consumer/src/main/java/cn/mrdear/consumer/manager/UserManager.java b/Dubbo-Demo/Service-Consumer/src/main/java/cn/mrdear/consumer/manager/UserManager.java
new file mode 100644
index 0000000..dd43c20
--- /dev/null
+++ b/Dubbo-Demo/Service-Consumer/src/main/java/cn/mrdear/consumer/manager/UserManager.java
@@ -0,0 +1,11 @@
+package cn.mrdear.consumer.manager.impl;
+
+/**
+ * manager
+ * @author Niu Li
+ * @since 2017/6/13
+ */
+
+public interface UserManager {
+
+}
diff --git a/Dubbo-Demo/Service-Consumer/src/main/java/cn/mrdear/consumer/manager/impl/UserManagerImpl.java b/Dubbo-Demo/Service-Consumer/src/main/java/cn/mrdear/consumer/manager/impl/UserManagerImpl.java
new file mode 100644
index 0000000..e3277c8
--- /dev/null
+++ b/Dubbo-Demo/Service-Consumer/src/main/java/cn/mrdear/consumer/manager/impl/UserManagerImpl.java
@@ -0,0 +1,9 @@
+package cn.mrdear.consumer.manager;
+
+/**
+ * @author Niu Li
+ * @since 2017/6/13
+ */
+public class UserManagerImpl {
+
+}
diff --git a/Dubbo-Demo/Service-Consumer/src/main/resources/applicationContext.xml b/Dubbo-Demo/Service-Consumer/src/main/resources/applicationContext.xml
new file mode 100644
index 0000000..dc961fc
--- /dev/null
+++ b/Dubbo-Demo/Service-Consumer/src/main/resources/applicationContext.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Dubbo-Demo/Service-Consumer/src/test/java/cn/mrdear/test/UserManagerTest.java b/Dubbo-Demo/Service-Consumer/src/test/java/cn/mrdear/test/UserManagerTest.java
new file mode 100644
index 0000000..9fd2842
--- /dev/null
+++ b/Dubbo-Demo/Service-Consumer/src/test/java/cn/mrdear/test/UserManagerTest.java
@@ -0,0 +1,8 @@
+package cn.mrdear.test;
+
+/**
+ * @author Niu Li
+ * @since 2017/6/13
+ */
+public class UserManagerTest {
+}
diff --git a/Dubbo-Demo/Service-Consumer/src/test/resources/applicationContext.xml b/Dubbo-Demo/Service-Consumer/src/test/resources/applicationContext.xml
new file mode 100644
index 0000000..9751b34
--- /dev/null
+++ b/Dubbo-Demo/Service-Consumer/src/test/resources/applicationContext.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Dubbo-Demo/Service-Provider/pom.xml b/Dubbo-Demo/Service-Provider/pom.xml
new file mode 100644
index 0000000..8e5b82c
--- /dev/null
+++ b/Dubbo-Demo/Service-Provider/pom.xml
@@ -0,0 +1,14 @@
+
+
+
+ cn.mrdear.dubbo
+ Dubbo-Demo
+ 1.0.0
+
+ 4.0.0
+ Service-Provider
+
+
+
\ No newline at end of file
diff --git a/Dubbo-Demo/Service-Provider/src/main/java/cn/mrdear/provider/Application.java b/Dubbo-Demo/Service-Provider/src/main/java/cn/mrdear/provider/Application.java
new file mode 100644
index 0000000..b5bc326
--- /dev/null
+++ b/Dubbo-Demo/Service-Provider/src/main/java/cn/mrdear/provider/Application.java
@@ -0,0 +1,8 @@
+package cn.mrdear.provider;
+
+/**
+ * @author Niu Li
+ * @since 2017/6/12
+ */
+public class Application {
+}
diff --git a/Dubbo-Demo/Service-Provider/src/main/java/cn/mrdear/provider/convert/UserConvert.java b/Dubbo-Demo/Service-Provider/src/main/java/cn/mrdear/provider/convert/UserConvert.java
new file mode 100644
index 0000000..efe785a
--- /dev/null
+++ b/Dubbo-Demo/Service-Provider/src/main/java/cn/mrdear/provider/convert/UserConvert.java
@@ -0,0 +1,8 @@
+package cn.mrdear.provider.convert;
+
+/**
+ * @author Niu Li
+ * @since 2017/6/12
+ */
+public class UserConvert {
+}
diff --git a/Dubbo-Demo/Service-Provider/src/main/java/cn/mrdear/provider/dao/UserRepository.java b/Dubbo-Demo/Service-Provider/src/main/java/cn/mrdear/provider/dao/UserRepository.java
new file mode 100644
index 0000000..ff395e9
--- /dev/null
+++ b/Dubbo-Demo/Service-Provider/src/main/java/cn/mrdear/provider/dao/UserRepository.java
@@ -0,0 +1,8 @@
+package cn.mrdear.provider.dao;
+
+/**
+ * @author Niu Li
+ * @since 2017/6/12
+ */
+public class UserRepository {
+}
diff --git a/Dubbo-Demo/Service-Provider/src/main/java/cn/mrdear/provider/domain/User.java b/Dubbo-Demo/Service-Provider/src/main/java/cn/mrdear/provider/domain/User.java
new file mode 100644
index 0000000..e01257c
--- /dev/null
+++ b/Dubbo-Demo/Service-Provider/src/main/java/cn/mrdear/provider/domain/User.java
@@ -0,0 +1,39 @@
+package cn.mrdear.provider.domain;
+
+import lombok.Data;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+import java.io.Serializable;
+
+/**
+ * 用户实体类,对应数据库
+ * @author Niu Li
+ * @since 2017/6/12
+ */
+@Data
+@Entity
+@Table(name = "user")
+public class UserDO implements Serializable{
+
+ private static final long serialVersionUID = 1793488098966504793L;
+ @Id
+ @GeneratedValue
+ private Long id;
+
+ private String username;
+
+ private String password;
+
+ private Integer age;
+
+ private String nickname;
+
+ private String mail;
+
+ private String memo;
+
+}
diff --git a/Dubbo-Demo/Service-Provider/src/main/java/cn/mrdear/provider/service/UserServiceImpl.java b/Dubbo-Demo/Service-Provider/src/main/java/cn/mrdear/provider/service/UserServiceImpl.java
new file mode 100644
index 0000000..094210b
--- /dev/null
+++ b/Dubbo-Demo/Service-Provider/src/main/java/cn/mrdear/provider/service/UserServiceImpl.java
@@ -0,0 +1,8 @@
+package cn.mrdear.provider.service;
+
+/**
+ * @author Niu Li
+ * @since 2017/6/12
+ */
+public class UserService {
+}
diff --git a/Dubbo-Demo/Service-Provider/src/main/resources/applicationContext.xml b/Dubbo-Demo/Service-Provider/src/main/resources/applicationContext.xml
new file mode 100644
index 0000000..142def2
--- /dev/null
+++ b/Dubbo-Demo/Service-Provider/src/main/resources/applicationContext.xml
@@ -0,0 +1,6 @@
+
+
+
+
\ No newline at end of file
diff --git a/Dubbo-Demo/Service-Provider/src/main/resources/db.properties b/Dubbo-Demo/Service-Provider/src/main/resources/db.properties
new file mode 100644
index 0000000..aa18d74
--- /dev/null
+++ b/Dubbo-Demo/Service-Provider/src/main/resources/db.properties
@@ -0,0 +1,23 @@
+jdbc.driver=com.mysql.jdbc.Driver
+jdbc.url=jdbc:mysql://115.159.185.14:3306/ssm?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8
+jdbc.username=root
+jdbc.password=7946521
+
+filters:stat
+
+maxActive:20
+initialSize:1
+maxWait:60000
+minIdle:10
+
+timeBetweenEvictionRunsMillis:60000
+minEvictableIdleTimeMillis:300000
+
+testWhileIdle:true
+testOnBorrow:false
+testOnReturn:false
+
+maxOpenPreparedStatements:20
+removeAbandoned:true
+removeAbandonedTimeout:1800
+logAbandoned:true
diff --git a/Dubbo-Demo/Service-Provider/src/main/resources/h2/data.sql b/Dubbo-Demo/Service-Provider/src/main/resources/h2/data.sql
new file mode 100644
index 0000000..e69de29
diff --git a/Dubbo-Demo/Service-Provider/src/main/resources/h2/schema.sql b/Dubbo-Demo/Service-Provider/src/main/resources/h2/schema.sql
new file mode 100644
index 0000000..c7291c3
--- /dev/null
+++ b/Dubbo-Demo/Service-Provider/src/main/resources/h2/schema.sql
@@ -0,0 +1,10 @@
+drop table user if exists;
+create table user (
+ id INT(11) AUTO_INCREMENT PRIMARY KEY ,
+ username VARCHAR(255),
+ password VARCHAR(255),
+ age INT(3),
+ nickname VARCHAR(255),
+ mail VARCHAR(255),
+ memo VARCHAR(255),
+ );
\ No newline at end of file
diff --git a/Dubbo-Demo/Service-Provider/src/main/resources/logback.xml b/Dubbo-Demo/Service-Provider/src/main/resources/logback.xml
new file mode 100644
index 0000000..d68cd15
--- /dev/null
+++ b/Dubbo-Demo/Service-Provider/src/main/resources/logback.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+ %d{HH:mm:ss} [%t] %logger{5} [%line] %p - %msg%n
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Dubbo-Demo/Service-Provider/src/test/java/cn/mrdear/test/UserServiceTest.java b/Dubbo-Demo/Service-Provider/src/test/java/cn/mrdear/test/UserServiceTest.java
new file mode 100644
index 0000000..7d55154
--- /dev/null
+++ b/Dubbo-Demo/Service-Provider/src/test/java/cn/mrdear/test/UserServiceTest.java
@@ -0,0 +1,8 @@
+package cn.mrdear.test;
+
+/**
+ * @author Niu Li
+ * @since 2017/6/13
+ */
+public class UserServiceTest {
+}
diff --git a/Dubbo-Demo/Service-Provider/src/test/resources/applicationContext.xml b/Dubbo-Demo/Service-Provider/src/test/resources/applicationContext.xml
new file mode 100644
index 0000000..24093ce
--- /dev/null
+++ b/Dubbo-Demo/Service-Provider/src/test/resources/applicationContext.xml
@@ -0,0 +1,140 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ org.hibernate.dialect.MySQL5Dialect
+
+ false
+
+ false
+
+ false
+
+ none
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Dubbo-Demo/Service-Provider/src/test/resources/db.properties b/Dubbo-Demo/Service-Provider/src/test/resources/db.properties
new file mode 100644
index 0000000..2228684
--- /dev/null
+++ b/Dubbo-Demo/Service-Provider/src/test/resources/db.properties
@@ -0,0 +1,24 @@
+jdbc.driver=com.mysql.jdbc.Driver
+jdbc.url=jdbc:mysql://127.0.0.1:3306/ssm?useUnicode=true&characterEncoding=utf8&characterSetResults\
+ =utf8
+jdbc.username=root
+jdbc.password=7946521
+
+filters:stat
+
+maxActive:20
+initialSize:1
+maxWait:60000
+minIdle:10
+
+timeBetweenEvictionRunsMillis:60000
+minEvictableIdleTimeMillis:300000
+
+testWhileIdle:true
+testOnBorrow:false
+testOnReturn:false
+
+maxOpenPreparedStatements:20
+removeAbandoned:true
+removeAbandonedTimeout:1800
+logAbandoned:true
diff --git a/Dubbo-Demo/Service-Provider/src/test/resources/h2/data.sql b/Dubbo-Demo/Service-Provider/src/test/resources/h2/data.sql
new file mode 100644
index 0000000..716f940
--- /dev/null
+++ b/Dubbo-Demo/Service-Provider/src/test/resources/h2/data.sql
@@ -0,0 +1,6 @@
+INSERT INTO springbootdb.user (username, password, age, nickname, mail, memo) VALUES ('zhangsan',
+ '123456', 18, '张三', '1111@qq.com', 'hahahah');
+INSERT INTO springbootdb.user (username, password, age, nickname, mail, memo) VALUES ('lis',
+'123456', 19, '李四', '123131@qq.com', 'xixiixxi');
+INSERT INTO springbootdb.user (username, password, age, nickname, mail, memo) VALUES ('wanger',
+'123456', 29, '王二', '12131984@qq.com', 'dqdh');
\ No newline at end of file
diff --git a/Dubbo-Demo/Service-Provider/src/test/resources/h2/schema.sql b/Dubbo-Demo/Service-Provider/src/test/resources/h2/schema.sql
new file mode 100644
index 0000000..8de82c2
--- /dev/null
+++ b/Dubbo-Demo/Service-Provider/src/test/resources/h2/schema.sql
@@ -0,0 +1,10 @@
+DROP TABLE user if exist;
+create table user (
+ id INT(11) AUTO_INCREMENT PRIMARY KEY ,
+ username VARCHAR(255),
+ password VARCHAR(255),
+ age INT(3),
+ nickname VARCHAR(255),
+ mail VARCHAR(255),
+ memo VARCHAR(255),
+ );
\ No newline at end of file
diff --git a/Dubbo-Demo/Service-Provider/src/test/resources/logback.xml b/Dubbo-Demo/Service-Provider/src/test/resources/logback.xml
new file mode 100644
index 0000000..d68cd15
--- /dev/null
+++ b/Dubbo-Demo/Service-Provider/src/test/resources/logback.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+ %d{HH:mm:ss} [%t] %logger{5} [%line] %p - %msg%n
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Dubbo-Demo/doc/readme.md b/Dubbo-Demo/doc/readme.md
new file mode 100644
index 0000000..e69de29
diff --git a/Dubbo-Demo/pom.xml b/Dubbo-Demo/pom.xml
new file mode 100644
index 0000000..b28fcfb
--- /dev/null
+++ b/Dubbo-Demo/pom.xml
@@ -0,0 +1,81 @@
+
+
+ 4.0.0
+
+ cn.mrdear.dubbo
+ Dubbo-Demo
+ pom
+ 1.0.0
+ Dubbo-demo
+
+ Service-Client
+ Service-Consume
+ Service-Provider
+
+
+
+ 4.3.2.RELEASE
+ 3.4.1
+ 1.3.0
+ 4.1.6
+ 2.6.11
+ 2.0.4
+ 1.0.0
+ 3.0.1.RELEASE
+ 1.3.0
+ 5.2.4.Final
+ 1.0.25
+ 1.2.16
+ 5.1.39
+ 1.7.7
+ 1.2.17
+ 1.1.7
+ 19.0
+ 1.4.9
+ 4.5.2
+ 4.4.4
+ 1.6.1
+ 3.4
+
+
+
+
+
+
+ org.aspectj
+ aspectjweaver
+ 1.8.6
+
+
+ org.aspectj
+ aspectjrt
+ 1.8.6
+
+
+
+
+ cglib
+ cglib
+ 3.2.2
+
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ 1.8
+ 1.8
+ UTF-8
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Spring-Cloud-Demo/Service-User-Provider/target/classes/cn/mrdear/Application.class b/Spring-Cloud-Demo/Service-User-Provider/target/classes/cn/mrdear/Application.class
new file mode 100644
index 0000000000000000000000000000000000000000..0625b42e048af1d7555177304c8e7f3237015678
GIT binary patch
literal 882
zcmah|O>fgc5PciF2@NSNDQ!vkEO1DBU@u%yP^Bh-I7A=_3Tip6?QPg%??#(-3qOlX
zD}mq#@S_m3PEaFcgb!~#Gdpi)-r7HZef6`4FW_9Kr|lP82qYR3~bjm?R)pZPQG
zcY6BA?-zNRey@}yGRAR{I};myq{g|Gd|349QDR}rZUdLF%<#Bul7b}4RhmdUFJCC_
z%@VZrg=(*&V;MV!jZ&?BuR9Ig#dZVtaQ|<~XT^o&!KsXBwa($rzqk9}V5Ci8bGq2q
zr59UDOlmp#$?^VNH81(X$`tnLF18WU7wex2m{*XnP97)A$S&=kgMBH|mkFyya0Lx|
zZ_Ey01y{&h#wyk*;)`F*&$Yjyau9w;a1b=Z;W?JVGgNoaP)}P%Zy9N9PA{Oji
literal 0
HcmV?d00001
From 7a6c679ec06c6535265ecec745e4661aefc1c6dd Mon Sep 17 00:00:00 2001
From: quding
Date: Tue, 13 Jun 2017 16:29:50 +0800
Subject: [PATCH 05/15] add dubbo demo
---
.../java/cn/mrdear/client/dto/UserDTO.java | 25 +++-
.../mrdear/client/service/IUserService.java | 7 +-
Dubbo-Demo/Service-Consumer/pom.xml | 45 ++++++
.../mrdear/consumer/manager/UserManager.java | 6 +-
.../manager/impl/UserManagerImpl.java | 22 ++-
.../src/main/resources/applicationContext.xml | 17 ++-
.../java/cn/mrdear/test/UserManagerTest.java | 23 +++
.../src/test/resources/applicationContext.xml | 2 +-
Dubbo-Demo/Service-Provider/pom.xml | 106 ++++++++++++++
.../java/cn/mrdear/provider/Application.java | 9 ++
.../mrdear/provider/convert/UserConvert.java | 34 +++++
.../mrdear/provider/dao/UserRepository.java | 18 ++-
.../java/cn/mrdear/provider/domain/User.java | 2 +-
.../provider/service/UserServiceImpl.java | 45 +++++-
.../src/main/resources/applicationContext.xml | 131 +++++++++++++++++-
.../src/main/resources/db.properties | 3 +-
.../src/main/resources/h2/data.sql | 6 +
.../src/main/resources/h2/schema.sql | 2 +-
.../java/cn/mrdear/test/UserServiceTest.java | 23 +++
.../src/test/resources/applicationContext.xml | 2 +-
.../src/test/resources/h2/data.sql | 6 +-
Dubbo-Demo/doc/readme.md | 7 +
Dubbo-Demo/pom.xml | 76 +++++-----
23 files changed, 561 insertions(+), 56 deletions(-)
diff --git a/Dubbo-Demo/Service-Client/src/main/java/cn/mrdear/client/dto/UserDTO.java b/Dubbo-Demo/Service-Client/src/main/java/cn/mrdear/client/dto/UserDTO.java
index 91a4eb0..72dd1ce 100644
--- a/Dubbo-Demo/Service-Client/src/main/java/cn/mrdear/client/dto/UserDTO.java
+++ b/Dubbo-Demo/Service-Client/src/main/java/cn/mrdear/client/dto/UserDTO.java
@@ -1,8 +1,31 @@
package cn.mrdear.client.dto;
+import lombok.Data;
+
+import java.io.Serializable;
+
/**
+ * 用户DTO,用于Service层传输
* @author Niu Li
* @since 2017/6/12
*/
-public class UserDTO {
+@Data
+public class UserDTO implements Serializable{
+
+ private static final long serialVersionUID = 4086492518942464226L;
+
+ private Long id;
+
+ private String username;
+
+ private String password;
+
+ private Integer age;
+
+ private String nickname;
+
+ private String mail;
+
+ private String memo;
+
}
diff --git a/Dubbo-Demo/Service-Client/src/main/java/cn/mrdear/client/service/IUserService.java b/Dubbo-Demo/Service-Client/src/main/java/cn/mrdear/client/service/IUserService.java
index e0baf07..1edd92f 100644
--- a/Dubbo-Demo/Service-Client/src/main/java/cn/mrdear/client/service/IUserService.java
+++ b/Dubbo-Demo/Service-Client/src/main/java/cn/mrdear/client/service/IUserService.java
@@ -6,7 +6,7 @@
import java.util.List;
/**
- * 用户服务
+ * 用户服务,一般都会在返回层再包裹一层,这里简而化之
* @author Niu Li
* @since 2017/6/12
*/
@@ -28,5 +28,10 @@ public interface IUserService {
*/
UserDTO updateById(UserDTO userDTO);
+ /**
+ * 根据id删除用户
+ */
+ Boolean deleteById(Long id);
+
}
diff --git a/Dubbo-Demo/Service-Consumer/pom.xml b/Dubbo-Demo/Service-Consumer/pom.xml
index f3f36e2..f43eba0 100644
--- a/Dubbo-Demo/Service-Consumer/pom.xml
+++ b/Dubbo-Demo/Service-Consumer/pom.xml
@@ -11,4 +11,49 @@
Service-Consumer
+
+
+ cn.mrdear.dubbo
+ Service-Client
+ 1.0.0
+
+
+
+ org.springframework
+ spring-context
+ 4.3.2.RELEASE
+
+
+ org.springframework
+ spring-test
+ 4.3.2.RELEASE
+
+
+
+ com.alibaba
+ dubbo
+ 2.5.3
+
+
+ spring
+ org.springframework
+
+
+
+
+ com.101tec
+ zkclient
+ 0.10
+
+
+ log4j
+ log4j
+
+
+ org.slf4j
+ slf4j-log4j12
+
+
+
+
\ No newline at end of file
diff --git a/Dubbo-Demo/Service-Consumer/src/main/java/cn/mrdear/consumer/manager/UserManager.java b/Dubbo-Demo/Service-Consumer/src/main/java/cn/mrdear/consumer/manager/UserManager.java
index dd43c20..02b972f 100644
--- a/Dubbo-Demo/Service-Consumer/src/main/java/cn/mrdear/consumer/manager/UserManager.java
+++ b/Dubbo-Demo/Service-Consumer/src/main/java/cn/mrdear/consumer/manager/UserManager.java
@@ -1,4 +1,6 @@
-package cn.mrdear.consumer.manager.impl;
+package cn.mrdear.consumer.manager;
+
+import cn.mrdear.client.dto.UserDTO;
/**
* manager
@@ -8,4 +10,6 @@
public interface UserManager {
+ UserDTO findById(Long id);
+
}
diff --git a/Dubbo-Demo/Service-Consumer/src/main/java/cn/mrdear/consumer/manager/impl/UserManagerImpl.java b/Dubbo-Demo/Service-Consumer/src/main/java/cn/mrdear/consumer/manager/impl/UserManagerImpl.java
index e3277c8..eab22f8 100644
--- a/Dubbo-Demo/Service-Consumer/src/main/java/cn/mrdear/consumer/manager/impl/UserManagerImpl.java
+++ b/Dubbo-Demo/Service-Consumer/src/main/java/cn/mrdear/consumer/manager/impl/UserManagerImpl.java
@@ -1,9 +1,27 @@
-package cn.mrdear.consumer.manager;
+package cn.mrdear.consumer.manager.impl;
+
+import org.springframework.stereotype.Service;
+
+import cn.mrdear.client.dto.UserDTO;
+import cn.mrdear.client.service.IUserService;
+import cn.mrdear.consumer.manager.UserManager;
+
+import javax.annotation.Resource;
/**
+ * manager调用远程RPC组装数据,此处调试只是再加一层封装
* @author Niu Li
* @since 2017/6/13
*/
-public class UserManagerImpl {
+@Service
+public class UserManagerImpl implements UserManager {
+
+ @Resource
+ private IUserService userService;
+
+ @Override
+ public UserDTO findById(Long id) {
+ return userService.findById(id);
+ }
}
diff --git a/Dubbo-Demo/Service-Consumer/src/main/resources/applicationContext.xml b/Dubbo-Demo/Service-Consumer/src/main/resources/applicationContext.xml
index dc961fc..ab5cab5 100644
--- a/Dubbo-Demo/Service-Consumer/src/main/resources/applicationContext.xml
+++ b/Dubbo-Demo/Service-Consumer/src/main/resources/applicationContext.xml
@@ -3,7 +3,8 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:task="http://www.springframework.org/schema/task"
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd">
+ xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
@@ -12,4 +13,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Dubbo-Demo/Service-Consumer/src/test/java/cn/mrdear/test/UserManagerTest.java b/Dubbo-Demo/Service-Consumer/src/test/java/cn/mrdear/test/UserManagerTest.java
index 9fd2842..bfe506b 100644
--- a/Dubbo-Demo/Service-Consumer/src/test/java/cn/mrdear/test/UserManagerTest.java
+++ b/Dubbo-Demo/Service-Consumer/src/test/java/cn/mrdear/test/UserManagerTest.java
@@ -1,8 +1,31 @@
package cn.mrdear.test;
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+import cn.mrdear.client.dto.UserDTO;
+import cn.mrdear.consumer.manager.UserManager;
+
+import javax.annotation.Resource;
+
/**
* @author Niu Li
* @since 2017/6/13
*/
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration(locations = "classpath:applicationContext.xml")
public class UserManagerTest {
+
+ @Resource
+ private UserManager userManager;
+
+
+ @Test
+ public void testFindById() {
+ UserDTO userDTO = userManager.findById(1L);
+ Assert.assertNotNull(userDTO);
+ }
}
diff --git a/Dubbo-Demo/Service-Consumer/src/test/resources/applicationContext.xml b/Dubbo-Demo/Service-Consumer/src/test/resources/applicationContext.xml
index 9751b34..5a693f6 100644
--- a/Dubbo-Demo/Service-Consumer/src/test/resources/applicationContext.xml
+++ b/Dubbo-Demo/Service-Consumer/src/test/resources/applicationContext.xml
@@ -22,6 +22,6 @@
+ check="false" version="1.0.0"/>
\ No newline at end of file
diff --git a/Dubbo-Demo/Service-Provider/pom.xml b/Dubbo-Demo/Service-Provider/pom.xml
index 8e5b82c..97f5cb5 100644
--- a/Dubbo-Demo/Service-Provider/pom.xml
+++ b/Dubbo-Demo/Service-Provider/pom.xml
@@ -11,4 +11,110 @@
Service-Provider
+
+
+ cn.mrdear.dubbo
+ Service-Client
+ 1.0.0
+
+
+ com.alibaba
+ dubbo
+ 2.5.3
+
+
+ org.springframework
+ spring
+
+
+ org.javassist
+ javassist
+
+
+
+
+ com.101tec
+ zkclient
+ 0.10
+
+
+ log4j
+ log4j
+
+
+ org.slf4j
+ slf4j-log4j12
+
+
+
+
+ com.h2database
+ h2
+ 1.4.187
+
+
+ org.springframework
+ spring-context
+ 4.3.2.RELEASE
+
+
+ org.springframework
+ spring-test
+ 4.3.2.RELEASE
+
+
+
+ org.aspectj
+ aspectjweaver
+ 1.8.6
+
+
+ org.aspectj
+ aspectjrt
+ 1.8.6
+
+
+
+
+ cglib
+ cglib
+ 3.2.2
+
+
+
+
+ org.hibernate
+ hibernate-core
+ 5.1.0.Final
+
+
+ org.hibernate
+ hibernate-entitymanager
+ 5.1.0.Final
+
+
+
+
+ mysql
+ mysql-connector-java
+ 5.1.34
+
+
+
+
+ com.alibaba
+ druid
+ 1.0.19
+
+
+
+
+
+ org.springframework.data
+ spring-data-jpa
+ 1.10.4.RELEASE
+
+
+
+
\ No newline at end of file
diff --git a/Dubbo-Demo/Service-Provider/src/main/java/cn/mrdear/provider/Application.java b/Dubbo-Demo/Service-Provider/src/main/java/cn/mrdear/provider/Application.java
index b5bc326..cbebadb 100644
--- a/Dubbo-Demo/Service-Provider/src/main/java/cn/mrdear/provider/Application.java
+++ b/Dubbo-Demo/Service-Provider/src/main/java/cn/mrdear/provider/Application.java
@@ -1,8 +1,17 @@
package cn.mrdear.provider;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+import java.io.IOException;
+
/**
* @author Niu Li
* @since 2017/6/12
*/
public class Application {
+ public static void main(String[] args) throws IOException {
+ ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
+ context.start();
+ System.in.read(); // 为保证服务一直开着,利用输入流的阻塞来模拟
+ }
}
diff --git a/Dubbo-Demo/Service-Provider/src/main/java/cn/mrdear/provider/convert/UserConvert.java b/Dubbo-Demo/Service-Provider/src/main/java/cn/mrdear/provider/convert/UserConvert.java
index efe785a..67ae9ca 100644
--- a/Dubbo-Demo/Service-Provider/src/main/java/cn/mrdear/provider/convert/UserConvert.java
+++ b/Dubbo-Demo/Service-Provider/src/main/java/cn/mrdear/provider/convert/UserConvert.java
@@ -1,8 +1,42 @@
package cn.mrdear.provider.convert;
+import org.springframework.beans.BeanUtils;
+import org.springframework.util.CollectionUtils;
+
+import cn.mrdear.client.dto.UserDTO;
+import cn.mrdear.provider.domain.User;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
/**
* @author Niu Li
* @since 2017/6/12
*/
public class UserConvert {
+
+ public static UserDTO toDTO(User user) {
+ UserDTO userDTO = new UserDTO();
+ BeanUtils.copyProperties(user,userDTO);
+ return userDTO;
+ }
+
+
+ public static List toDTOS(List users) {
+ if (CollectionUtils.isEmpty(users)) {
+ return new ArrayList<>(1);
+ }
+ List results = new ArrayList<>();
+ return users.stream().map(UserConvert::toDTO)
+ .collect(Collectors.toList());
+ }
+
+
+ public static User toDO(UserDTO userDTO) {
+ User user = new User();
+ BeanUtils.copyProperties(userDTO,user);
+ return user;
+ }
+
}
diff --git a/Dubbo-Demo/Service-Provider/src/main/java/cn/mrdear/provider/dao/UserRepository.java b/Dubbo-Demo/Service-Provider/src/main/java/cn/mrdear/provider/dao/UserRepository.java
index ff395e9..6b068b4 100644
--- a/Dubbo-Demo/Service-Provider/src/main/java/cn/mrdear/provider/dao/UserRepository.java
+++ b/Dubbo-Demo/Service-Provider/src/main/java/cn/mrdear/provider/dao/UserRepository.java
@@ -1,8 +1,24 @@
package cn.mrdear.provider.dao;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+
+import cn.mrdear.provider.domain.User;
+
+import java.util.Collection;
+import java.util.List;
+
/**
+ * JPA repo层
* @author Niu Li
* @since 2017/6/12
*/
-public class UserRepository {
+public interface UserRepository extends JpaRepository{
+
+ User findById(Long id);
+
+ @Query("select p from User p where id in (?1)")
+ List queryByIds(Collection ids);
+
+
}
diff --git a/Dubbo-Demo/Service-Provider/src/main/java/cn/mrdear/provider/domain/User.java b/Dubbo-Demo/Service-Provider/src/main/java/cn/mrdear/provider/domain/User.java
index e01257c..81849e5 100644
--- a/Dubbo-Demo/Service-Provider/src/main/java/cn/mrdear/provider/domain/User.java
+++ b/Dubbo-Demo/Service-Provider/src/main/java/cn/mrdear/provider/domain/User.java
@@ -17,7 +17,7 @@
@Data
@Entity
@Table(name = "user")
-public class UserDO implements Serializable{
+public class User implements Serializable{
private static final long serialVersionUID = 1793488098966504793L;
@Id
diff --git a/Dubbo-Demo/Service-Provider/src/main/java/cn/mrdear/provider/service/UserServiceImpl.java b/Dubbo-Demo/Service-Provider/src/main/java/cn/mrdear/provider/service/UserServiceImpl.java
index 094210b..082f809 100644
--- a/Dubbo-Demo/Service-Provider/src/main/java/cn/mrdear/provider/service/UserServiceImpl.java
+++ b/Dubbo-Demo/Service-Provider/src/main/java/cn/mrdear/provider/service/UserServiceImpl.java
@@ -1,8 +1,51 @@
package cn.mrdear.provider.service;
+import com.alibaba.dubbo.config.annotation.Service;
+
+import cn.mrdear.client.dto.UserDTO;
+import cn.mrdear.client.service.IUserService;
+import cn.mrdear.provider.convert.UserConvert;
+import cn.mrdear.provider.dao.UserRepository;
+import cn.mrdear.provider.domain.User;
+
+import javax.annotation.Resource;
+
+import java.util.Collection;
+import java.util.List;
+
/**
+ * 用户服务的具体实现,作为服务提供方提供出去
* @author Niu Li
* @since 2017/6/12
*/
-public class UserService {
+@Service(version = "1.0.0")
+public class UserServiceImpl implements IUserService {
+
+ @Resource
+ private UserRepository userRepository;
+
+ @Override
+ public UserDTO findById(Long id) {
+ User user = userRepository.findById(id);
+ return UserConvert.toDTO(user);
+ }
+
+ @Override
+ public List queryByIds(Collection ids) {
+ List users = userRepository.queryByIds(ids);
+ return UserConvert.toDTOS(users);
+ }
+
+ @Override
+ public UserDTO updateById(UserDTO userDTO) {
+ User user = UserConvert.toDO(userDTO);
+ userRepository.save(user);
+ return this.findById(userDTO.getId());
+ }
+
+ @Override
+ public Boolean deleteById(Long id) {
+ userRepository.delete(id);
+ return true;
+ }
}
diff --git a/Dubbo-Demo/Service-Provider/src/main/resources/applicationContext.xml b/Dubbo-Demo/Service-Provider/src/main/resources/applicationContext.xml
index 142def2..c811fad 100644
--- a/Dubbo-Demo/Service-Provider/src/main/resources/applicationContext.xml
+++ b/Dubbo-Demo/Service-Provider/src/main/resources/applicationContext.xml
@@ -1,6 +1,135 @@
+ xmlns:context="http://www.springframework.org/schema/context"
+ xmlns:task="http://www.springframework.org/schema/task"
+ xmlns:cache="http://www.springframework.org/schema/cache"
+ xmlns:jpa="http://www.springframework.org/schema/data/jpa"
+ xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
+ xmlns:jdbc="http://www.springframework.org/schema/jdbc"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ org.hibernate.dialect.MySQL5Dialect
+
+ false
+
+ false
+
+ false
+
+ none
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Dubbo-Demo/Service-Provider/src/main/resources/db.properties b/Dubbo-Demo/Service-Provider/src/main/resources/db.properties
index aa18d74..2228684 100644
--- a/Dubbo-Demo/Service-Provider/src/main/resources/db.properties
+++ b/Dubbo-Demo/Service-Provider/src/main/resources/db.properties
@@ -1,5 +1,6 @@
jdbc.driver=com.mysql.jdbc.Driver
-jdbc.url=jdbc:mysql://115.159.185.14:3306/ssm?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8
+jdbc.url=jdbc:mysql://127.0.0.1:3306/ssm?useUnicode=true&characterEncoding=utf8&characterSetResults\
+ =utf8
jdbc.username=root
jdbc.password=7946521
diff --git a/Dubbo-Demo/Service-Provider/src/main/resources/h2/data.sql b/Dubbo-Demo/Service-Provider/src/main/resources/h2/data.sql
index e69de29..a09f7a8 100644
--- a/Dubbo-Demo/Service-Provider/src/main/resources/h2/data.sql
+++ b/Dubbo-Demo/Service-Provider/src/main/resources/h2/data.sql
@@ -0,0 +1,6 @@
+INSERT INTO user (username, password, age, nickname, mail, memo) VALUES ('zhangsan',
+ '123456', 18, '张三', '1111@qq.com', 'hahahah');
+INSERT INTO user (username, password, age, nickname, mail, memo) VALUES ('lis',
+'123456', 19, '李四', '123131@qq.com', 'xixiixxi');
+INSERT INTO user (username, password, age, nickname, mail, memo) VALUES ('wanger',
+'123456', 29, '王二', '12131984@qq.com', 'dqdh');
\ No newline at end of file
diff --git a/Dubbo-Demo/Service-Provider/src/main/resources/h2/schema.sql b/Dubbo-Demo/Service-Provider/src/main/resources/h2/schema.sql
index c7291c3..8de82c2 100644
--- a/Dubbo-Demo/Service-Provider/src/main/resources/h2/schema.sql
+++ b/Dubbo-Demo/Service-Provider/src/main/resources/h2/schema.sql
@@ -1,4 +1,4 @@
-drop table user if exists;
+DROP TABLE user if exist;
create table user (
id INT(11) AUTO_INCREMENT PRIMARY KEY ,
username VARCHAR(255),
diff --git a/Dubbo-Demo/Service-Provider/src/test/java/cn/mrdear/test/UserServiceTest.java b/Dubbo-Demo/Service-Provider/src/test/java/cn/mrdear/test/UserServiceTest.java
index 7d55154..3a50744 100644
--- a/Dubbo-Demo/Service-Provider/src/test/java/cn/mrdear/test/UserServiceTest.java
+++ b/Dubbo-Demo/Service-Provider/src/test/java/cn/mrdear/test/UserServiceTest.java
@@ -1,8 +1,31 @@
package cn.mrdear.test;
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+import cn.mrdear.client.dto.UserDTO;
+import cn.mrdear.provider.service.UserServiceImpl;
+
+import javax.annotation.Resource;
+
/**
* @author Niu Li
* @since 2017/6/13
*/
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration(locations = "classpath:applicationContext.xml")
public class UserServiceTest {
+
+ @Resource
+ private UserServiceImpl userService;
+
+ @Test
+ public void testFindById() {
+ UserDTO userDTO = userService.findById(1L);
+ Assert.assertNotNull(userDTO);
+ }
+
}
diff --git a/Dubbo-Demo/Service-Provider/src/test/resources/applicationContext.xml b/Dubbo-Demo/Service-Provider/src/test/resources/applicationContext.xml
index 24093ce..0192b9b 100644
--- a/Dubbo-Demo/Service-Provider/src/test/resources/applicationContext.xml
+++ b/Dubbo-Demo/Service-Provider/src/test/resources/applicationContext.xml
@@ -132,7 +132,7 @@
-
+
Dubbo-demo
Service-Client
- Service-Consume
+ Service-Consumer
Service-Provider
-
- 4.3.2.RELEASE
- 3.4.1
- 1.3.0
- 4.1.6
- 2.6.11
- 2.0.4
- 1.0.0
- 3.0.1.RELEASE
- 1.3.0
- 5.2.4.Final
- 1.0.25
- 1.2.16
- 5.1.39
- 1.7.7
- 1.2.17
- 1.1.7
- 19.0
- 1.4.9
- 4.5.2
- 4.4.4
- 1.6.1
- 3.4
-
-
-
- org.aspectj
- aspectjweaver
- 1.8.6
+ org.projectlombok
+ lombok
+ 1.16.14
+
+
+ junit
+ junit
+ 4.12
+
+
+ com.google.guava
+ guava
+ 21.0
+
+
+
+ org.slf4j
+ slf4j-api
+ 1.7.7
+
+
+ org.slf4j
+ jcl-over-slf4j
+ 1.7.7
+
+
+ ch.qos.logback
+ logback-core
+ 1.1.2
- org.aspectj
- aspectjrt
- 1.8.6
+ org.logback-extensions
+ logback-ext-spring
+ 0.1.4
-
-
- cglib
- cglib
- 3.2.2
+ ch.qos.logback
+ logback-classic
+ 1.1.2
-
+
From d0b9ef8da808ec1335731bf19119054b5ffbd2ef Mon Sep 17 00:00:00 2001
From: quding
Date: Tue, 13 Jun 2017 16:31:14 +0800
Subject: [PATCH 06/15] add readme
---
README.MD | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/README.MD b/README.MD
index e9d7053..15729f5 100644
--- a/README.MD
+++ b/README.MD
@@ -55,5 +55,9 @@ SpringDataRedis学习的一个Demo,内容不多,配合博文:[redis学习记录(
--------------
学习Spring Cloud的一个Demo,其中对于Eureka,Ribbon,Feign等都有相应的Demo,相应博文会更新在[我的博客](mrdear.cn)上,希望对你有帮助
-13.待添加
+13.Spring-Cloud-Demo
+--------------
+增加Dubbo-Demo,一个基本的RPC调用Demo
+
+14.待添加
--------------
From e706a803345745d9fef72b7c51c8586c49fd4f1f Mon Sep 17 00:00:00 2001
From: quding
Date: Wed, 14 Jun 2017 11:51:10 +0800
Subject: [PATCH 07/15] =?UTF-8?q?add=20dubbo=E7=86=94=E6=96=AD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Dubbo-Demo/Service-Consumer/pom.xml | 40 ++++++++++++
.../consumer/controller/UserController.java | 27 ++++++++
.../mrdear/consumer/manager/UserManager.java | 2 +
.../manager/impl/UserManagerImpl.java | 26 +++++++-
.../src/main/resources/applicationContext.xml | 8 ++-
.../src/main/resources/dispatcher-servlet.xml | 21 ++++++
.../src/main/webapp/WEB-INF/view/error.jsp | 16 +++++
.../src/main/webapp/WEB-INF/web.xml | 65 +++++++++++++++++++
.../src/main/webapp/index.jsp | 17 +++++
9 files changed, 220 insertions(+), 2 deletions(-)
create mode 100644 Dubbo-Demo/Service-Consumer/src/main/java/cn/mrdear/consumer/controller/UserController.java
create mode 100644 Dubbo-Demo/Service-Consumer/src/main/resources/dispatcher-servlet.xml
create mode 100644 Dubbo-Demo/Service-Consumer/src/main/webapp/WEB-INF/view/error.jsp
create mode 100644 Dubbo-Demo/Service-Consumer/src/main/webapp/WEB-INF/web.xml
create mode 100644 Dubbo-Demo/Service-Consumer/src/main/webapp/index.jsp
diff --git a/Dubbo-Demo/Service-Consumer/pom.xml b/Dubbo-Demo/Service-Consumer/pom.xml
index f43eba0..c8ba829 100644
--- a/Dubbo-Demo/Service-Consumer/pom.xml
+++ b/Dubbo-Demo/Service-Consumer/pom.xml
@@ -7,6 +7,7 @@
Dubbo-Demo
1.0.0
+ war
4.0.0
Service-Consumer
@@ -18,11 +19,50 @@
1.0.0
+
+ com.netflix.hystrix
+ hystrix-javanica
+ 1.5.12
+
+
+
+ com.fasterxml.jackson.core
+ jackson-annotations
+ 2.8.1
+
+
+ com.fasterxml.jackson.core
+ jackson-core
+ 2.8.6
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+ 2.8.6
+
+
org.springframework
spring-context
4.3.2.RELEASE
+
+ org.springframework
+ spring-webmvc
+ 4.3.2.RELEASE
+
+
+
+ javax.servlet
+ jstl
+ 1.2
+ runtime
+
+
+ org.springframework
+ spring-web
+ 4.3.2.RELEASE
+
org.springframework
spring-test
diff --git a/Dubbo-Demo/Service-Consumer/src/main/java/cn/mrdear/consumer/controller/UserController.java b/Dubbo-Demo/Service-Consumer/src/main/java/cn/mrdear/consumer/controller/UserController.java
new file mode 100644
index 0000000..9593c2d
--- /dev/null
+++ b/Dubbo-Demo/Service-Consumer/src/main/java/cn/mrdear/consumer/controller/UserController.java
@@ -0,0 +1,27 @@
+package cn.mrdear.consumer.controller;
+
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RestController;
+
+import cn.mrdear.client.dto.UserDTO;
+import cn.mrdear.consumer.manager.UserManager;
+
+import javax.annotation.Resource;
+
+/**
+ * @author Niu Li
+ * @since 2017/6/14
+ */
+@RestController
+public class UserController {
+
+ @Resource
+ private UserManager userManager;
+
+ @GetMapping("/user/{id}")
+ public UserDTO getUserById(@PathVariable Long id) {
+ UserDTO userDTO = userManager.findById(id);
+ return userDTO;
+ }
+}
diff --git a/Dubbo-Demo/Service-Consumer/src/main/java/cn/mrdear/consumer/manager/UserManager.java b/Dubbo-Demo/Service-Consumer/src/main/java/cn/mrdear/consumer/manager/UserManager.java
index 02b972f..900368e 100644
--- a/Dubbo-Demo/Service-Consumer/src/main/java/cn/mrdear/consumer/manager/UserManager.java
+++ b/Dubbo-Demo/Service-Consumer/src/main/java/cn/mrdear/consumer/manager/UserManager.java
@@ -12,4 +12,6 @@ public interface UserManager {
UserDTO findById(Long id);
+ UserDTO findByIdBack(Long id);
+
}
diff --git a/Dubbo-Demo/Service-Consumer/src/main/java/cn/mrdear/consumer/manager/impl/UserManagerImpl.java b/Dubbo-Demo/Service-Consumer/src/main/java/cn/mrdear/consumer/manager/impl/UserManagerImpl.java
index eab22f8..572c407 100644
--- a/Dubbo-Demo/Service-Consumer/src/main/java/cn/mrdear/consumer/manager/impl/UserManagerImpl.java
+++ b/Dubbo-Demo/Service-Consumer/src/main/java/cn/mrdear/consumer/manager/impl/UserManagerImpl.java
@@ -1,5 +1,7 @@
package cn.mrdear.consumer.manager.impl;
+import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
+
import org.springframework.stereotype.Service;
import cn.mrdear.client.dto.UserDTO;
@@ -8,6 +10,8 @@
import javax.annotation.Resource;
+import java.util.Objects;
+
/**
* manager调用远程RPC组装数据,此处调试只是再加一层封装
* @author Niu Li
@@ -19,9 +23,29 @@ public class UserManagerImpl implements UserManager {
@Resource
private IUserService userService;
-
@Override
+ @HystrixCommand(groupKey = "user", fallbackMethod = "findByIdBack")
public UserDTO findById(Long id) {
+ if (Objects.equals(id, 1L)) {
+ try {
+ Thread.sleep(1000000);
+ } catch (InterruptedException e) {
+ // do nothing
+ }
+ }
+ if (Objects.equals(id, 2L)) {
+ throw new RuntimeException("熔断测试");
+ }
return userService.findById(id);
}
+
+ public UserDTO findByIdBack(Long id) {
+ System.err.println("findByIdBack");
+ UserDTO userDTO = new UserDTO();
+ userDTO.setAge(1);
+ userDTO.setUsername("备用用户");
+ return userDTO;
+ }
+
+
}
diff --git a/Dubbo-Demo/Service-Consumer/src/main/resources/applicationContext.xml b/Dubbo-Demo/Service-Consumer/src/main/resources/applicationContext.xml
index ab5cab5..4ddd015 100644
--- a/Dubbo-Demo/Service-Consumer/src/main/resources/applicationContext.xml
+++ b/Dubbo-Demo/Service-Consumer/src/main/resources/applicationContext.xml
@@ -4,7 +4,8 @@
xmlns:context="http://www.springframework.org/schema/context"
xmlns:task="http://www.springframework.org/schema/task"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
+ xmlns:aop="http://www.springframework.org/schema/aop"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
@@ -13,6 +14,11 @@
+
+
+
+
diff --git a/Dubbo-Demo/Service-Consumer/src/main/resources/dispatcher-servlet.xml b/Dubbo-Demo/Service-Consumer/src/main/resources/dispatcher-servlet.xml
new file mode 100644
index 0000000..9b9a484
--- /dev/null
+++ b/Dubbo-Demo/Service-Consumer/src/main/resources/dispatcher-servlet.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Dubbo-Demo/Service-Consumer/src/main/webapp/WEB-INF/view/error.jsp b/Dubbo-Demo/Service-Consumer/src/main/webapp/WEB-INF/view/error.jsp
new file mode 100644
index 0000000..e9ea535
--- /dev/null
+++ b/Dubbo-Demo/Service-Consumer/src/main/webapp/WEB-INF/view/error.jsp
@@ -0,0 +1,16 @@
+<%--
+ Created by IntelliJ IDEA.
+ User: niuli
+ Date: 2017/4/19
+ Time: 09:45
+ To change this template use File | Settings | File Templates.
+--%>
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+
+
+ Title
+
+
+Error 页面
+
+
diff --git a/Dubbo-Demo/Service-Consumer/src/main/webapp/WEB-INF/web.xml b/Dubbo-Demo/Service-Consumer/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000..f1339a6
--- /dev/null
+++ b/Dubbo-Demo/Service-Consumer/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,65 @@
+
+
+
+
+
+ webAppRootKey
+ web.root
+
+
+ contextConfigLocation
+ classpath:applicationContext.xml
+
+
+
+
+
+ encodingFilter
+ org.springframework.web.filter.CharacterEncodingFilter
+
+ encoding
+ UTF-8
+
+
+
+ forceEncoding
+ true
+
+
+
+ encodingFilter
+ /*
+
+
+
+ org.springframework.web.util.WebAppRootListener
+
+
+ org.springframework.web.context.ContextLoaderListener
+
+
+
+ org.springframework.web.util.IntrospectorCleanupListener
+
+
+
+
+
+ dispatcher
+ org.springframework.web.servlet.DispatcherServlet
+
+ contextConfigLocation
+
+ classpath:dispatcher-servlet.xml
+
+ 1
+
+
+ dispatcher
+ /
+
+
+
diff --git a/Dubbo-Demo/Service-Consumer/src/main/webapp/index.jsp b/Dubbo-Demo/Service-Consumer/src/main/webapp/index.jsp
new file mode 100644
index 0000000..fa47f72
--- /dev/null
+++ b/Dubbo-Demo/Service-Consumer/src/main/webapp/index.jsp
@@ -0,0 +1,17 @@
+<%--
+ Created by IntelliJ IDEA.
+ User: NL
+ Date: 2017/1/23
+ Time: 9:09
+ To change this template use File | Settings | File Templates.
+--%>
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+
+
+
+
+
+Hello World!
+请访问/user/{id}测试
+
+
From f2b90bfa6a69a4b3a290d1ba92ff2f9b1b34dd59 Mon Sep 17 00:00:00 2001
From: quding
Date: Wed, 14 Jun 2017 18:06:20 +0800
Subject: [PATCH 08/15] add motan demo
---
Motan-Demo/Service-Client/pom.xml | 16 ++
.../java/cn/mrdear/client/dto/UserDTO.java | 31 ++++
.../mrdear/client/service/IUserService.java | 37 +++++
Motan-Demo/Service-Consumer/pom.xml | 108 +++++++++++++
.../cn/mrdear/consumer/ApplicationStart.java | 21 +++
.../src/main/resources/applicationContext.xml | 22 +++
.../src/main/resources/logback.xml | 19 +++
Motan-Demo/Service-Provider/pom.xml | 151 ++++++++++++++++++
.../cn/mrdear/provider/ApplicationStart.java | 22 +++
.../mrdear/provider/convert/UserConvert.java | 42 +++++
.../mrdear/provider/dao/UserRepository.java | 24 +++
.../java/cn/mrdear/provider/domain/User.java | 39 +++++
.../provider/service/UserServiceImpl.java | 46 ++++++
.../src/main/resources/applicationContext.xml | 86 ++++++++++
.../src/main/resources/h2/data.sql | 6 +
.../src/main/resources/h2/schema.sql | 10 ++
.../src/main/resources/logback.xml | 19 +++
Motan-Demo/pom.xml | 79 +++++++++
18 files changed, 778 insertions(+)
create mode 100644 Motan-Demo/Service-Client/pom.xml
create mode 100644 Motan-Demo/Service-Client/src/main/java/cn/mrdear/client/dto/UserDTO.java
create mode 100644 Motan-Demo/Service-Client/src/main/java/cn/mrdear/client/service/IUserService.java
create mode 100644 Motan-Demo/Service-Consumer/pom.xml
create mode 100644 Motan-Demo/Service-Consumer/src/main/java/cn/mrdear/consumer/ApplicationStart.java
create mode 100644 Motan-Demo/Service-Consumer/src/main/resources/applicationContext.xml
create mode 100644 Motan-Demo/Service-Consumer/src/main/resources/logback.xml
create mode 100644 Motan-Demo/Service-Provider/pom.xml
create mode 100644 Motan-Demo/Service-Provider/src/main/java/cn/mrdear/provider/ApplicationStart.java
create mode 100644 Motan-Demo/Service-Provider/src/main/java/cn/mrdear/provider/convert/UserConvert.java
create mode 100644 Motan-Demo/Service-Provider/src/main/java/cn/mrdear/provider/dao/UserRepository.java
create mode 100644 Motan-Demo/Service-Provider/src/main/java/cn/mrdear/provider/domain/User.java
create mode 100644 Motan-Demo/Service-Provider/src/main/java/cn/mrdear/provider/service/UserServiceImpl.java
create mode 100644 Motan-Demo/Service-Provider/src/main/resources/applicationContext.xml
create mode 100644 Motan-Demo/Service-Provider/src/main/resources/h2/data.sql
create mode 100644 Motan-Demo/Service-Provider/src/main/resources/h2/schema.sql
create mode 100644 Motan-Demo/Service-Provider/src/main/resources/logback.xml
create mode 100644 Motan-Demo/pom.xml
diff --git a/Motan-Demo/Service-Client/pom.xml b/Motan-Demo/Service-Client/pom.xml
new file mode 100644
index 0000000..8d2eade
--- /dev/null
+++ b/Motan-Demo/Service-Client/pom.xml
@@ -0,0 +1,16 @@
+
+
+
+ Motan-Demo
+ cn.mrdear.motan
+ 1.0-SNAPSHOT
+
+ 4.0.0
+
+ cn.mrdear.motan
+ Service-Client
+
+
+
\ No newline at end of file
diff --git a/Motan-Demo/Service-Client/src/main/java/cn/mrdear/client/dto/UserDTO.java b/Motan-Demo/Service-Client/src/main/java/cn/mrdear/client/dto/UserDTO.java
new file mode 100644
index 0000000..72dd1ce
--- /dev/null
+++ b/Motan-Demo/Service-Client/src/main/java/cn/mrdear/client/dto/UserDTO.java
@@ -0,0 +1,31 @@
+package cn.mrdear.client.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 用户DTO,用于Service层传输
+ * @author Niu Li
+ * @since 2017/6/12
+ */
+@Data
+public class UserDTO implements Serializable{
+
+ private static final long serialVersionUID = 4086492518942464226L;
+
+ private Long id;
+
+ private String username;
+
+ private String password;
+
+ private Integer age;
+
+ private String nickname;
+
+ private String mail;
+
+ private String memo;
+
+}
diff --git a/Motan-Demo/Service-Client/src/main/java/cn/mrdear/client/service/IUserService.java b/Motan-Demo/Service-Client/src/main/java/cn/mrdear/client/service/IUserService.java
new file mode 100644
index 0000000..1edd92f
--- /dev/null
+++ b/Motan-Demo/Service-Client/src/main/java/cn/mrdear/client/service/IUserService.java
@@ -0,0 +1,37 @@
+package cn.mrdear.client.service;
+
+import cn.mrdear.client.dto.UserDTO;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 用户服务,一般都会在返回层再包裹一层,这里简而化之
+ * @author Niu Li
+ * @since 2017/6/12
+ */
+public interface IUserService {
+
+ /**
+ * 根据id查找
+ */
+ UserDTO findById(Long id);
+
+ /**
+ * 根据id批量查询
+ */
+ List queryByIds(Collection ids);
+
+ /**
+ * 更新用户
+ * @return 返回更新后的实体
+ */
+ UserDTO updateById(UserDTO userDTO);
+
+ /**
+ * 根据id删除用户
+ */
+ Boolean deleteById(Long id);
+
+
+}
diff --git a/Motan-Demo/Service-Consumer/pom.xml b/Motan-Demo/Service-Consumer/pom.xml
new file mode 100644
index 0000000..31ec032
--- /dev/null
+++ b/Motan-Demo/Service-Consumer/pom.xml
@@ -0,0 +1,108 @@
+
+
+
+ Motan-Demo
+ cn.mrdear.motan
+ 1.0-SNAPSHOT
+
+ 4.0.0
+
+ cn.mrdear.motan
+ Service-Consumer
+
+
+
+ cn.mrdear.motan
+ Service-Client
+ 1.0-SNAPSHOT
+
+
+
+ com.weibo
+ motan-core
+ RELEASE
+
+
+ log4j
+ log4j
+
+
+ org.slf4j
+ slf4j-log4j12
+
+
+
+
+ com.weibo
+ motan-transport-netty
+ RELEASE
+
+
+ log4j
+ log4j
+
+
+ org.slf4j
+ slf4j-log4j12
+
+
+
+
+ com.weibo
+ motan-registry-zookeeper
+ RELEASE
+
+
+ log4j
+ log4j
+
+
+ org.slf4j
+ slf4j-log4j12
+
+
+ com.101tec
+ zkclient
+
+
+
+
+ com.101tec
+ zkclient
+ 0.10
+
+
+ log4j
+ log4j
+
+
+ org.slf4j
+ slf4j-log4j12
+
+
+
+
+ com.weibo
+ motan-springsupport
+ RELEASE
+
+
+ log4j
+ log4j
+
+
+ org.slf4j
+ slf4j-log4j12
+
+
+
+
+ org.springframework
+ spring-context
+ 4.3.6.RELEASE
+
+
+
+
\ No newline at end of file
diff --git a/Motan-Demo/Service-Consumer/src/main/java/cn/mrdear/consumer/ApplicationStart.java b/Motan-Demo/Service-Consumer/src/main/java/cn/mrdear/consumer/ApplicationStart.java
new file mode 100644
index 0000000..f5e634b
--- /dev/null
+++ b/Motan-Demo/Service-Consumer/src/main/java/cn/mrdear/consumer/ApplicationStart.java
@@ -0,0 +1,21 @@
+package cn.mrdear.consumer;
+
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+import cn.mrdear.client.service.IUserService;
+
+/**
+ * @author Niu Li
+ * @since 2017/6/14
+ */
+public class ApplicationStart {
+
+ public static void main(String[] args) throws InterruptedException {
+ ApplicationContext ctx = new ClassPathXmlApplicationContext(
+ "classpath:applicationContext.xml");
+ IUserService service = (IUserService) ctx.getBean("userService");
+ System.out.println(service.findById(1L));
+ }
+
+}
diff --git a/Motan-Demo/Service-Consumer/src/main/resources/applicationContext.xml b/Motan-Demo/Service-Consumer/src/main/resources/applicationContext.xml
new file mode 100644
index 0000000..28b860c
--- /dev/null
+++ b/Motan-Demo/Service-Consumer/src/main/resources/applicationContext.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Motan-Demo/Service-Consumer/src/main/resources/logback.xml b/Motan-Demo/Service-Consumer/src/main/resources/logback.xml
new file mode 100644
index 0000000..d68cd15
--- /dev/null
+++ b/Motan-Demo/Service-Consumer/src/main/resources/logback.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+ %d{HH:mm:ss} [%t] %logger{5} [%line] %p - %msg%n
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Motan-Demo/Service-Provider/pom.xml b/Motan-Demo/Service-Provider/pom.xml
new file mode 100644
index 0000000..d5a727e
--- /dev/null
+++ b/Motan-Demo/Service-Provider/pom.xml
@@ -0,0 +1,151 @@
+
+
+
+ Motan-Demo
+ cn.mrdear.motan
+ 1.0-SNAPSHOT
+
+ 4.0.0
+
+ cn.mrdear.motan
+ Service-Provider
+
+
+
+
+ cn.mrdear.motan
+ Service-Client
+ 1.0-SNAPSHOT
+
+
+
+ com.weibo
+ motan-core
+ RELEASE
+
+
+ log4j
+ log4j
+
+
+ org.slf4j
+ slf4j-log4j12
+
+
+
+
+ com.weibo
+ motan-transport-netty
+ RELEASE
+
+
+ log4j
+ log4j
+
+
+ org.slf4j
+ slf4j-log4j12
+
+
+
+
+ com.weibo
+ motan-registry-zookeeper
+ RELEASE
+
+
+ log4j
+ log4j
+
+
+ org.slf4j
+ slf4j-log4j12
+
+
+ com.101tec
+ zkclient
+
+
+
+
+ com.101tec
+ zkclient
+ 0.10
+
+
+ log4j
+ log4j
+
+
+ org.slf4j
+ slf4j-log4j12
+
+
+
+
+
+ com.weibo
+ motan-springsupport
+ RELEASE
+
+
+ log4j
+ log4j
+
+
+ org.slf4j
+ slf4j-log4j12
+
+
+
+
+ org.springframework
+ spring-context
+ 4.3.6.RELEASE
+
+
+ org.springframework.data
+ spring-data-jpa
+ 1.10.4.RELEASE
+
+
+
+ org.hibernate
+ hibernate-core
+ 5.1.0.Final
+
+
+ org.hibernate
+ hibernate-entitymanager
+ 5.1.0.Final
+
+
+
+
+ org.aspectj
+ aspectjweaver
+ 1.8.6
+
+
+ org.aspectj
+ aspectjrt
+ 1.8.6
+
+
+
+
+ cglib
+ cglib
+ 3.2.2
+
+
+
+ com.h2database
+ h2
+ 1.4.187
+
+
+
+
\ No newline at end of file
diff --git a/Motan-Demo/Service-Provider/src/main/java/cn/mrdear/provider/ApplicationStart.java b/Motan-Demo/Service-Provider/src/main/java/cn/mrdear/provider/ApplicationStart.java
new file mode 100644
index 0000000..7db2920
--- /dev/null
+++ b/Motan-Demo/Service-Provider/src/main/java/cn/mrdear/provider/ApplicationStart.java
@@ -0,0 +1,22 @@
+package cn.mrdear.provider;
+
+import com.weibo.api.motan.common.MotanConstants;
+import com.weibo.api.motan.util.MotanSwitcherUtil;
+
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+/**
+ * @author Niu Li
+ * @since 2017/6/14
+ */
+public class ApplicationStart {
+
+ public static void main(String[] args) throws InterruptedException {
+ ApplicationContext applicationContext =
+ new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
+ MotanSwitcherUtil.setSwitcherValue(MotanConstants.REGISTRY_HEARTBEAT_SWITCHER, true);
+ System.out.println("server start...");
+ }
+
+}
diff --git a/Motan-Demo/Service-Provider/src/main/java/cn/mrdear/provider/convert/UserConvert.java b/Motan-Demo/Service-Provider/src/main/java/cn/mrdear/provider/convert/UserConvert.java
new file mode 100644
index 0000000..67ae9ca
--- /dev/null
+++ b/Motan-Demo/Service-Provider/src/main/java/cn/mrdear/provider/convert/UserConvert.java
@@ -0,0 +1,42 @@
+package cn.mrdear.provider.convert;
+
+import org.springframework.beans.BeanUtils;
+import org.springframework.util.CollectionUtils;
+
+import cn.mrdear.client.dto.UserDTO;
+import cn.mrdear.provider.domain.User;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @author Niu Li
+ * @since 2017/6/12
+ */
+public class UserConvert {
+
+ public static UserDTO toDTO(User user) {
+ UserDTO userDTO = new UserDTO();
+ BeanUtils.copyProperties(user,userDTO);
+ return userDTO;
+ }
+
+
+ public static List toDTOS(List users) {
+ if (CollectionUtils.isEmpty(users)) {
+ return new ArrayList<>(1);
+ }
+ List results = new ArrayList<>();
+ return users.stream().map(UserConvert::toDTO)
+ .collect(Collectors.toList());
+ }
+
+
+ public static User toDO(UserDTO userDTO) {
+ User user = new User();
+ BeanUtils.copyProperties(userDTO,user);
+ return user;
+ }
+
+}
diff --git a/Motan-Demo/Service-Provider/src/main/java/cn/mrdear/provider/dao/UserRepository.java b/Motan-Demo/Service-Provider/src/main/java/cn/mrdear/provider/dao/UserRepository.java
new file mode 100644
index 0000000..6b068b4
--- /dev/null
+++ b/Motan-Demo/Service-Provider/src/main/java/cn/mrdear/provider/dao/UserRepository.java
@@ -0,0 +1,24 @@
+package cn.mrdear.provider.dao;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+
+import cn.mrdear.provider.domain.User;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * JPA repo层
+ * @author Niu Li
+ * @since 2017/6/12
+ */
+public interface UserRepository extends JpaRepository{
+
+ User findById(Long id);
+
+ @Query("select p from User p where id in (?1)")
+ List queryByIds(Collection ids);
+
+
+}
diff --git a/Motan-Demo/Service-Provider/src/main/java/cn/mrdear/provider/domain/User.java b/Motan-Demo/Service-Provider/src/main/java/cn/mrdear/provider/domain/User.java
new file mode 100644
index 0000000..81849e5
--- /dev/null
+++ b/Motan-Demo/Service-Provider/src/main/java/cn/mrdear/provider/domain/User.java
@@ -0,0 +1,39 @@
+package cn.mrdear.provider.domain;
+
+import lombok.Data;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+import java.io.Serializable;
+
+/**
+ * 用户实体类,对应数据库
+ * @author Niu Li
+ * @since 2017/6/12
+ */
+@Data
+@Entity
+@Table(name = "user")
+public class User implements Serializable{
+
+ private static final long serialVersionUID = 1793488098966504793L;
+ @Id
+ @GeneratedValue
+ private Long id;
+
+ private String username;
+
+ private String password;
+
+ private Integer age;
+
+ private String nickname;
+
+ private String mail;
+
+ private String memo;
+
+}
diff --git a/Motan-Demo/Service-Provider/src/main/java/cn/mrdear/provider/service/UserServiceImpl.java b/Motan-Demo/Service-Provider/src/main/java/cn/mrdear/provider/service/UserServiceImpl.java
new file mode 100644
index 0000000..7ab049a
--- /dev/null
+++ b/Motan-Demo/Service-Provider/src/main/java/cn/mrdear/provider/service/UserServiceImpl.java
@@ -0,0 +1,46 @@
+package cn.mrdear.provider.service;
+
+import cn.mrdear.client.dto.UserDTO;
+import cn.mrdear.client.service.IUserService;
+import cn.mrdear.provider.convert.UserConvert;
+import cn.mrdear.provider.dao.UserRepository;
+import cn.mrdear.provider.domain.User;
+
+import javax.annotation.Resource;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * @author Niu Li
+ * @since 2017/6/14
+ */
+public class UserServiceImpl implements IUserService{
+ @Resource
+ private UserRepository userRepository;
+
+ @Override
+ public UserDTO findById(Long id) {
+ User user = userRepository.findById(id);
+ return UserConvert.toDTO(user);
+ }
+
+ @Override
+ public List queryByIds(Collection ids) {
+ List users = userRepository.queryByIds(ids);
+ return UserConvert.toDTOS(users);
+ }
+
+ @Override
+ public UserDTO updateById(UserDTO userDTO) {
+ User user = UserConvert.toDO(userDTO);
+ userRepository.save(user);
+ return this.findById(userDTO.getId());
+ }
+
+ @Override
+ public Boolean deleteById(Long id) {
+ userRepository.delete(id);
+ return true;
+ }
+}
diff --git a/Motan-Demo/Service-Provider/src/main/resources/applicationContext.xml b/Motan-Demo/Service-Provider/src/main/resources/applicationContext.xml
new file mode 100644
index 0000000..4b5d788
--- /dev/null
+++ b/Motan-Demo/Service-Provider/src/main/resources/applicationContext.xml
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ org.hibernate.dialect.MySQL5Dialect
+
+ false
+
+ false
+
+ false
+
+ none
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Motan-Demo/Service-Provider/src/main/resources/h2/data.sql b/Motan-Demo/Service-Provider/src/main/resources/h2/data.sql
new file mode 100644
index 0000000..a09f7a8
--- /dev/null
+++ b/Motan-Demo/Service-Provider/src/main/resources/h2/data.sql
@@ -0,0 +1,6 @@
+INSERT INTO user (username, password, age, nickname, mail, memo) VALUES ('zhangsan',
+ '123456', 18, '张三', '1111@qq.com', 'hahahah');
+INSERT INTO user (username, password, age, nickname, mail, memo) VALUES ('lis',
+'123456', 19, '李四', '123131@qq.com', 'xixiixxi');
+INSERT INTO user (username, password, age, nickname, mail, memo) VALUES ('wanger',
+'123456', 29, '王二', '12131984@qq.com', 'dqdh');
\ No newline at end of file
diff --git a/Motan-Demo/Service-Provider/src/main/resources/h2/schema.sql b/Motan-Demo/Service-Provider/src/main/resources/h2/schema.sql
new file mode 100644
index 0000000..8de82c2
--- /dev/null
+++ b/Motan-Demo/Service-Provider/src/main/resources/h2/schema.sql
@@ -0,0 +1,10 @@
+DROP TABLE user if exist;
+create table user (
+ id INT(11) AUTO_INCREMENT PRIMARY KEY ,
+ username VARCHAR(255),
+ password VARCHAR(255),
+ age INT(3),
+ nickname VARCHAR(255),
+ mail VARCHAR(255),
+ memo VARCHAR(255),
+ );
\ No newline at end of file
diff --git a/Motan-Demo/Service-Provider/src/main/resources/logback.xml b/Motan-Demo/Service-Provider/src/main/resources/logback.xml
new file mode 100644
index 0000000..d68cd15
--- /dev/null
+++ b/Motan-Demo/Service-Provider/src/main/resources/logback.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+ %d{HH:mm:ss} [%t] %logger{5} [%line] %p - %msg%n
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Motan-Demo/pom.xml b/Motan-Demo/pom.xml
new file mode 100644
index 0000000..eb68369
--- /dev/null
+++ b/Motan-Demo/pom.xml
@@ -0,0 +1,79 @@
+
+
+ 4.0.0
+
+ pom
+
+
+ Service-Client
+ Service-Provider
+ Service-Consumer
+
+
+ cn.mrdear.motan
+ Motan-Demo
+ 1.0-SNAPSHOT
+
+
+
+
+ org.projectlombok
+ lombok
+ 1.16.14
+
+
+ junit
+ junit
+ 4.12
+
+
+ com.google.guava
+ guava
+ 21.0
+
+
+
+ org.slf4j
+ slf4j-api
+ 1.7.7
+
+
+ org.slf4j
+ jcl-over-slf4j
+ 1.7.7
+
+
+ ch.qos.logback
+ logback-core
+ 1.1.2
+
+
+ org.logback-extensions
+ logback-ext-spring
+ 0.1.4
+
+
+ ch.qos.logback
+ logback-classic
+ 1.1.2
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ 1.8
+ 1.8
+ UTF-8
+
+
+
+
+
+
\ No newline at end of file
From 820788467d5f4d3afecdaf963d12f731d50f7655 Mon Sep 17 00:00:00 2001
From: quding
Date: Wed, 14 Jun 2017 18:07:25 +0800
Subject: [PATCH 09/15] add read me
---
README.MD | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/README.MD b/README.MD
index 15729f5..4c8fd98 100644
--- a/README.MD
+++ b/README.MD
@@ -55,9 +55,13 @@ SpringDataRedis学习的一个Demo,内容不多,配合博文:[redis学习记录(
--------------
学习Spring Cloud的一个Demo,其中对于Eureka,Ribbon,Feign等都有相应的Demo,相应博文会更新在[我的博客](mrdear.cn)上,希望对你有帮助
-13.Spring-Cloud-Demo
+13.Dubbo-Demo
--------------
增加Dubbo-Demo,一个基本的RPC调用Demo
-14.待添加
+14.Motan-Demo
+--------------
+增加Motan-Demo,一个基本的RPC调用Demo
+
+15.待添加
--------------
From cf06116f4e8e27462c38843f5e61093082bf9474 Mon Sep 17 00:00:00 2001
From: quding
Date: Fri, 30 Jun 2017 12:24:28 +0800
Subject: [PATCH 10/15] Spring Security Demo
---
README.MD | 6 +-
Spring-Security-Demo/pom.xml | 62 +++++++++++++
.../java/cn/mrdear/servuity/Application.java | 17 ++++
.../servuity/config/CommonBeanConfig.java | 23 +++++
.../cn/mrdear/servuity/config/CorsFilter.java | 40 ++++++++
.../servuity/config/SecurityConfig.java | 64 +++++++++++++
.../servuity/config/VerifyTokenFilter.java | 46 ++++++++++
.../servuity/controller/LoginCntroller.java | 65 +++++++++++++
.../servuity/dto/TokenUserAuthentication.java | 63 +++++++++++++
.../cn/mrdear/servuity/dto/TokenUserDTO.java | 25 +++++
.../cn/mrdear/servuity/util/JwtTokenUtil.java | 91 +++++++++++++++++++
.../src/main/resources/application.properties | 8 ++
12 files changed, 509 insertions(+), 1 deletion(-)
create mode 100644 Spring-Security-Demo/pom.xml
create mode 100644 Spring-Security-Demo/src/main/java/cn/mrdear/servuity/Application.java
create mode 100644 Spring-Security-Demo/src/main/java/cn/mrdear/servuity/config/CommonBeanConfig.java
create mode 100644 Spring-Security-Demo/src/main/java/cn/mrdear/servuity/config/CorsFilter.java
create mode 100644 Spring-Security-Demo/src/main/java/cn/mrdear/servuity/config/SecurityConfig.java
create mode 100644 Spring-Security-Demo/src/main/java/cn/mrdear/servuity/config/VerifyTokenFilter.java
create mode 100644 Spring-Security-Demo/src/main/java/cn/mrdear/servuity/controller/LoginCntroller.java
create mode 100644 Spring-Security-Demo/src/main/java/cn/mrdear/servuity/dto/TokenUserAuthentication.java
create mode 100644 Spring-Security-Demo/src/main/java/cn/mrdear/servuity/dto/TokenUserDTO.java
create mode 100644 Spring-Security-Demo/src/main/java/cn/mrdear/servuity/util/JwtTokenUtil.java
create mode 100644 Spring-Security-Demo/src/main/resources/application.properties
diff --git a/README.MD b/README.MD
index 4c8fd98..08ba771 100644
--- a/README.MD
+++ b/README.MD
@@ -63,5 +63,9 @@ SpringDataRedis学习的一个Demo,内容不多,配合博文:[redis学习记录(
--------------
增加Motan-Demo,一个基本的RPC调用Demo
-15.待添加
+15.Spring-Security-Demo
+--------------
+增加Spring Security Demo,项目中使用了JWT Token验证机制,该项目可以很好的了解整个流程的作用,需要配合我博客中Spring Security相关博文食用.
+
+16.待添加
--------------
diff --git a/Spring-Security-Demo/pom.xml b/Spring-Security-Demo/pom.xml
new file mode 100644
index 0000000..034f981
--- /dev/null
+++ b/Spring-Security-Demo/pom.xml
@@ -0,0 +1,62 @@
+
+
+ 4.0.0
+
+ cn.mrdear.security
+ Spring-Security-Demo
+ 1.0-SNAPSHOT
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 1.5.4.RELEASE
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-security
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+ io.jsonwebtoken
+ jjwt
+ 0.7.0
+
+
+ org.projectlombok
+ lombok
+
+
+ org.apache.commons
+ commons-lang3
+ 3.5
+
+
+ com.google.guava
+ guava
+ 21.0
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ 1.8
+ 1.8
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Spring-Security-Demo/src/main/java/cn/mrdear/servuity/Application.java b/Spring-Security-Demo/src/main/java/cn/mrdear/servuity/Application.java
new file mode 100644
index 0000000..3d1b495
--- /dev/null
+++ b/Spring-Security-Demo/src/main/java/cn/mrdear/servuity/Application.java
@@ -0,0 +1,17 @@
+package cn.mrdear.servuity;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+/**
+ * @author Niu Li
+ * @since 2017/6/16
+ */
+@SpringBootApplication
+public class Application {
+
+ public static void main(String[] args) {
+ SpringApplication.run(Application.class, args);
+ }
+
+}
diff --git a/Spring-Security-Demo/src/main/java/cn/mrdear/servuity/config/CommonBeanConfig.java b/Spring-Security-Demo/src/main/java/cn/mrdear/servuity/config/CommonBeanConfig.java
new file mode 100644
index 0000000..132dfbb
--- /dev/null
+++ b/Spring-Security-Demo/src/main/java/cn/mrdear/servuity/config/CommonBeanConfig.java
@@ -0,0 +1,23 @@
+package cn.mrdear.servuity.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import cn.mrdear.servuity.util.JwtTokenUtil;
+
+/**
+ * 配置一些线程安全的工具类
+ * @author Niu Li
+ * @since 2017/6/28
+ */
+@Configuration
+public class CommonBeanConfig {
+
+ /**
+ * 配置jwt token
+ */
+ @Bean
+ public JwtTokenUtil configToken() {
+ return new JwtTokenUtil();
+ }
+}
diff --git a/Spring-Security-Demo/src/main/java/cn/mrdear/servuity/config/CorsFilter.java b/Spring-Security-Demo/src/main/java/cn/mrdear/servuity/config/CorsFilter.java
new file mode 100644
index 0000000..feb4905
--- /dev/null
+++ b/Spring-Security-Demo/src/main/java/cn/mrdear/servuity/config/CorsFilter.java
@@ -0,0 +1,40 @@
+package cn.mrdear.servuity.config;
+
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import java.io.IOException;
+
+
+public class CorsFilter implements javax.servlet.Filter {
+ @Override
+ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
+ System.err.println("CorsFilter");
+ HttpServletResponse res = (HttpServletResponse) response;
+ HttpServletRequest req = (HttpServletRequest) request;
+
+ res.setHeader("Access-Control-Allow-Origin", "*");
+ res.setHeader("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT, OPTIONS");
+ res.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Accept-Encoding, Accept-Language, Host, Referer, Connection, User-Agent, authorization, sw-useragent, sw-version");
+
+ // Just REPLY OK if request method is OPTIONS for CORS (pre-flight)
+ if (req.getMethod().equals("OPTIONS")) {
+ res.setStatus(HttpServletResponse.SC_OK);
+ return;
+ }
+ chain.doFilter(request, response);
+ }
+
+ @Override
+ public void destroy() {
+ }
+
+ @Override
+ public void init(FilterConfig filterConfig) throws ServletException {
+ }
+}
diff --git a/Spring-Security-Demo/src/main/java/cn/mrdear/servuity/config/SecurityConfig.java b/Spring-Security-Demo/src/main/java/cn/mrdear/servuity/config/SecurityConfig.java
new file mode 100644
index 0000000..08176de
--- /dev/null
+++ b/Spring-Security-Demo/src/main/java/cn/mrdear/servuity/config/SecurityConfig.java
@@ -0,0 +1,64 @@
+package cn.mrdear.servuity.config;
+
+import org.springframework.context.annotation.Configuration;
+import org.springframework.security.config.annotation.web.builders.HttpSecurity;
+import org.springframework.security.config.annotation.web.builders.WebSecurity;
+import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
+import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
+import org.springframework.security.web.access.channel.ChannelProcessingFilter;
+import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
+import org.springframework.security.web.context.NullSecurityContextRepository;
+
+import cn.mrdear.servuity.util.JwtTokenUtil;
+
+import javax.annotation.Resource;
+
+/**
+ * Spring Security配置类
+ * @author Niu Li
+ * @since 2017/6/16
+ */
+@Configuration
+@EnableWebSecurity
+public class SecurityConfig extends WebSecurityConfigurerAdapter {
+
+ @Resource
+ private JwtTokenUtil jwtTokenUtil;
+
+ /**
+ * 在此配置不过滤的请求
+ */
+ @Override
+ public void configure(WebSecurity web) throws Exception {
+ //每一个请求对应一个空的filter链,这里一般不要配置过多,
+ // 因为查找处是一个for循环,过多就导致每个请求都需要循环一遍直到找到
+ web.ignoring().antMatchers("/","/login","/favicon.ico");
+ }
+
+ /**
+ * 在此配置过滤链
+ */
+ @Override
+ protected void configure(HttpSecurity http) throws Exception {
+ http
+ .authorizeRequests()
+ //角色定义,Spring Security会在其前面自动加上ROLE_,因此存储权限的时候也要加上ROLE_ADMIN
+ .antMatchers("/detail").access("hasRole('ADMIN')")
+ .anyRequest().permitAll().and()
+ //异常处理,可以再此使用entrypoint来定义错误输出
+ .exceptionHandling().and()
+ //不需要session来控制,所以这里可以去掉
+ .securityContext().securityContextRepository(new NullSecurityContextRepository()).and()
+ //开启匿名访问
+ .anonymous().and()
+ //退出登录自己来控制
+ .logout().disable()
+ //因为没用到cookies,所以关闭cookies
+ .csrf().disable()
+ //允许跨域
+ .addFilterBefore(new CorsFilter(), ChannelProcessingFilter.class)
+ //验证token
+ .addFilterBefore(new VerifyTokenFilter(jwtTokenUtil),
+ UsernamePasswordAuthenticationFilter.class);
+ }
+}
diff --git a/Spring-Security-Demo/src/main/java/cn/mrdear/servuity/config/VerifyTokenFilter.java b/Spring-Security-Demo/src/main/java/cn/mrdear/servuity/config/VerifyTokenFilter.java
new file mode 100644
index 0000000..813032d
--- /dev/null
+++ b/Spring-Security-Demo/src/main/java/cn/mrdear/servuity/config/VerifyTokenFilter.java
@@ -0,0 +1,46 @@
+package cn.mrdear.servuity.config;
+
+import lombok.extern.slf4j.Slf4j;
+
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.web.filter.OncePerRequestFilter;
+
+import cn.mrdear.servuity.util.JwtTokenUtil;
+import io.jsonwebtoken.JwtException;
+
+import javax.servlet.FilterChain;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import java.io.IOException;
+import java.util.Optional;
+
+/**
+ * jwt token验证类,验证成功后设置进去SecurityContext中
+ * @author Niu Li
+ * @since 2017/6/28
+ */
+@Slf4j
+public class VerifyTokenFilter extends OncePerRequestFilter {
+
+ private JwtTokenUtil jwtTokenUtil;
+
+ public VerifyTokenFilter(JwtTokenUtil jwtTokenUtil) {
+ this.jwtTokenUtil = jwtTokenUtil;
+ }
+
+ @Override
+ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
+ try {
+ Optional authentication = jwtTokenUtil.verifyToken(request);
+ log.debug("VerifyTokenFilter result: {}",authentication.orElse(null));
+ SecurityContextHolder.getContext().setAuthentication(authentication.orElse(null));
+ filterChain.doFilter(request,response);
+ } catch (JwtException e) {
+ response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
+ //可以在这里指定重定向还是返回错误接口示例
+ }
+ }
+}
diff --git a/Spring-Security-Demo/src/main/java/cn/mrdear/servuity/controller/LoginCntroller.java b/Spring-Security-Demo/src/main/java/cn/mrdear/servuity/controller/LoginCntroller.java
new file mode 100644
index 0000000..d9fcb8c
--- /dev/null
+++ b/Spring-Security-Demo/src/main/java/cn/mrdear/servuity/controller/LoginCntroller.java
@@ -0,0 +1,65 @@
+package cn.mrdear.servuity.controller;
+
+import com.google.common.collect.Lists;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import cn.mrdear.servuity.dto.TokenUserDTO;
+import cn.mrdear.servuity.util.JwtTokenUtil;
+
+import javax.annotation.Resource;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+
+/**
+ * @author Niu Li
+ * @since 2017/6/19
+ */
+@RestController
+public class LoginCntroller {
+
+ @Resource
+ private JwtTokenUtil jwtTokenUtil;
+
+ /**
+ * 该链接获取token
+ */
+ @GetMapping("/login")
+ public Map login(String username, String password) {
+ Map map = new HashMap<>();
+ if (!StringUtils.equals(username, "demo") || !StringUtils.equals(password, "demo")) {
+ map.put("status", 4);
+ map.put("msg", "登录失败,用户名密码错误");
+ return map;
+ }
+ TokenUserDTO userDTO = new TokenUserDTO();
+ userDTO.setUsername(username);
+ userDTO.setRoles(Lists.newArrayList("ROLE_ADMIN"));
+ userDTO.setId(1L);
+ userDTO.setEmail("1015315668@qq.com");
+ userDTO.setAvatar("ahahhahahhaha");
+ map.put("status", 1);
+ map.put("msg", "Success");
+ map.put("token", jwtTokenUtil.create(userDTO));
+ return map;
+ }
+
+ /**
+ * 该链接尝试获取登录用户,返回该认证用户的信息,请求该链接需要在header中放入x-authorization: token
+ */
+ @GetMapping("/detail")
+ public TokenUserDTO userDetail() {
+ Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
+ if (Objects.isNull(authentication)) {
+ return null;
+ }
+ return (TokenUserDTO) authentication.getDetails();
+ }
+
+}
diff --git a/Spring-Security-Demo/src/main/java/cn/mrdear/servuity/dto/TokenUserAuthentication.java b/Spring-Security-Demo/src/main/java/cn/mrdear/servuity/dto/TokenUserAuthentication.java
new file mode 100644
index 0000000..27a9ae6
--- /dev/null
+++ b/Spring-Security-Demo/src/main/java/cn/mrdear/servuity/dto/TokenUserAuthentication.java
@@ -0,0 +1,63 @@
+package cn.mrdear.servuity.dto;
+
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.GrantedAuthority;
+import org.springframework.security.core.authority.SimpleGrantedAuthority;
+
+import java.util.Collection;
+import java.util.stream.Collectors;
+
+/**
+ * Spring Security中存放的认证用户
+ * @author Niu Li
+ * @since 2017/6/28
+ */
+public class TokenUserAuthentication implements Authentication {
+
+ private static final long serialVersionUID = 3730332217518791533L;
+
+ private TokenUserDTO userDTO;
+
+ private Boolean authentication = false;
+
+ public TokenUserAuthentication(TokenUserDTO userDTO, Boolean authentication) {
+ this.userDTO = userDTO;
+ this.authentication = authentication;
+ }
+
+ @Override
+ public Collection extends GrantedAuthority> getAuthorities() {
+ return userDTO.getRoles().stream()
+ .map(SimpleGrantedAuthority::new).collect(Collectors.toList());
+ }
+
+ @Override
+ public Object getCredentials() {
+ return userDTO.getPassword();
+ }
+
+ @Override
+ public Object getDetails() {
+ return userDTO;
+ }
+
+ @Override
+ public Object getPrincipal() {
+ return userDTO.getUsername();
+ }
+
+ @Override
+ public boolean isAuthenticated() {
+ return authentication;
+ }
+
+ @Override
+ public void setAuthenticated(boolean isAuthenticated) throws IllegalArgumentException {
+ this.authentication = isAuthenticated;
+ }
+
+ @Override
+ public String getName() {
+ return userDTO.getUsername();
+ }
+}
diff --git a/Spring-Security-Demo/src/main/java/cn/mrdear/servuity/dto/TokenUserDTO.java b/Spring-Security-Demo/src/main/java/cn/mrdear/servuity/dto/TokenUserDTO.java
new file mode 100644
index 0000000..1185020
--- /dev/null
+++ b/Spring-Security-Demo/src/main/java/cn/mrdear/servuity/dto/TokenUserDTO.java
@@ -0,0 +1,25 @@
+package cn.mrdear.servuity.dto;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author Niu Li
+ * @since 2017/6/28
+ */
+@Data
+public class TokenUserDTO {
+
+ private Long id;
+
+ private String username;
+
+ private String password;
+
+ private String email;
+
+ private String avatar;
+
+ private List roles;
+}
diff --git a/Spring-Security-Demo/src/main/java/cn/mrdear/servuity/util/JwtTokenUtil.java b/Spring-Security-Demo/src/main/java/cn/mrdear/servuity/util/JwtTokenUtil.java
new file mode 100644
index 0000000..b6985c9
--- /dev/null
+++ b/Spring-Security-Demo/src/main/java/cn/mrdear/servuity/util/JwtTokenUtil.java
@@ -0,0 +1,91 @@
+package cn.mrdear.servuity.util;
+
+import org.apache.commons.lang3.math.NumberUtils;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.security.core.Authentication;
+
+import cn.mrdear.servuity.dto.TokenUserAuthentication;
+import cn.mrdear.servuity.dto.TokenUserDTO;
+import io.jsonwebtoken.Claims;
+import io.jsonwebtoken.Jwts;
+import io.jsonwebtoken.SignatureAlgorithm;
+
+import javax.servlet.http.HttpServletRequest;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Optional;
+
+/**
+ * jwt token
+ *
+ * @author Niu Li
+ * @since 2017/6/28
+ */
+public class JwtTokenUtil {
+ /**
+ * token过期时间
+ */
+ private static final long VALIDITY_TIME_MS = 24 * 60 * 60 * 1000; // 24 hours validity
+ /**
+ * header中标识
+ */
+ private static final String AUTH_HEADER_NAME = "x-authorization";
+
+ /**
+ * 签名密钥
+ */
+ @Value("${jwt.token.secret}")
+ private String secret;
+
+ /**
+ * 验签
+ */
+ public Optional verifyToken(HttpServletRequest request) {
+ final String token = request.getHeader(AUTH_HEADER_NAME);
+ if (token != null && !token.isEmpty()){
+ final TokenUserDTO user = parse(token.trim());
+ if (user != null) {
+ return Optional.of(new TokenUserAuthentication(user, true));
+ }
+ }
+ return Optional.empty();
+ }
+
+
+ /**
+ * 从用户中创建一个jwt Token
+ *
+ * @param userDTO 用户
+ * @return token
+ */
+ public String create(TokenUserDTO userDTO) {
+ return Jwts.builder()
+ .setExpiration(new Date(System.currentTimeMillis() + VALIDITY_TIME_MS))
+ .setSubject(userDTO.getUsername())
+ .claim("id", userDTO.getId())
+ .claim("avatar", userDTO.getAvatar())
+ .claim("email", userDTO.getEmail())
+ .claim("roles", userDTO.getRoles())
+ .signWith(SignatureAlgorithm.HS256, secret)
+ .compact();
+ }
+
+ /**
+ * 从token中取出用户
+ */
+ public TokenUserDTO parse(String token) {
+ Claims claims = Jwts.parser()
+ .setSigningKey(secret)
+ .parseClaimsJws(token)
+ .getBody();
+ TokenUserDTO userDTO = new TokenUserDTO();
+ userDTO.setId(NumberUtils.toLong(claims.getId()));
+ userDTO.setAvatar(claims.get("avatar",String.class));
+ userDTO.setUsername(claims.get("username",String.class));
+ userDTO.setEmail(claims.get("email",String.class));
+ userDTO.setRoles((List) claims.get("roles"));
+ return userDTO;
+ }
+
+}
diff --git a/Spring-Security-Demo/src/main/resources/application.properties b/Spring-Security-Demo/src/main/resources/application.properties
new file mode 100644
index 0000000..07419b0
--- /dev/null
+++ b/Spring-Security-Demo/src/main/resources/application.properties
@@ -0,0 +1,8 @@
+server.port=8080
+
+logging.level.root=info
+logging.level.org.springframework.security=debug
+
+
+# jwt token签名密钥
+jwt.token.secret=quding2017
\ No newline at end of file
From c052d05891f2982aebf711b019923fceb66b8ce6 Mon Sep 17 00:00:00 2001
From: quding
Date: Mon, 3 Jul 2017 10:54:11 +0800
Subject: [PATCH 11/15] remove password
---
.../java/cn/mrdear/servuity/dto/TokenUserAuthentication.java | 2 +-
.../src/main/java/cn/mrdear/servuity/dto/TokenUserDTO.java | 2 --
2 files changed, 1 insertion(+), 3 deletions(-)
diff --git a/Spring-Security-Demo/src/main/java/cn/mrdear/servuity/dto/TokenUserAuthentication.java b/Spring-Security-Demo/src/main/java/cn/mrdear/servuity/dto/TokenUserAuthentication.java
index 27a9ae6..a02b111 100644
--- a/Spring-Security-Demo/src/main/java/cn/mrdear/servuity/dto/TokenUserAuthentication.java
+++ b/Spring-Security-Demo/src/main/java/cn/mrdear/servuity/dto/TokenUserAuthentication.java
@@ -33,7 +33,7 @@ public Collection extends GrantedAuthority> getAuthorities() {
@Override
public Object getCredentials() {
- return userDTO.getPassword();
+ return "";
}
@Override
diff --git a/Spring-Security-Demo/src/main/java/cn/mrdear/servuity/dto/TokenUserDTO.java b/Spring-Security-Demo/src/main/java/cn/mrdear/servuity/dto/TokenUserDTO.java
index 1185020..ec6b273 100644
--- a/Spring-Security-Demo/src/main/java/cn/mrdear/servuity/dto/TokenUserDTO.java
+++ b/Spring-Security-Demo/src/main/java/cn/mrdear/servuity/dto/TokenUserDTO.java
@@ -15,8 +15,6 @@ public class TokenUserDTO {
private String username;
- private String password;
-
private String email;
private String avatar;
From 3cad5e499f612b41a6430404000b15ecadefb5fe Mon Sep 17 00:00:00 2001
From: quding
Date: Sat, 19 Aug 2017 18:46:14 +0800
Subject: [PATCH 12/15] fix name
---
.../java/cn/mrdear/{servuity => security}/Application.java | 2 +-
.../{servuity => security}/config/CommonBeanConfig.java | 4 ++--
.../cn/mrdear/{servuity => security}/config/CorsFilter.java | 2 +-
.../{servuity => security}/config/SecurityConfig.java | 4 ++--
.../{servuity => security}/config/VerifyTokenFilter.java | 4 ++--
.../{servuity => security}/controller/LoginCntroller.java | 6 +++---
.../{servuity => security}/dto/TokenUserAuthentication.java | 2 +-
.../cn/mrdear/{servuity => security}/dto/TokenUserDTO.java | 2 +-
.../cn/mrdear/{servuity => security}/util/JwtTokenUtil.java | 6 +++---
9 files changed, 16 insertions(+), 16 deletions(-)
rename Spring-Security-Demo/src/main/java/cn/mrdear/{servuity => security}/Application.java (91%)
rename Spring-Security-Demo/src/main/java/cn/mrdear/{servuity => security}/config/CommonBeanConfig.java (82%)
rename Spring-Security-Demo/src/main/java/cn/mrdear/{servuity => security}/config/CorsFilter.java (97%)
rename Spring-Security-Demo/src/main/java/cn/mrdear/{servuity => security}/config/SecurityConfig.java (96%)
rename Spring-Security-Demo/src/main/java/cn/mrdear/{servuity => security}/config/VerifyTokenFilter.java (94%)
rename Spring-Security-Demo/src/main/java/cn/mrdear/{servuity => security}/controller/LoginCntroller.java (93%)
rename Spring-Security-Demo/src/main/java/cn/mrdear/{servuity => security}/dto/TokenUserAuthentication.java (97%)
rename Spring-Security-Demo/src/main/java/cn/mrdear/{servuity => security}/dto/TokenUserDTO.java (88%)
rename Spring-Security-Demo/src/main/java/cn/mrdear/{servuity => security}/util/JwtTokenUtil.java (94%)
diff --git a/Spring-Security-Demo/src/main/java/cn/mrdear/servuity/Application.java b/Spring-Security-Demo/src/main/java/cn/mrdear/security/Application.java
similarity index 91%
rename from Spring-Security-Demo/src/main/java/cn/mrdear/servuity/Application.java
rename to Spring-Security-Demo/src/main/java/cn/mrdear/security/Application.java
index 3d1b495..a8425d5 100644
--- a/Spring-Security-Demo/src/main/java/cn/mrdear/servuity/Application.java
+++ b/Spring-Security-Demo/src/main/java/cn/mrdear/security/Application.java
@@ -1,4 +1,4 @@
-package cn.mrdear.servuity;
+package cn.mrdear.security;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
diff --git a/Spring-Security-Demo/src/main/java/cn/mrdear/servuity/config/CommonBeanConfig.java b/Spring-Security-Demo/src/main/java/cn/mrdear/security/config/CommonBeanConfig.java
similarity index 82%
rename from Spring-Security-Demo/src/main/java/cn/mrdear/servuity/config/CommonBeanConfig.java
rename to Spring-Security-Demo/src/main/java/cn/mrdear/security/config/CommonBeanConfig.java
index 132dfbb..bc1958e 100644
--- a/Spring-Security-Demo/src/main/java/cn/mrdear/servuity/config/CommonBeanConfig.java
+++ b/Spring-Security-Demo/src/main/java/cn/mrdear/security/config/CommonBeanConfig.java
@@ -1,9 +1,9 @@
-package cn.mrdear.servuity.config;
+package cn.mrdear.security.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
-import cn.mrdear.servuity.util.JwtTokenUtil;
+import cn.mrdear.security.util.JwtTokenUtil;
/**
* 配置一些线程安全的工具类
diff --git a/Spring-Security-Demo/src/main/java/cn/mrdear/servuity/config/CorsFilter.java b/Spring-Security-Demo/src/main/java/cn/mrdear/security/config/CorsFilter.java
similarity index 97%
rename from Spring-Security-Demo/src/main/java/cn/mrdear/servuity/config/CorsFilter.java
rename to Spring-Security-Demo/src/main/java/cn/mrdear/security/config/CorsFilter.java
index feb4905..2babd09 100644
--- a/Spring-Security-Demo/src/main/java/cn/mrdear/servuity/config/CorsFilter.java
+++ b/Spring-Security-Demo/src/main/java/cn/mrdear/security/config/CorsFilter.java
@@ -1,4 +1,4 @@
-package cn.mrdear.servuity.config;
+package cn.mrdear.security.config;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
diff --git a/Spring-Security-Demo/src/main/java/cn/mrdear/servuity/config/SecurityConfig.java b/Spring-Security-Demo/src/main/java/cn/mrdear/security/config/SecurityConfig.java
similarity index 96%
rename from Spring-Security-Demo/src/main/java/cn/mrdear/servuity/config/SecurityConfig.java
rename to Spring-Security-Demo/src/main/java/cn/mrdear/security/config/SecurityConfig.java
index 08176de..0c7f13a 100644
--- a/Spring-Security-Demo/src/main/java/cn/mrdear/servuity/config/SecurityConfig.java
+++ b/Spring-Security-Demo/src/main/java/cn/mrdear/security/config/SecurityConfig.java
@@ -1,4 +1,4 @@
-package cn.mrdear.servuity.config;
+package cn.mrdear.security.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
@@ -9,7 +9,7 @@
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
import org.springframework.security.web.context.NullSecurityContextRepository;
-import cn.mrdear.servuity.util.JwtTokenUtil;
+import cn.mrdear.security.util.JwtTokenUtil;
import javax.annotation.Resource;
diff --git a/Spring-Security-Demo/src/main/java/cn/mrdear/servuity/config/VerifyTokenFilter.java b/Spring-Security-Demo/src/main/java/cn/mrdear/security/config/VerifyTokenFilter.java
similarity index 94%
rename from Spring-Security-Demo/src/main/java/cn/mrdear/servuity/config/VerifyTokenFilter.java
rename to Spring-Security-Demo/src/main/java/cn/mrdear/security/config/VerifyTokenFilter.java
index 813032d..2054617 100644
--- a/Spring-Security-Demo/src/main/java/cn/mrdear/servuity/config/VerifyTokenFilter.java
+++ b/Spring-Security-Demo/src/main/java/cn/mrdear/security/config/VerifyTokenFilter.java
@@ -1,4 +1,4 @@
-package cn.mrdear.servuity.config;
+package cn.mrdear.security.config;
import lombok.extern.slf4j.Slf4j;
@@ -6,7 +6,7 @@
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.web.filter.OncePerRequestFilter;
-import cn.mrdear.servuity.util.JwtTokenUtil;
+import cn.mrdear.security.util.JwtTokenUtil;
import io.jsonwebtoken.JwtException;
import javax.servlet.FilterChain;
diff --git a/Spring-Security-Demo/src/main/java/cn/mrdear/servuity/controller/LoginCntroller.java b/Spring-Security-Demo/src/main/java/cn/mrdear/security/controller/LoginCntroller.java
similarity index 93%
rename from Spring-Security-Demo/src/main/java/cn/mrdear/servuity/controller/LoginCntroller.java
rename to Spring-Security-Demo/src/main/java/cn/mrdear/security/controller/LoginCntroller.java
index d9fcb8c..488fc57 100644
--- a/Spring-Security-Demo/src/main/java/cn/mrdear/servuity/controller/LoginCntroller.java
+++ b/Spring-Security-Demo/src/main/java/cn/mrdear/security/controller/LoginCntroller.java
@@ -1,4 +1,4 @@
-package cn.mrdear.servuity.controller;
+package cn.mrdear.security.controller;
import com.google.common.collect.Lists;
@@ -8,8 +8,8 @@
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
-import cn.mrdear.servuity.dto.TokenUserDTO;
-import cn.mrdear.servuity.util.JwtTokenUtil;
+import cn.mrdear.security.dto.TokenUserDTO;
+import cn.mrdear.security.util.JwtTokenUtil;
import javax.annotation.Resource;
diff --git a/Spring-Security-Demo/src/main/java/cn/mrdear/servuity/dto/TokenUserAuthentication.java b/Spring-Security-Demo/src/main/java/cn/mrdear/security/dto/TokenUserAuthentication.java
similarity index 97%
rename from Spring-Security-Demo/src/main/java/cn/mrdear/servuity/dto/TokenUserAuthentication.java
rename to Spring-Security-Demo/src/main/java/cn/mrdear/security/dto/TokenUserAuthentication.java
index a02b111..188acfc 100644
--- a/Spring-Security-Demo/src/main/java/cn/mrdear/servuity/dto/TokenUserAuthentication.java
+++ b/Spring-Security-Demo/src/main/java/cn/mrdear/security/dto/TokenUserAuthentication.java
@@ -1,4 +1,4 @@
-package cn.mrdear.servuity.dto;
+package cn.mrdear.security.dto;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.GrantedAuthority;
diff --git a/Spring-Security-Demo/src/main/java/cn/mrdear/servuity/dto/TokenUserDTO.java b/Spring-Security-Demo/src/main/java/cn/mrdear/security/dto/TokenUserDTO.java
similarity index 88%
rename from Spring-Security-Demo/src/main/java/cn/mrdear/servuity/dto/TokenUserDTO.java
rename to Spring-Security-Demo/src/main/java/cn/mrdear/security/dto/TokenUserDTO.java
index ec6b273..a7abda4 100644
--- a/Spring-Security-Demo/src/main/java/cn/mrdear/servuity/dto/TokenUserDTO.java
+++ b/Spring-Security-Demo/src/main/java/cn/mrdear/security/dto/TokenUserDTO.java
@@ -1,4 +1,4 @@
-package cn.mrdear.servuity.dto;
+package cn.mrdear.security.dto;
import lombok.Data;
diff --git a/Spring-Security-Demo/src/main/java/cn/mrdear/servuity/util/JwtTokenUtil.java b/Spring-Security-Demo/src/main/java/cn/mrdear/security/util/JwtTokenUtil.java
similarity index 94%
rename from Spring-Security-Demo/src/main/java/cn/mrdear/servuity/util/JwtTokenUtil.java
rename to Spring-Security-Demo/src/main/java/cn/mrdear/security/util/JwtTokenUtil.java
index b6985c9..91fcecc 100644
--- a/Spring-Security-Demo/src/main/java/cn/mrdear/servuity/util/JwtTokenUtil.java
+++ b/Spring-Security-Demo/src/main/java/cn/mrdear/security/util/JwtTokenUtil.java
@@ -1,11 +1,11 @@
-package cn.mrdear.servuity.util;
+package cn.mrdear.security.util;
import org.apache.commons.lang3.math.NumberUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.core.Authentication;
-import cn.mrdear.servuity.dto.TokenUserAuthentication;
-import cn.mrdear.servuity.dto.TokenUserDTO;
+import cn.mrdear.security.dto.TokenUserAuthentication;
+import cn.mrdear.security.dto.TokenUserDTO;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
From c46c4a6a91ab6bdd9e39a8703a3d3b7ef7880994 Mon Sep 17 00:00:00 2001
From: quding
Date: Sat, 23 Sep 2017 22:18:58 +0800
Subject: [PATCH 13/15] add ignore
---
.gitignore | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 72 insertions(+)
create mode 100644 .gitignore
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..249d5b2
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,72 @@
+# Created by .ignore support plugin (hsz.mobi)
+### JetBrains template
+# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm
+# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
+
+# User-specific stuff:
+.idea
+.idea/**/tasks.xml
+.idea/dictionaries
+
+# Sensitive or high-churn files:
+.idea/**/dataSources/
+.idea/**/dataSources.ids
+.idea/**/dataSources.xml
+.idea/**/dataSources.local.xml
+.idea/**/sqlDataSources.xml
+.idea/**/dynamic.xml
+# Gradle:
+.idea/**/gradle.xml
+# CMake
+cmake-build-debug/
+
+# Mongo Explorer plugin:
+.idea/**/mongoSettings.xml
+
+## File-based project format:
+*.iws
+
+## Plugin-specific files:
+
+# IntelliJ
+out/
+
+# mpeltonen/sbt-idea plugin
+.idea_modules/
+
+# JIRA plugin
+atlassian-ide-plugin.xml
+
+# Cursive Clojure plugin
+.idea/replstate.xml
+
+# Crashlytics plugin (for Android Studio and IntelliJ)
+com_crashlytics_export_strings.xml
+crashlytics.properties
+crashlytics-build.properties
+fabric.properties
+### Java template
+# Compiled class file
+# Log file
+*.log
+
+# BlueJ files
+*.ctxt
+
+# Mobile Tools for Java (J2ME)
+.mtj.tmp/
+
+# Package Files #
+*.jar
+*.ear
+*.zip
+*.tar.gz
+*.rar
+
+# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
+hs_err_pid*
+
+# custom
+*.iml
+
+**/target
From 12b456e73afe4b1199867a69736d3c0f9c37705e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?IT=E5=B0=8F=E7=94=9F?=
Date: Wed, 27 Sep 2017 08:18:08 -0500
Subject: [PATCH 14/15] Update README.MD
---
README.MD | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/README.MD b/README.MD
index 08ba771..b0b6503 100644
--- a/README.MD
+++ b/README.MD
@@ -1,3 +1,7 @@
+### 2017.9.27
+随着开发经验的增加,现在觉得这种Demo对于学习一个框架起不到太大的作用,顶多是个参考,并且由于使用经验的增加,对于之前一些错误的用法很难得到纠正,如果想要快速入门的话官方+造轮子才是最佳选择,类似豆瓣有许多开放的API,都可以用来练手,嘴周该项目不再更新,这点经验希望能帮助你.
+
+
#该仓库主要记录学习javaWEB中一些Demo
1.SSM-Demo
From a7b8da4e680ab0b06d057b3537e19f47d103bf54 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=B1=88=E5=AE=9A?=
Date: Sun, 4 Mar 2018 11:55:10 +0800
Subject: [PATCH 15/15] Update README.MD
---
README.MD | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.MD b/README.MD
index b0b6503..5ab30da 100644
--- a/README.MD
+++ b/README.MD
@@ -1,5 +1,5 @@
### 2017.9.27
-随着开发经验的增加,现在觉得这种Demo对于学习一个框架起不到太大的作用,顶多是个参考,并且由于使用经验的增加,对于之前一些错误的用法很难得到纠正,如果想要快速入门的话官方+造轮子才是最佳选择,类似豆瓣有许多开放的API,都可以用来练手,嘴周该项目不再更新,这点经验希望能帮助你.
+随着开发经验的增加,现在觉得这种Demo对于学习一个框架起不到太大的作用,顶多是个参考,并且由于使用经验的增加,对于之前一些错误的用法很难得到纠正,如果想要快速入门的话官方+造轮子才是最佳选择,类似豆瓣有许多开放的API,都可以用来练手,最后该项目不再更新,这点经验希望能帮助你.
#该仓库主要记录学习javaWEB中一些Demo