摘要: Spring Boot 是从 Spring 框架发展起来的,所以对于使用 Spring 框架的庞大用户群体来说,随着 Spring Boot 的普及使用,将使众多开发者成为它的拥趸。
简单易用的 Spring Boot,无疑是 Java 开发初学者的指路明灯,更是资深 Java 开发者的得力助手。快速开发是研发 Spring Boot 的初衷,这不但是一个开发团队的终生追求,也是一个企业解放生产力、提高生产效率的保障。
Spring Boot 的组件化整合规则,完美地整合了云应用开发工具,使其在云计算领域中处于领先地位,为创建高可用和高性能的服务提供了更加简便和快捷的方法。
Spring Boot 是从 Spring 框架发展起来的,所以对于使用 Spring 框架的庞大用户群体来说,随着 Spring Boot 的普及使用,将使众多开发者成为它的拥趸。
因此,
在 OSC 第 135 期高手问答中
,我们策划了“深入实践 Spring Boot”的主题,并邀请了
@快意开发
(陈韶健)作为高手嘉宾。
本文整理了本期高手问答中一些与 Spring Boot 相关的精彩问答。
企业项目开发的时候,Spring Boot 有哪些使用场景呢,已知的坑是什么呢?
SSO,分布式文件系统,微服务使用等等,在企业版应用中,这些都是非常顶用的。如果硬说有坑的话,就是服务多了,服务部署和运维管理必须要上一个档次,否则就会显得混乱起来。
个人感觉,从快速构建方面确实很高效,而且这样框架也是经过了很多实践之后,结晶的产品。但是,对于新人来说,直接应用 Spring Boot,还是感觉不是很理想,可能会使新人对于 Spring 框架的理解上产生阻碍。对于 Spring Boot 本身,还是非常不错的,云部署,快速构建都很不错。我的问题是,公司对于 Spring Boot 的应用有什么要求吗?一般开发会在什么情况下使用它?对于企业级的开发是否也有要求?
Spring Boot 对背景知识没有特别要求,对于新人来说,搭建好项目让其跟随开发,更加容易入手。对于公司的要求,主要看工程的规模和部署的方式,如果使用 Docker 部署并需要设置负载均衡等对运维人员和服务器的要求会高一些。
经常看到 Spring Boot 和微服务关联起来,是因为 Spring Boot 开发和部署比较快么,能具体说说么?
Spring Boot 确实是以快速开发为目标而设计的,它的简单易用的特性确实减轻了开发者的负担,从而可以提高开发的生产率。你的问题需要全面理解一下 Spring Boot,可以通过它的官方网站进行一些了解。
完整的参考 DEMO
— 不写一行代码即运行一个应用
已经使用 Spring Boot 有几个月了,也开始在使用 Spring Boot 搭建公司的基础系统。我理解的 Spring Boot 应该是提倡以 jar 的形式部署,但这种方式在包的体积过大的情况下部署太慢了,之前我们的业务和服务器都在国外,上传的时候速度慢得一塌糊涂,除了改成 war 发布,还有什么其他办法么?
其实最好的方式,还是使用 jar,然后结合使用 Docker 来发布。如果一个项目的 jar 包过大的话,要看看造成这种情况的主要原因是什么。是不是 jar 包中包含的资源文件太多,还是项目包含的业务太复杂,如果是前种原因,考虑优化一些图片资源,或者使用分布式文件系统来存储图片资源。如果是后一种原因,是不是考虑将原项目使用模块化方式进行细分。
@采蘑菇的大叔 贡献的 DEMO http://git.oschina.net/icer/iblog。用 SpringBoot 搭了个架子,整合了 freemarker 和 mybatis。
Spring Boot 集成了服务器,以 jar 文件发布,减少对外部文件和环境依赖。但长期集成导致体积过大,这的确是个问题,能不能考虑做一些工具对 jar 进行减肥呢?
这就要分析一下造成 jar 过大的原因是什么,如果是因为资源文件太多造成的,那就要优化一些图片的设计,或使用其它方式来链接资源文件,如果是因为一个项目包含的业务太多太复杂造成的,就要考虑是否可以将项目进行拆分。
如果是用 Spring Boot 来做成 jar 服务启动,怎么衡量服务粒度。因为每个服务都要运行 Spring,或者也会加个 dubbo 的依赖等等。跑起多个实例,这就重复了。其实就是单体应用跟分布式应用的点。
主要还是看你怎样配置服务,如果使用 Spring Cloud 的服务发现来管理服务,可以通过负载均衡的配置支持多个服务同时对外提供服务。
Spring Boot 同样支持以标准的 war 方式部署应用,只是在启动类上需要进行细微的调整,并不强调始终以 jar 方式部署。
Spring Boot 应该是鼓励以 jar 的方式部署,随着 Spring Boot 一起来的应该是想推动微服务。个人见解,仅供讨论。(@
采蘑菇的大叔
)
使用 Spring Boot 的时候,页面文件会被打包到 jar 中,如果只更新页面文件,又要对 jar 进行打包上传。有没有简单的方法?类似原先的 Tocmat 部署就可以直接修改页面文件。不需要重启的方法?
Spring Boot 项目如何做到 libs jar 和 app jar 分开,很多时候,我只是更新应用层代码,本地编译好上传上去,启动的时候通过脚本启动,那么如何将 libs 和 app 分别打包并启动呢?
请简单介绍一下 Spring Boot 和 Docker 结合
真要简单地说:将 Spring Boot 项目打包成 jar,然后通过 Docker 进行部署。用 Spring Boot 开发的项目,非常适合用 Docker 来部署。
这两个东西之间没有任何关系。Spring Boot 主要的目的是简化开发和部署过程中配置文件的使用,使用了很多约定俗成的规则,按照这些约定的规则来开发,可以大大减少配置文件的使用,甚至完全不使用配置文件都是可能的。Docker 只是把运行环境,像 OS、JVM、Nginx 等等打包到一起的个工具而已。把 Spring Boot 生成的可执行的 jar 包放进这个运行环境中来运行。这两个工具都只是简化了开发和运维的繁杂过程,使用了很多自动化处理的技术而已。(@清靜無虞)
Spring Boot 从开发到部署的最佳实践 ,是否必须依赖容器技术,如何平滑过渡到 Docker 容器上?
Spring Boot 并不依赖 Docker 容器,也可以使用 war 方式或者按照传统的方式直接使用文件系统来发布,只是使用 Docker,更能发挥它在各个方面优势。
能分享下 Spring Cloud 和 Docker 部署方面的经验吗?
旧的项目转到 Spring Boot 有什么条件?
不需要什么条件,使用 Spring Boot,最好是对原来的项目进行重新设计,或者使得原来的逻辑进行重建。
是不是微服务架构比较适合用 Spring Boot?那对于老的系统或代码,怎么转到 Spring Boot?
所有使用 Web 方式开发的项目都适合使用 Spring Boot 框架,并从中获益,微服务开发是它的一大特色。旧系统的代码不能转换,可以使用原来的业务逻辑进行重建。
几年前做开发还是用的 Spring,包括 Spring 的 Bean 工厂方案还有 SpringMVC,现在主要业务的开发一般用的公司自研框架,所以对 Spring 感觉比较生疏了,我就想了解了解,Spring Boot 同几年前的 Spring 相比,都有哪些方面的发展和变化,能大概讲讲吗?