你的位置:首页 > ASP.net教程

[ASP.net教程]rest service + spring boot + docker


开发 -> 测试 -> 部署,这是软件开发一般的简化流程,作为开发者我们总是希望能专注于开发,但往往会被一些开发之外的问题所折磨,比如繁多的spring依赖和不同的环境配置。带着这个问题,本文介绍运用springboot和docker开发和构建一个rest风格的web应用。

 

Spring 框架作为目前非常流行的一个 Java 应用开发框架,它包含几十个不同的子项目,涵盖应用开发的不同方面。要在这些子项目之间进行选择,并快速搭建一个可以运行的应用是比较困难的事情。Spring Boot 的目的在于快速创建可以独立运行的 Spring 应用,大大提升使用 Spring 框架时的开发效率。

 

对于我们的web应用来说,springboot相当于把web服务器嵌入发布包内,以少量的配置大大方便了程序的开发和发布。我们可以专注于项目本身,创建独立的Java应用,通过java -jar启动。

 

添加Spring Boot相关POM配置

 

 收藏代码

  1. <dependencies>  
  2.   <dependency>  
  3.     <groupId>org.springframework.boot</groupId>  
  4.     <artifactId>spring-boot-starter-web</artifactId>  
  5.     <version>1.2.5.RELEASE</version>  
  6.   </dependency>  
  7. </dependencies>  

<dependencies> <dependency>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-web</artifactId>  <version>1.2.5.RELEASE</version> </dependency></dependencies>

 

 

我们只需要将spring-boot-starter-web的依赖加入到pom文件即可,它提供了对web的支持。当然也有很多推荐让其作为parent加载,但这样会引入很多不必要的jar包。

 

Controller

 

Java代码 复制代码 收藏代码

  1. @EnableAutoConfiguration  
  2. @RestController  
  3. @RequestMapping("/person")  
  4. public class Controller {  
  5.     @RequestMapping("/{name}")  
  6.     public Properties getPersion(@PathVariable("name") String name) {  
  7.         Properties p = new Properties();  
  8.         p.put("name", name);  
  9.         p.put("age", new Random().nextInt(100));  
  10.         return p;  
  11.     }  
  12.   
  13.     public static void main(String[] args) {  
  14.         SpringApplication.run(Controller.class);  
  15.     }  
  16. }  

@EnableAutoConfiguration@RestController@RequestMapping("/person")public class Controller {	@RequestMapping("/{name}")	public Properties getPersion(@PathVariable("name") String name) {		Properties p = new Properties();		p.put("name", name);		p.put("age", new Random().nextInt(100));		return p;	}	public static void main(String[] args) {		SpringApplication.run(Controller.class);	}}

 

 

 

@EnableAutoConfiguration的作用在于让 Spring Boot 根据应用所声明的依赖来对 Spring 框架进行自动配置,这就减少了开发人员的工作量。比如说我们可以加入下面这段代码来制定contextpath和port。

 

Java代码 复制代码 收藏代码

  1. @Bean  
  2. public EmbeddedServletContainerFactory servletContainer() {  
  3.   TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory("/admin", 8091);  
  4.   return factory;  
  5. }  

@Beanpublic EmbeddedServletContainerFactory servletContainer() { TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory("/admin", 8091); return factory;}

 

 

这样一个rest风格的web应用就搭建完成,可以访问http://localhost:8091/admin/person/kane查看结果。

 

Package

注意如果想到将应用打成一个可执行jar包的话,一定要用spring-boot-maven-plugin而不是其他的类似于maven-shade-plugin的插件。

 收藏代码

  1. <plugin>  
  2.   <groupId>org.springframework.boot</groupId>  
  3.   <artifactId>spring-boot-maven-plugin</artifactId>  
  4.   <version>1.2.5.RELEASE</version>  
  5.   <executions>  
  6.     <execution>  
  7.       <phase>package</phase>  
  8.       <goals>  
  9.         <goal>repackage</goal>  
  10.       </goals>  
  11.     </execution>  
  12.   </executions>  
  13.   <configuration>  
  14.     <mainClass>test.controller.Controller</mainClass>  
  15.   </configuration>  
  16. </plugin>  

<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>1.2.5.RELEASE</version> <executions>  <execution>   <phase>package</phase>   <goals>    <goal>repackage</goal>   </goals>  </execution> </executions> <configuration>  <mainClass>test.controller.Controller</mainClass> </configuration></plugin>

直接用java -jar <jar_name>即可启动web应用。

 

Docker安装和运行

Docker 是一个构建、部署以及运行应用的开放平台,应用可以在不同的环境(开发、测试、生产)中无差别的运行,为应用的开发提供了很大的灵活性。

 把可执行的jar包放入docker容器中,我们可以忽略所要部署的环境的差异性,而不需要关心环境配置。

 

Docker的安装和入门教程,推荐http://www.widuu.com/chinese_docker/userguide/dockerrepos.html,这里只是介绍最简单的流程。

 

  • 对于ubuntu,可以用以下命令安装
$ sudo apt-get update $ sudo apt-get install docker.io $ sudo ln -sf /usr/bin/docker.io /usr/local/bin/docker $ sudo sed -i '$acomplete -F _docker docker' /etc/bash_completion.d/docker.io

 

  • 选择一个java docker image,我使用java:7
sudo docker pull java:7

 

  • 假设我们的可运行jar包放在/tmp目录下,那么可以通过以下命令在docker容器中运行。
sudo docker run -d -v /tmp:/tmp java:7 java -jar /tmp/<jar_name>

这个命令使用java:7这个镜像创建一个container,并在后台执行java -jar <jar_name>。-d表示后台运行,-v表示目录映射,可以简单理解为ln -s。

 

  • docker container启动起来之后,可以使用sudo docker ps命令查看该进程的端口映射,比如0.0.0.0:49155->8091/tcp,它表示将docker容器8091端口映射到容器宿主的49155端口,所以我们可以通过http://<hostname>:49155/admin/person/kane访问前文中的web应用。
  • java企业级通用权限安全框架源码 SpringMVC mybatis or hibernate+ehcache shiro druid bootstrap HTML5

    【java框架源码下载】