Browse Source

网关和用户微服务编写

chenweida 7 years ago
parent
commit
6a40589425

+ 5 - 33
common/common-swagger/src/main/java/com/yihu/common/config/SwaggerConfig.java

@ -1,4 +1,4 @@
package com.yihu.common.config;
package com.yihu.jw.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
@ -13,9 +13,8 @@ import static springfox.documentation.builders.PathSelectors.regex;
@Configuration
@EnableSwagger2
@ComponentScan("com.yihu.**.controller")
@ComponentScan("com.yihu.jw.*.controller")
public class SwaggerConfig {
    public static final String LEGACY_API = "Legacy";
    public static final String PUBLIC_API = "Default";
    @Bean
@ -23,40 +22,13 @@ public class SwaggerConfig {
        return new Docket(DocumentationType.SWAGGER_2)
                .groupName(PUBLIC_API)
                .useDefaultResponseMessages(false)
                .forCodeGeneration(true)
                .pathMapping("/")
                .select()
                .paths(or(regex("/api.*")))
                .build()
                .apiInfo(publicApiInfo());
    }
    @Bean
    public Docket legacyAPI(){
        return new Docket(DocumentationType.SWAGGER_2)
                .groupName(LEGACY_API)
                .useDefaultResponseMessages(false)
                .forCodeGeneration(false)
                .pathMapping("/")
                .select()
                .paths(or(regex("/rest/v.*")))
                .paths(or(
                        regex("/patient/.*")))
                .build()
                .apiInfo(legacyApiInfo());
    }
    private ApiInfo legacyApiInfo() {
        ApiInfo apiInfo = new ApiInfo("基卫2.0API",
                "基卫2.0API(历史兼容接口),此部分API因为设计不规范,但已经发布,所以继续提供兼容。",
                "1.0",
                "No terms of service",
                "wenfujian@jkzl.com",
                "The Apache License, Version 2.0",
                "http://www.apache.org/licenses/LICENSE-2.0.html"
        );
        return apiInfo;
                .apiInfo(publicApiInfo());
    }
    private ApiInfo publicApiInfo() {

+ 1 - 0
readme.MD

@ -7,4 +7,5 @@
     svr-discovery    发现服务
     common-lib-parent-pom    common公共工程的maven父pom
     jw-lib-parent-pom   jw业务公共工程的maven父pom
     web-gateway 对外的接口网关
     .gitignore   项目提交忽略配置文件

+ 1 - 1
svr-configuration/pom.xml

@ -22,7 +22,7 @@
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
            <artifactId>spring-cloud-starter-eureka-server</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>

+ 10 - 5
svr-discovery/pom.xml

@ -15,11 +15,6 @@
    <version>1.0.0</version>
    <dependencies>
        <dependency>
            <groupId>com.yihu.cwd</groupId>
            <artifactId>common-log</artifactId>
            <version>1.1.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka-server</artifactId>
@ -28,5 +23,15 @@
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot</artifactId>
        </dependency>
        <!--给 eurika界面添加账号密码验证-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.3.3.RELEASE</version>
        </dependency>
    </dependencies>
</project>

+ 13 - 8
svr-discovery/src/main/resources/application.yml

@ -8,16 +8,21 @@ spring:
eureka:
  client:
    register-with-eureka: false
    fetch-registry: false
    register-with-eureka: false #是否注册到eurika
    registry-fetch-interval-seconds: 30 #定期的更新客户端的服务清单 30秒更新一次
#    fetch-registry: false
    serviceUrl:
      defaultZone: http://127.0.0.1:${server.port}/eureka/
      defaultZone: http://user:123456@127.0.0.1:8761/eureka/
#eurika界面的账号密码
security:
  basic:
    enabled: true
  user:
    name: user
    password: 123456
info:
  app:
    name: DiscoveryService
    description: EHR platform global discovery service
    version: 1.0.0
---
spring:

+ 96 - 19
svr-lib-parent-pom/pom.xml

@ -27,12 +27,17 @@
        <!--业务微服务-->
        <module>../svr/svr-user</module><!--用户微服务-->
        <!--网关-->
        <module>../web-gateway</module><!--web网关-->
    </modules>
    <properties>
        <version.springCloud>1.3.0.RELEASE</version.springCloud>
        <version.springCloud.start>1.2.0.RELEASE</version.springCloud.start>
        <version.springBoot>1.5.3.RELEASE</version.springBoot>
        <version.mysql>5.1.38</version.mysql>
    </properties>
    <!--dependencyManagement作用子配置不写版本默认继承父配置-->
    <dependencyManagement>
@ -63,18 +68,18 @@
                <artifactId>spring-cloud-starter-bus-amqp</artifactId>
                <version>${version.springCloud}</version>
            </dependency>
            <!--断路由-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-feign</artifactId>
                <artifactId>spring-cloud-starter-hystrix</artifactId>
                <version>${version.springCloud}</version>
            </dependency>
            <!--断路由-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-hystrix</artifactId>
                <artifactId>spring-cloud-starter-feign</artifactId>
                <version>${version.springCloud}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter</artifactId>
@ -91,6 +96,7 @@
                <version>${version.springCloud.start}</version>
            </dependency>
            <!--springCloud end-->
            <!--springBoot start-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
@ -103,31 +109,102 @@
                <artifactId>spring-boot-starter-web</artifactId>
                <version>${version.springBoot}</version>
            </dependency>
            <!--监控工程得到一些指标-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-actuator</artifactId>
                <version>${version.springBoot}</version>
            </dependency>
            <!--自动注入模块-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-autoconfigure</artifactId>
                <version>${version.springBoot}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-configuration-processor</artifactId>
                <version>${version.springBoot}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-jpa</artifactId>
                <version>${version.springBoot}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-websocket</artifactId>
                <version>${version.springBoot}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-security</artifactId>
                <version>${version.springBoot}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-mail</artifactId>
                <version>${version.springBoot}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
                <version>${version.springBoot}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-jdbc</artifactId>
                <version>${version.springBoot}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-aop</artifactId>
                <version>${version.springBoot}</version>
            </dependency>
            <!--springBoot end-->
            <!--数据库驱动 start-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${version.mysql}</version>
            </dependency>
            <!--数据库驱动 end-->
        </dependencies>
    </dependencyManagement>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
                <version>3.1</version>
            </plugin>
        </plugins>
        <pluginManagement>
            <plugins>
                <!--打成war包插件 还需要
                1.配置类继承SpringBootServletInitializer
                2.把所有tomcat相关的包的生命周期改成provide
                 start-->
                <plugin>
                    <artifactId>maven-war-plugin</artifactId>
                    <configuration>
                        <failOnMissingWebXml>false</failOnMissingWebXml>
                    </configuration>
                </plugin>
                <!--打成war包插件 end-->
                <!--springboot插件 start-->
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
                <!--springboot插件 en-->
                <!--编译插件 start-->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                    </configuration>
                    <version>3.1</version>
                </plugin>
                <!--编译插件 end-->
            </plugins>
        </pluginManagement>
    </build>
</project>

+ 35 - 1
svr/svr-user/pom.xml

@ -11,7 +11,41 @@
    </parent>
    <groupId>com.yihu</groupId>
    <artifactId>svr-user</artifactId>
    <version>1.0-SNAPSHOT</version>
    <version>1.0.0</version>
    <dependencies>
        <dependency>
            <groupId>com.yihu</groupId>
            <artifactId>common-swagger</artifactId>
            <version>1.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka-server</artifactId>
        </dependency>
    </dependencies>
</project>

+ 27 - 0
svr/svr-user/src/main/java/com/yihu/jw/Application.java

@ -0,0 +1,27 @@
package com.yihu.jw;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
/**
 * Created by chenweida on 2017/5/10.
 */
@SpringBootApplication(exclude={DataSourceAutoConfiguration.class,HibernateJpaAutoConfiguration.class})
@EnableDiscoveryClient//服务注册到发现服务
public class Application {
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

+ 24 - 0
svr/svr-user/src/main/java/com/yihu/jw/user/contorller/PatientController.java

@ -0,0 +1,24 @@
package com.yihu.jw.user.contorller;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.web.bind.annotation.*;
/**
 * Created by chenweida on 2017/5/10.
 */
@RestController
@RequestMapping("/patient")
@Api(description = "患者")
public class PatientController {
    @ApiOperation(value = "根据code查找患者")
    @GetMapping(value = "findByCode")
    public String findByCode(
            @ApiParam(name = "code", value = "患者code", required = true)@RequestParam(value = "code", required = true) String code) {
        System.out.println(code);
       return "调用根据code查找患者";
    }
}

+ 39 - 0
svr/svr-user/src/main/resources/application.yml

@ -0,0 +1,39 @@
server:
  port: 10020
spring:
  application:
    name:  svr-user  ##注册到发现服务的id 如果id一样 eurika会自动做负载
  cloud:
    config:
      enabled: false    ##是否加入配置服务
eureka:
  client:
    serviceUrl:
      #http://账号:密码@127.0.0.1:8761/eureka/
      defaultZone: http://user:123456@127.0.0.1:8761/eureka/
    healthcheck:
      enabled: true #启动监控检查
  instance:
    #eurika使用IP不使用host
    prefer-ip-address: true
    #定制化在eurika中显示的名称
    instance-id: ${spring.application.name}:${spring.application.instance_id:${server.port}}
---
spring:
  profiles: dev
---
spring:
  profiles: test
---
spring:
  profiles: prod

+ 6 - 0
svr/svr-user/src/main/resources/banner.txt

@ -0,0 +1,6 @@
  _____               _    _
  / ____|             | |  | |
 | (_____   ___ __    | |  | |___  ___ _ __
  \___ \ \ / / '__|   | |  | / __|/ _ \ '__|
  ____) \ V /| |      | |__| \__ \  __/ |
 |_____/ \_/ |_|       \____/|___/\___|_|

+ 58 - 0
web-gateway/pom.xml

@ -0,0 +1,58 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.yihu</groupId>
        <artifactId>svr-lib-parent-pom</artifactId>
        <version>1.0.0</version>
        <relativePath>../svr-lib-parent-pom/pom.xml</relativePath>
    </parent>
    <groupId>com.yihu</groupId>
    <artifactId>web-gateway</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
        <dependency>
            <groupId>com.yihu</groupId>
            <artifactId>common-swagger</artifactId>
            <version>1.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka-server</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-feign</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-hystrix</artifactId>
        </dependency>
    </dependencies>
</project>

+ 3 - 0
web-gateway/readMe.MD

@ -0,0 +1,3 @@
此项目是一个对外的网关项目
    网关调用微服务利用fegin(spring-cloud-starter-feign)
    

+ 25 - 0
web-gateway/src/main/java/com/yihu/jw/Application.java

@ -0,0 +1,25 @@
package com.yihu.jw;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.netflix.feign.EnableFeignClients;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
/**
 * Created by chenweida on 2017/5/10.
 */
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
@EnableDiscoveryClient//服务注册到发现服务
@EnableFeignClients //声名式的客户端
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

+ 28 - 0
web-gateway/src/main/java/com/yihu/jw/controller/PatientController.java

@ -0,0 +1,28 @@
package com.yihu.jw.controller;
import com.yihu.jw.fegin.PatientFegin;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;
/**
 * Created by chenweida on 2017/5/10.
 */
@RestController
@RequestMapping("/rest/patient")
@Api(description = "患者")
public class PatientController {
    @Autowired
    private PatientFegin patientFegin;
    @ApiOperation(value = "根据code查找患者")
    @GetMapping(value = "findByCode")
    public String findByCode(
            @ApiParam(name = "code", value = "患者code", required = true) @RequestParam(value = "code", required = true) String code) {
        return patientFegin.findByCode(code);
    }
}

+ 21 - 0
web-gateway/src/main/java/com/yihu/jw/fegin/PatientFegin.java

@ -0,0 +1,21 @@
package com.yihu.jw.fegin;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
/**
 * Created by chenweida on 2017/5/10.
 */
@FeignClient("svr-user")// 值是eurika的实例名字
@RequestMapping("/patient")
public interface PatientFegin {
    @RequestMapping(value = "/findByCode",method = RequestMethod.GET)
    public String findByCode(@RequestParam(value = "code", required = true) String code);
}

+ 40 - 0
web-gateway/src/main/resources/application.yml

@ -0,0 +1,40 @@
server:
  port: 8088
spring:
  application:
    name:  web-gateway  ##注册到发现服务的id 如果id一样 eurika会自动做负载
  cloud:
    config:
      enabled: false    ##是否加入配置服务
eureka:
  client:
    serviceUrl:
      #http://账号:密码@127.0.0.1:8761/eureka/
      defaultZone: http://user:123456@127.0.0.1:8761/eureka/
    healthcheck:
      enabled: true #启动监控检查
  instance:
    #eurika使用IP不使用host
    prefer-ip-address: true
    #定制化在eurika中显示的名称
    instance-id: ${spring.application.name}:${spring.application.instance_id:${server.port}}
---
spring:
  profiles: dev
---
spring:
  profiles: test
---
spring:
  profiles: prod

+ 8 - 0
web-gateway/src/main/resources/banner.txt

@ -0,0 +1,8 @@
 __          __  _             _____       _
 \ \        / / | |           / ____|     | |
  \ \  /\  / /__| |__        | |  __  __ _| |_ _____      ____ _ _   _
   \ \/  \/ / _ \ '_ \       | | |_ |/ _` | __/ _ \ \ /\ / / _` | | | |
    \  /\  /  __/ |_) |      | |__| | (_| | ||  __/\ V  V / (_| | |_| |
     \/  \/ \___|_.__/        \_____|\__,_|\__\___| \_/\_/ \__,_|\__, |
                                                                  __/ |
                                                                 |___/