rest service + spring boot + docker 博客分类: dockerspring boot dockerspringboot
开发 -> 测试 -> 部署,这是软件开发一般的简化流程,作为开发者我们总是希望能专注于开发,但往往会被一些开发之外的问题所折磨,比如繁多的spring依赖和不同的环境配置。带着这个问题,本文介绍运用springboot和docker开发和构建一个rest风格的web应用。
对于我们的web应用来说,springboot相当于把web服务器嵌入发布包内,以少量的配置大大方便了程序的开发和发布。我们可以专注于项目本身,创建独立的Java应用,通过java -jar启动。
添加Spring Boot相关POM配置
<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
@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。
@Bean public 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的插件。
<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安装和运行
把可执行的jar包放入docker容器中,我们可以忽略所要部署的环境的差异性,而不需要关心环境配置。
Docker的安装和入门教程,推荐http://www.widuu.com/chinese_docker/userguide/dockerrepos.html,这里只是介绍最简单的流程。
- 对于ubuntu,可以用以下命令安装
$ 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
- 假设我们的可运行jar包放在/tmp目录下,那么可以通过以下命令在docker容器中运行。
这个命令使用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应用。
上一篇: Scala入门(二):流程控制 博客分类: scala scala入门scala教程scala
下一篇: spark WARN TaskSchedulerImpl: Initial job has not accepted any resources 博客分类: spark spark
推荐阅读
-
rest service + spring boot + docker 博客分类: dockerspring boot dockerspringboot
-
解决spring boot应用以docker容器方式启动后,进程ID是1而导致的jstack和jmap等命令不可用的问题 博客分类: dockersprng boot docker spring-boot
-
解决spring boot应用以docker容器方式启动后,进程ID是1而导致的jstack和jmap等命令不可用的问题 博客分类: dockersprng boot docker spring-boot
-
在Docker容器中运行Spring Boot应用 博客分类: spring bootspring
-
手把手教你用Spring Cloud和Docker构建微服务 博客分类: 互联网技术spring boot分布式
-
手把手教你用Spring Cloud和Docker构建微服务 博客分类: 互联网技术spring boot分布式