• springboot构建rest服务,打包docker镜像


    场景

    项目提供rest服务,需要导出rest接口文档,并把服务打包成docker镜像。

    过程

    1.使用SpringBoot实现rest服务

    Maven的pom.xml

    <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>
    ​
      <groupId>com.hll</groupId>
      <artifactId>springboot-docker</artifactId>
      <version>0.1</version>
      <packaging>jar</packaging>
    ​
      <name>springboot-docker</name>
      <url>http://maven.apache.org</url>
      <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
      </parent>
      <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
      </properties>
      <dependencies>
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-test</artifactId>
          <scope>test</scope>
        </dependency>
        <!-- Swagger -->
        <dependency>
          <groupId>io.springfox</groupId>
          <artifactId>springfox-swagger2</artifactId>
          <version>2.6.1</version>
        </dependency>
        <dependency>
          <groupId>io.springfox</groupId>
          <artifactId>springfox-swagger-ui</artifactId>
          <version>2.6.1</version>
        </dependency>
        <dependency>
          <groupId>com.google.guava</groupId>
          <artifactId>guava</artifactId>
          <version>19.0</version>
        </dependency>
      </dependencies>
      <build>
        <plugins>
          <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
          </plugin>
        </plugins>
      </build>
    </project>

    简单的启动类:

    @SpringBootApplication
    public class Bootstrap {
      public static void main(String[] args) {
        SpringApplication.run(Bootstrap.class);
      }
    }

    两个服务接口:

    @RestController
    @RequestMapping("/api")
    public class RestApi {
    ​
      @RequestMapping(value = "/person", method = RequestMethod.GET)
      public Person get(String name, int num) {
        return new Person(name, num);
      }
    ​
      @RequestMapping(value = "/person", method = RequestMethod.POST)
      public Map<String, Object> post(Person person) {
        System.out.println(person);
        HashMap<String, Object> map = Maps.newHashMap();
        map.put("status", "ok");
        map.put("msg", "are you ok");
        return map;
      }
    }

    2.使用Swagger导出rest接口文档

    依赖的jar包在pom.xml中。

    Swagger的简单配置如下:

    @Configuration
    @EnableSwagger2
    public class SwaggerConfig {
      @Bean
      public Docket createRestApi() {
        Predicate<RequestHandler> predicate = input -> true;
        return new Docket(DocumentationType.SWAGGER_2)
            .apiInfo(apiInfo())
            .useDefaultResponseMessages(false)
            .select()
            .apis(predicate)
            .build();
      }
    ​
      private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
            .title("我的docker服务API文档")//大标题
            .version("1.0")//版本
            .build();
      }
    ​
    }

    在SpringMVC的方法上使用Swagger的注解

    @RestController
    @RequestMapping("/api")
    @Api(value = "user", description = "用户管理", produces = MediaType.APPLICATION_JSON_VALUE)
    public class RestApi {
    ​
      @RequestMapping(value = "/person", method = RequestMethod.GET)
      @ApiOperation(value = "获取用户接口", notes = "获取用户接口详细描述")
      public Person get(String name, int num) {
        return new Person(name, num);
      }
    ​
      @RequestMapping(value = "/person", method = RequestMethod.POST)
      @ApiOperation(value = "创建用户接口", notes = "创建用户接口详细描述")
      public Map<String, Object> post(Person person) {
        System.out.println(person);
        HashMap<String, Object> map = Maps.newHashMap();
        map.put("status", "ok");
        map.put("msg", "are you ok");
        return map;
      }
    }
    ​

    启动应用,访问 http://localhost:8080/swagger-ui.html#/rest-api,出现Swagger生成的rest接口文档。

    3.使用docker打包镜像

    先使用Maven打包,man clean package,生成jar包(springboot-docker-0.1.jar)

    编写Dockerfile:

    FROM java:8
    ​
    MAINTAINER huangll99@126.com
    ​
    ADD springboot-docker-0.1.jar /app.jar
    ​
    EXPOSE 8080
    ​
    ENTRYPOINT ["/usr/bin/java","-jar","app.jar"]

    创建一个空目录,将Dockerfile和springboot-docker-0.1.jar放入其中,构建镜像

    docker build -t huangll/springboot-docker .

    docker images 查看镜像

    REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
    huangll/springboot-docker   latest              3407557eb443        About an hour ago   662 MB

    662MB有点大呀。。。

    运行容器:

    docker run -d --name springboot -p 8080:8080 huangll/springboot-docker

    docker ps 查看容器:

    CONTAINER ID        IMAGE                       COMMAND                  CREATED             STATUS              PORTS                    NAMES
    762de16b3afc        huangll/springboot-docker   "/usr/bin/java -ja..."   About an hour ago   Up 30 minutes       0.0.0.0:8080->8080/tcp   springboot

    现在在你的笔记本上访问rest接口文档吧!

  • 相关阅读:
    奥卡姆剃刀和没有免费的午餐定理
    print("decimal hex chr {0:^30}".format("name")) 是什么意思
    python爬虫准备知识---2、为什么选择python来进行爬虫
    python日常疑难---2、python中查看函数帮助
    python超简单实用爬虫操作---6、模拟登录获取数据
    python requests库 爬取视频
    利用Python中的requests库爬取视频的图片
    python超简单实用爬虫操作---5、爬取视频
    python超简单实用爬虫操作---4、爬取图片
    用Intent实现activity的跳转
  • 原文地址:https://www.cnblogs.com/huangll99/p/7000802.html
Copyright © 2020-2023  润新知