简单易用的 Spring Boot,无疑是 Java 开发初学者的指路明灯,更是资深 Java 开发者的得力助手。快速开发是研发 Spring Boot 的初衷,这不但是一个开发团队的终生追求,也是一个企业解放生产力、提高生产效率的保障。
Spring Boot 的组件化整合规则,完美地整合了云应用开发工具,使其在云计算领域中处于领先地位,为创建高可用和高性能的服务提供了更加简便和快捷的方法。
Spring Boot 是从 Spring 框架发展起来的,所以对于使用 Spring 框架的庞大用户群体来说,随着 Spring Boot 的普及使用,将使众多开发者成为它的拥趸。
因此, 在 OSC 第 135 期高手问答中 ,我们策划了 “深入实践 Spring Boot” 的主题,并邀请了@快意开发(陈韶健)作为高手嘉宾。
本文整理了本期高手问答中一些与 Spring Boot 相关的精彩问答。
Spring Boot 对背景知识没有特别要求,对于新人来说,搭建好项目让其跟随开发,更加容易入手。对于公司的要求,主要看工程的规模和部署的方式,如果使用 Docker 部署并需要设置负载均衡等对运维人员和服务器的要求会高一些。
Spring Boot 确实是以快速开发为目标而设计的,它的简单易用的特性确实减轻了开发者的负担,从而可以提高开发的生产率。你的问题需要全面理解一下 Spring Boot,可以通过它的官方网站进行一些了解。
完整的参考 DEMO — 不写一行代码即运行一个应用
最适合用来开发 Web 应用项目。
其实最好的方式,还是使用 jar,然后结合使用 Docker 来发布。如果一个项目的 jar 包过大的话,要看看造成这种情况的主要原因是什么。是不是 jar 包中包含的资源文件太多,还是项目包含的业务太复杂,如果是前种原因,考虑优化一些图片资源,或者使用分布式文件系统来存储图片资源。如果是后一种原因,是不是考虑将原项目使用模块化方式进行细分。
@ 采蘑菇的大叔 贡献的 DEMO http://git.oschina.net/icer/iblog 。用 SpringBoot 搭了个架子,整合了 freemarker 和 mybatis。
这就要分析一下造成 jar 过大的原因是什么,如果是因为资源文件太多造成的,那就要优化一些图片的设计,或使用其它方式来链接资源文件,如果是因为一个项目包含的业务太多太复杂造成的,就要考虑是否可以将项目进行拆分。
主要还是看你怎样配置服务,如果使用 Spring Cloud 的服务发现来管理服务,可以通过负载均衡的配置支持多个服务同时对外提供服务。
可以使用 war 方式部署 。
使用 war 方式发布就可以实现你的要求。
真要简单地说:将 Spring Boot 项目打包成 jar,然后通过 Docker 进行部署。用 Spring Boot 开发的项目,非常适合用 Docker 来部署。
这两个东西之间没有任何关系。Spring Boot 主要的目的是简化开发和部署过程中配置文件的使用,使用了很多约定俗成的规则,按照这些约定的规则来开发,可以大大减少配置文件的使用,甚至完全不使用配置文件都是可能的。Docker 只是把运行环境,像 OS、JVM、Nginx 等等打包到一起的个工具而已。把 Spring Boot 生成的可执行的 jar 包放进这个运行环境中来运行。这两个工具都只是简化了开发和运维的繁杂过程,使用了很多自动化处理的技术而已。( @ 清靜無虞 )
Spring Boot 并不依赖 Docker 容器,也可以使用 war 方式或者按照传统的方式直接使用文件系统来发布,只是使用 Docker,更能发挥它在各个方面优势。
使用 Docker 发布 Spring Boot 项目( https://my.oschina.net/syic/blog/799656 )
不需要什么条件,使用 Spring Boot,最好是对原来的项目进行重新设计,或者使得原来的逻辑进行重建。
所有使用 Web 方式开发的项目都适合使用 Spring Boot 框架,并从中获益,微服务开发是它的一大特色。旧系统的代码不能转换,可以使用原来的业务逻辑进行重建。
Spring Boot 是在 Spring 的基础建立起来的,保留了 Spring 的一些精髓,同时也摒弃了一些糟粕,表现在:
Spring Boot 能最大限度地简化配置,也可以嵌入 Tcomcat 等服务,并且在开发企业级应用、分布式应用等方面更加得心应手,更加难能可贵的是使用非常简单,非常适合快速开发的需要,符合软件工程构件化发展的目标。
Spring MVC 还是属于 Spring 框架的,Spring Boot 是在 Spring 的基础之上建立的一个全新开发框架。
在 Spring Boot 家族中,使用云应用开发工具集 Spring Cloud 开发微服务应用,具有得天独厚的优势。这里所说的微服务,是指功能强大,业务单一的分布式应用系统,并非简单指项目的微型结构。
对的,十分正确。对于数据库来说,使用 JPA 就能一网打尽了。
服务的划分这个和 Spring Boot 没有任何关系。微服务的一个难点就是服务的划分,有些服务是按技术特点来划分,比如像 push 服务、sms 服务等。有些是按业务特点来划分,像订单服务等,有些根据实际情况还进行服务的分层。
如果使用 Maven 或其它项目管理工具,都可以在工程配置引用依赖包。
跟 Tomcat 相比,Jetty 会显得更加小巧一些,但是综合来看,还是使用默认的 Tomcat 比较实在。
Undertow 比 Tomcat 性能要好得多,https 一般不需要在 Undertow 这一层来配。一般都会在 Undertow 之前加一个 Nginx,在 Nginx中配置就行了。( @ 清靜無虞 )
性能测试 Undertow 比 Tomcat 稍好一些。稳妥可以用 Tomcat,想改换一下思路可以用 Undertow。http redirect to https 用 Undertow 有折中的办法是引入 Spring Security。不过一般还是应该前端配 Nginx 或者 Apache Http Server 对外开放 https 服务,内部用 http 做反向代理通道协议。( @ 二的基本算合格 )
http://menelic.com/2016/01/06/java-rest-api-benchmark-tomcat-vs-jetty-vs-grizzly-vs-undertow/ 看了这个博客,虽然 Tomcat 慢一些,但是实际业务中 Tomcat 并不会是瓶颈,使用 Tomcat 也是一个很好的选择,毕竟使用了这么多年了,对各项配置也比较熟悉了。( @ 梦朝思夕 )
对于企业级应用来说,权限管理建议使用 SSO 的方式来实现,这在《深入实践 Spring Boot》一书中有实际的使用实例,主要也是使用了 Spring Security 和 OAuth2 的技术。
Zookeeper 和 Spring-Cloud-Eureka 一样,都是一个服务注册和发现的管理工具,而 Spring-Cloud-Eureka 在 Spring Boot 中使用,更加适合用来调度使用 Spring Cloud 开发的微服务。至于你所说的定时任务调度,应该不属于这个范围吧。
折腾权限会有个 csrf 的问题,楼主要是弄好了分享一下心得呗。问题:开启 csrf 的话,渲染页面模版的时候,会生成一个 csrf 字符串,如果 post 提交可以带上,但如果写出是 json 的接口,就取不到这个 csrf 了,那么在提交 post 请求的时候就会报一个 csrf 相关的错误。( @ 朋也 )
Spring Boot 及其前身 Spring,对于任何第三方都能提供很好的支持,更不用说对 Spring Cloud 的支持了。对于系统的安全管理和访问控制,推荐使用 Spring Cloud 的 SSO,它与 Spring Boot 框架能够达到非常融洽的效果。
N 好像有点大吧,原来的工程分成十几个项目,已经很不错了。使用 Spring Boot 的好处是,可以统一项目配置,和使用发现服务,并更好地管理负载均衡,提高系统的高可用性。
在 Spring Boot 的配置文件中好像没有这个配置参数,如果一定要这个配置,也可以将项目用 war 方式发布,然后像以前配置 Tomcat 一样配置。
如果设置成连接 Tomcat 服务器来启动应用,可以设置成热部署的方式。
有关 Spring Boot 的相关问答内容至此结束。开源中国的技术问答区上面活跃着很多技术大牛,欢迎各位在上面踊跃提问和回答。