1. 聚能聊>
  2. 话题详情

【赠书】《Spring Boot 开发实战》作者与你探讨最佳实践的开发

想要在数秒内创建一个企业级Web应用吗?
想要摒弃繁杂凌乱的XML,实现“零XML配置”的Spring 应用开发吗?
想要几行配置就完成MyBatis、JPA、Redis等第三方框架的集成吗?
想要一键启动Web应用(再也不用费事去安装配置Tomcat)吗?
想要从让你痛不欲生的jar包冲突中解脱吗?
想要清晰地、可视化地、数据化地度量应用程序的运行状态和性能指标吗?
想要领略简洁优雅的 Kotlin 编程语言跟极简风格的 Spring Boot + Gradle 的企业级最佳开发实践吗?
......

OK,下面让我开始这趟奇妙之旅吧~

1.Spring Boot 是什么?

image

Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。

在 Java 开发领域的诸多著名框架:Spring 框架及其衍生框架、做缓存Redis、消息队列框架RabbitMQ、Greenplum数据库等等,这些都是 Pivotal 团队的产品。还有Tomcat、Apache Http Server、Groovy里的一些顶级开发者,DevOps理论的提出者都在Pivotal。

Spring 团队在现有 Spring 框架的基础上,开发了一个新框架:Spring Boot,用来简化配置和部署 Spring 应用程序的过程,干掉了那些繁琐的开发步骤和样板代码及其配置,使得基于 Spring 框架的 Java 企业级应用开发“极简化”。

相比于传统的 Spring/Spring MVC 框架的企业级应用开发(Spring 的各种配置太复杂了,我们之前是在用“生命”在搞这些配置),而Spring Boot 用简单的注解和 application.properties 配置文件,避免了繁琐而且容易出错的 xml配置文件,极大的简化了基于 Spring 框架的企业级应用开发的配置。

2. Kotlin :炙手可热的 JVM 编程语言

image

而 Kotlin 是由 JetBrains 团队开发的多平台、静态类型、强工程实用性的编程语言。

Kotlin 100% 兼容Java,比Java更强大、更安全、更简洁、更优雅,比 Scala 更简单、更实用。

Kotlin 是 Google 公司的 Android 官方支持的开发语言。

Spring 官方也正式支持Kotlin语言,Spring Boot 2.0 版本中为 Kotlin 提供了一流的支持。其实,在 Spring Boot 2.0 和 Spring 5.0 框架源代码中,我们已经可以看到 Kotlin 代码。

3. Gradle:比 Maven 更加简洁灵动的自动化构建工具

image

至于Java 开发领域的项目构建工具,曾经的 Ant、Maven 无疑是“行业标准”。但是,作为后起之秀的 Gradle 的发展则如日中天。Gradle抛弃了Maven的基于 xml 的繁琐配置(众所周知XML的阅读体验比较差),Gradle 取而代之,采用了领域特定语言 Groovy DSL 的配置,大大简化了构建代码的行数。Gradle 极其简洁,基于Groovy的紧凑脚本让人爱不释手;Gradle 强大灵活,各种在Maven中难以下手的事情在 Gradle 中就是小菜一碟。相比于一门 Groovy 编程语言的配置跟 xml 语法的配置,孰优孰劣,显而易见。
本书可以说是我对使用 Spring Boot + Kotlin 进行服务端开发的实战和思考过程的粗浅总结。通过本书的写作,加深了我对 Spring Boot框架和 Kotlin 编程语言的理解,我深刻体会到了学无止境的含义。写书的过程也是我系统学习与思的过程,如果本书能够对你有所帮助,将不胜欣慰。

欢迎大家一起来聊聊自己使用的企业级项目开发技术栈~

  1. Java 程序员到了必须学习 Spring Boot 的时候了吗?
  2. 我的Java语言用得很溜,还需要学习什么 Kotlin 吗?
  3. Maven 已经这么强大了,Gradle 真的有那么好用吗?
  4. 在Docker容器中运行Spring Boot应用真的有那么方便吗?
    ......

最后顺便介绍一下

我的这本书《 Spring Boot 开发实战 》。

Spring Boot 开发实战

本书系统介绍了使用 Spring Boot 2.0 框架,基于 Gradle + Kotlin 来开发企业级应用的最佳实践。希望通过简练的表述,系统全面地介绍如何使用 Spring Boot 2.0 框架开发项目,以及如何 Kotlin 进行实际的服务端项目的开发。

全书共分三大部分:

第 I 部分 Spring Boot 框架基础(第1-3章)
第 II 部分Spring Boot 项目综合实战(第4-17章)
第 III 部分Spring Boot 系统监控、测试与运维(第18-20章)

欢迎感兴趣的朋友们一起来实战!

参与话题

奖品区域 活动规则 已 结束

  • 奖品一

    Spring Boot开发实战 x 5

90个回答

5

黄一刀 已获得Spring Boot开发实战 复制链接去分享

Java 程序员到了必须学习 Spring Boot 的时候了吗?
不一定,看实际情况,不是每个公司都用得上,但是作为java技术员还是有必要事先了解一下的。
我的Java语言用得很溜,还需要学习什么 Kotlin 吗?
还是得具体问题具体分析,但不管怎么说,多一门手艺,多一条出路,技多不压身。
Maven 已经这么强大了,Gradle 真的有那么好用吗?
我在web项目里面用过Maven,在安卓项目里面用过Gradle,就切身体会而言,Gradle 还是比Maven好用许多的,多功能全自动。
在Docker容器中运行Spring Boot应用真的有那么方便吗?
还是非常方便的,可以很大的减小运维工作量,需要更新应用程序时,直接往Docker扔个jar就万事大吉了。
备注:兄台自称会写诗,能不能亮一手看看。

程序员诗人 回复

厉害!👍

黄一刀 回复

求赐武功秘籍!

程序员诗人 回复

没问题。请稍微等等下~

zeju 回复

Spring Boot对于新手来说确实减少了很多的繁琐工作

黄一刀 回复
回复@zeju:

形象点说,操作傻瓜化。

唐吉坷德g 回复

逻辑要清晰,简单易懂

阿童沐 回复

稳得

田阿大仙 回复

求赐武功秘籍!

顶顶对对 回复

厉害了

记住咋爱你 回复

😱

评论
2

穆仁穆仁 已获得Spring Boot开发实战 复制链接去分享

Java 程序员到了必须学习 Spring Boot 的时候了吗?

没有什么框架是必须学习的。但是SpringBoot集成了大部分使用的套件,让新手在不了解底层代码的情况下,能快速构建自己的Web工程,而且用于约定的特性,让大家遵循统一的规范,让大型项目的可维护性,可读性大大增强。

SpringBoot带来的不是单单是开发效率的提升,集成的测试组件,监控也让测试,监控的效率大大提升。可以说SpringBoot是基于目前Web开发,工程化非常好的解决方案。

我的Java语言用得很溜,还需要学习什么 Kotlin 吗?
Kotlin适用了下,更像JAVA,跟Python的综合体。JetBrain团队应该是结合了很多语言的特性,对于JAVA语言进行了简化与增强,让小团队也能干出大事情。而且,你用Kotlin完全可以不抛弃Java生态圈,还是在这个生态里生存,各种轮子一样用,但是你比别人跑得更快更稳了。

Maven 已经这么强大了,Gradle 真的有那么好用吗?
如果Maven只是作为管理依赖的组件,那么好像Gradle 跟Maven也没什么优势。定义好Dependency,根据Maven插件给出的生命周期进行操作就Ok了,但是你的构建有很多个性化的需求,Gradle 更加灵活的特性就显示出来了。如果足够了解Groovy,也理解Maven的配置和构建,Gradle会是绝佳选择,尤其是它几乎能和现有的Maven系统无缝集成,而且你也能享受到简洁带来的极大乐趣。

在Docker容器中运行Spring Boot应用真的有那么方便吗?

当然,在没有使用 Docker 之前,我们需要搭建这样一个环境的话,需要安装 Nginx、Mysql ,再进行一系列的配置调试,还要担心各种环境问题;使用 Docker 之后简单两个命令就完成服务的上线、下线。

程序员诗人 回复

厉害!!

评论
2

小虾2018 已获得Spring Boot开发实战 复制链接去分享

一起来聊聊自己使用的企业级项目开发技术栈~
1.Java 程序员到了必须学习 Spring Boot 的时候了吗?

image

说起 Spring Boot 我们不得不先了解一下 Spring 这个企业,不仅因为 Spring Boot 来源于 Spirng 大家族,而且 Spring Boot 的诞生和 Sping 框架的发展息息相关。

时间回到2002年,当时正是 Java EE 和 EJB 大行其道的时候,很多知名公司都是采用此技术方案进行项目开发。这时候有一个美国的小伙子认为 EJB 太过臃肿,并不是所有的项目都需要使用 EJB 这种大型框架,应该会有一种更好的方案来解决这个问题。

为了证明他的想法是正确的,于2002年10月甚至写了一本书《 Expert One-on-One J2EE 》,介绍了当时 Java 企业应用程序开发的情况,并指出了 Java EE 和 EJB 组件框架中存在的一些主要缺陷。在这本书中,他提出了一个基于普通 Java 类和依赖注入的更简单的解决方案。

随着使用 Spring 进行开发的个人和企业越来越多,Spring 也慢慢从一个单一简洁的小框架变成一个大而全的开源软件,Spring 的边界不断的进行扩充,到了后来 Spring 几乎可以做任何事情了,市面上主流的开源软件、中间件都有 Spring 对应组件支持,人们在享用 Spring 的这种便利之后,也遇到了一些问题。

Spring 每集成一个开源软件,就需要增加一些基础配置,慢慢的随着人们开发的项目越来越庞大,往往需要集成很多开源软件,因此后期使用 Spirng 开发大型项目需要引入很多配置文件,太多的配置非常难以理解,并容易配置出错,到了后来人们甚至称 Spring 为配置地狱。

Spring 似乎也意识到了这些问题,急需有这么一套软件可以解决这些问题,这个时候微服务的概念也慢慢兴起,快速开发微小独立的应用变得更为急迫,Spring 刚好处在这么一个交叉点上,于 2013 年初开始的 Spring Boot 项目的研发,2014年4月,Spring Boot 1.0.0 发布。

Spring Boot 诞生之初,就受到开源社区的持续关注,陆续有一些个人和企业尝试着使用了 Spring Boot,并迅速喜欢上了这款开源软件。直到2016年,在国内 Spring Boot 才被正真使用了起来,期间很多研究 Spring Boot 的开发者在网上写了大量关于 Spring Boot 的文章,同时有一些公司在企业内部进行了小规模的使用,并将使用经验分享了出来。从2016年到2018年,使用 Spring Boot 的企业和个人开发者越来越多,我们从 Spring Boot 关键字的百度指数就可以看出。

image

上图为2014年到2018年 Spring Boot 的百度指数,可以看出 Spring Boot 2.0 的推出引发了搜索高峰。

当然 Spring Boot 不是为了取代 Spring ,Spring Boot 基于 Spring 开发,是为了让人们更容易的使用 Spring。看到 Spring Boot 的市场反应,Spring 官方也非常重视 Spring Boot 的后续发展,已经将 Spring Boot 作为公司最顶级的项目来推广,放到了官网上第一的位置,因此后续 Spring Boot 的持续发展也被看好。

Spring Boot 特性

使用 Spring 项目引导页面可以在几秒构建一个项目
方便对外输出各种形式的服务,如 REST API、WebSocket、Web、Streaming、Tasks
非常简洁的安全策略集成
支持关系数据库和非关系数据库
支持运行期内嵌容器,如 Tomcat、Jetty
强大的开发包,支持热启动
自动管理依赖
自带应用监控
支持各种 IED,如 IntelliJ IDEA 、NetBeans
Spring Boot 这些特性会给我们研发带来非常大的优势!

2.我的Java语言用得很溜,还需要学习什么 Kotlin 吗?

下面这张图片来自 Code Complete 一书,展示了软件项目的各种活动所占的比例:

image

遵循 Steve McConnell 在 Code Complete 一书中提出的模式,我们可以将软件构建活动分解成三个子活动:详细设计、编码与调试、开发测试。

Kotlin 对于详细设计子活动没什么影响(这项活动通常独立于选用的特定的面向对象编程语言),因此,在这一部分,Kotlin 和 Java 需要付出同样的努力。

据我所知,对于开发测试子活动,Kotlin 也没有提出什么革命性的东西。因此,开发测试需要付出的努力也一样。

就剩编码与调试子活动了。

在考虑了所有的情况之后,谷歌最终决定支持 Kotlin Anroid 开发。我认为,谷歌员工都是非常聪明的人,我相信他们在决定支持 Kotlin 之前已经进行了非常深入的分析。

Kotlin是JetBrains的一种新的编程语言。它首次出现在2011年,JetBrains推出了名为“科特林”的项目。 Kotlin是开源语言。
基本上像Java一样,C和C ++ - Kotlin也是“静态类型编程语言”。

Kotlin语言的好处

Kotlin编译为JVM字节码或JavaScript - 像Java一样,Bytecode也是Kotlin程序的编译格式。 字节码表示编程代码,一旦编译,就通过虚拟机而不是计算机的处理器运行。 通过使用这种方法,一旦编译并运行虚拟机,源代码就可以在任何平台上运行。 一旦kotlin程序被转换为字节码,它可以通过网络传输并由JVM(Java虚拟机)执行。

Kotlin程序可以使用所有现有的Java框架和库 - 是的,Kotlin程序可以使用所有现有的Java框架和库,甚至依赖于注释处理的高级框架也是如此。关于kotlin语言的主要重点是它可以轻松地与Maven的,摇篮和其他构建系统集成。
Kotlin可以轻松学习,平易近人。通过简单的阅读语言参考可以轻松学习。语言干净直观(易于使用和理解)。Kotlin看起来很像Scala,但更简单。
Kotlin是开放源码,没有收费。
将Java自动转换为Kotlin - JetBrains将IntelliJ集成了一个新功能,将Java转换为Kotlin,节省了大量的时间。而且它也节省了我们重新编写世代代码。
Kotlin的空安全性很好 - 现在摆脱NullPointerExceptions。这种类型的系统帮助我们避免空指针异常。在Kotlin系统中,系统只拒绝编译尝试分配或返回null的代码考虑以下示例 -
代码审查不是问题 - 科特林更注重可读性的语法,所以代码审查不是一个问题,它们仍然可以由那些不熟悉语言的团队成员完成。

Kotlin语言的特点

十亿美元的错误是正确的。 如上所述,Kotlin避免了空指针异常。 如果我们尝试分配或返回null到变量或函数,那么它将不会编译。

但是在某些特殊情况下,如果我们在程序中需要可空性,那么我们必须非常好地问Kotlin。 每个Nullable型都需要特别的护理和治疗。 我们不能像非可空类型那样对待它们,这是一件非常好的事情。

2017年谷歌I/O大会的最后,谷歌宣布将Kotlin语言作为安卓开发的一级编程语言。Kotlin由JetBrains公司开发,与Java 100%互通,并具备诸多Java尚不支持的新特性。谷歌称还将与JetBrains公司合作,为Kotlin设立一个非盈利基金会。

Kotlin的文件扩展名为.kt和.kts,使用Kotlin,你可以用更少的代码获得更多的功能。 而你写的代码越少,你犯的错误就越少。除此以外,他还有如下特点:

Kotlin编译为JVM字节码或JavaScript,方便在没有JVM的设备上运行。
Kotlin程序可以使用所有现有的Java框架和库,也就是说所有的现有程序不需要更改就可以直接被调用。
Kotlin可以轻松学习,平易近人。它的规则及其简单,语法规则少,易于学习。
Kotlin是开放源码,没有收费。虽然java也是开源语言,但是相比于其他的非开源的还是有一定优势的。
将Java自动转换为Kotlin,有强迫症的也可以这么搞,不用逼死强迫症的。
Kotlin的空安全性很好
代码审查不是问题。
精简语法和简明,看得懂,学得会,写得出。
空安全 Null Safety- 如上节所述,Kotlin避免了NullPointerException。
扩展函数Extension Functions- Kotlin允许我们扩展现有类的功能,而不继承它们。意味着Kotlin提供了扩展具有新功能的类的能力,而无需继承类。
智能Casts - 当谈到Casts时,Kotlin编译器真的很聪明。在许多情况下不需要在kotlin中使用显式转换操作符,但是在Kotlin中,对于不可变值有“is-checking”,在需要时自动插入

类型推断Type Inference- 在Kotlin中,有一件伟大的事情,你不必明确指定每个变量的类型(以清晰详细的方式)。但是,如果要明确定义数据类型,还可以这样做。

函数式编程Functional Programming- 重要的是Kotlin是一种功能性的编程语言。基本上,Kotlin由许多有用的方法组成,其中包括高阶函数,lambda表达式,运算符重载,惰性评估,运算符重载等等。

你可以摆脱util类让我们来讨论一下有关使用util类的丑陋事情。 你有没有一个项目没有他们? 我们几乎不记得这一切。 Kotlin有一个聪明的解决方案 - 扩展功能 - 帮助你摆脱所有的util类一劳永逸。扩展函数几乎是一个通常的Kotlin函数。 但是当你声明它,你需要指定的实例将具有扩展功能的类。

3.Maven 已经这么强大了,Gradle 真的有那么好用吗?

Java世界中主要有三大构建工具:Ant、Maven和Gradle。经过几年的发展,Ant几乎销声匿迹、Maven也日薄西山,而Gradle的发展则如日中天。笔者有幸见证了Maven的没落和Gradle的兴起。Maven的主要功能主要分为5点,分别是依赖管理系统、多模块构建、一致的项目结构、一致的构建模型和插件机制。我们可以从这五个方面来分析一下Gradle比起Maven的先进之处。

依赖管理系统

Maven为Java世界引入了一个新的依赖管理系统。在Java世界中,可以用groupId、artifactId、version组成的Coordination(坐标)唯一标识一个依赖。任何基于Maven构建的项目自身也必须定义这三项属性,生成的包可以是Jar包,也可以是war包或者ear包。一个典型的依赖引用如下所示:


junit
junit
4.12
test


org.springframework
spring-test

从上面可以看出当引用一个依赖时,version可以省略掉,这样在获取依赖时会选择最新的版本。而存储这些组件的仓库有远程仓库和本地仓库之分。远程仓库可以使用世界公用的central仓库,也可以使用Apache Nexus自建私有仓库;本地仓库则在本地计算机上。通过Maven安装目录下的settings.xml文件可以配置本地仓库的路径,以及采用的远程仓库的地址。

Gradle在设计的时候基本沿用了Maven的这套依赖管理体系。不过它在引用依赖时还是进行了一些改进。首先引用依赖方面变得非常简洁。

dependencies {
compile 'org.hibernate:hibernate-core:3.6.7.Final'
testCompile ‘junit:junit:4.+'
}
第二,Maven和Gradle对依赖项的scope有所不同。在Maven世界中,一个依赖项有6种scope,分别是complie(默认)、provided、runtime、test、system、import。而grade将其简化为了4种,compile、runtime、testCompile、testRuntime。那么如果想在gradle使用类似于provided的scope怎么办?别着急,由于gradle语言的强大表现力,我们可以轻松编写代码来实现类似于provided scope的概念(例如How to use provided scope for jar file in Gradle build?)。

第三点是Gradle支持动态的版本依赖。在版本号后面使用+号的方式可以实现动态的版本管理。

第四点是在解决依赖冲突方面Gradle的实现机制更加明确。使用Maven和Gradle进行依赖管理时都采用的是传递性依赖;而如果多个依赖项指向同一个依赖项的不同版本时就会引起依赖冲突。而Maven处理这种依赖关系往往是噩梦一般的存在。而Gradle在解决依赖冲突方面相对来说比较明确。

Maven将项目的构建周期限制的太死,你无法在构建周期中添加新的phase,只能将插件绑定到已有的phase上。而现在项目的构建过程变得越来越复杂,而且多样化,显然Maven对这种复杂度缺少足够的应变能力。比如你想在项目构建过程中进行一项压缩所有javascript的任务,那么就要绑定到Maven的现有的某个phase上,而显然貌似放在哪个phase都不太合适。而且这些phase都是串行的,整个执行下来是一条线,这也限制了Maven的构建效率。而Gradle在构建模型上则非常灵活。在Gradle世界里可以轻松创建一个task,并随时通过depends语法建立与已有task的依赖关系。甚至对于Java项目的构建来说,Gradle是通过名为java的插件来包含了一个对Java项目的构建周期,这等于Gradle本身直接与项目构建周期是解耦的。

插件机制

Maven和Gradle设计时都采用了插件机制。但显然Gradle更胜一筹。主要原因在于Maven是基于XML进行配置。所以其配置语法太受限于XML。即使实现很小的功能都需要设计一个插件,建立其与XML配置的关联。

Maven的设计核心Convention Over Configuration被Gradle更加发扬光大,而Gradle的配置即代码又超越了Maven。在Gradle中任何配置都可以作为代码被执行的,我们也可以随时使用已有的Ant脚本(Ant task是Gradle中的一等公民)、Java类库、Groovy类库来辅助完成构建任务的编写。

这种采用本身语言实现的DSL对本身语言项目进行构建管理的例子比比皆是。比如Rake和Ruby、Grunt和JavaScript、Sbt和Ruby…..而Gradle之所以使用Groovy语言实现,是因为Groovy比Java语言更具表现力,其语法特性更丰富,又兼具函数式的特点。这几年兴起的语言(比如Scala、Go、Swift)都属于强类型的语言,兼具面向对象和函数式的特点。

最后想说的Gradle的命令行比Maven的要强大的多。

4.在Docker容器中运行Spring Boot应用真的有那么方便吗?

image

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。

接下来我们看看docker的故事。
环境管理复杂 - 从各种OS到各种中间件到各种app, 一款产品能够成功作为开发者需要关心的东西太多,且难于管理,这个问题几乎在所有现代IT相关行业都需要面对。
云计算时代的到来 - AWS的成功, 引导开发者将应用转移到 cloud 上, 解决了硬件管理的问题,然而中间件相关的问题依然存在 (所以openstack HEAT和 AWS cloudformation 都着力解决这个问题)。开发者思路变化提供了可能性。
虚拟化手段的变化 - cloud 时代采用标配硬件来降低成本,采用虚拟化手段来满足用户按需使用的需求以及保证可用性和隔离性。然而无论是KVM还是Xen在 docker 看来,都在浪费资源,因为用户需要的是高效运行环境而非OS, GuestOS既浪费资源又难于管理, 更加轻量级的LXC更加灵活和快速
LXC的移动性 - LXC在 linux 2.6 的 kernel 里就已经存在了,但是其设计之初并非为云计算考虑的,缺少标准化的描述手段和容器的可迁移性,决定其构建出的环境难于迁移和标准化管理(相对于KVM之类image和snapshot的概念)。docker 就在这个问题上做出实质性的革新。这是docker最独特的地方。

image

image

VM技术和容器技术对比

面对上述几个问题,docker设想是交付运行环境如同海运,OS如同一个货轮,每一个在OS基础上的软件都如同一个集装箱,用户可以通过标准化手段自由组装运行环境,同时集装箱的内容可以由用户自定义,也可以由专业人员制造。这样,交付一个软件,就是一系列标准化组件的集合的交付,如同乐高积木,用户只需要选择合适的积木组合,并且在最顶端署上自己的名字(最后个标准化组件是用户的app)。这也就是基于docker的PaaS产品的原型。

image

黄一刀 回复

文章来源???

评论
1

西风二马 已获得Spring Boot开发实战 复制链接去分享

熟悉Spring Boot/Cloud的人都知道,Spring Boot依赖于Spring,而Spring Cloud又依赖于Spring Boot,因此Spring Boot2.0的发布正式整合了Spring5.0的很多特性,同样后面Spring Cloud最新版本的发布也需要整合最新的Spring Boot2.0内容。自己一只在使用中学习,学习中使用,应该是2.0比1.x多了很多东西,也做了很多改变,自己的脑海里对2.0和1.0的东西混淆在一起,就像对java8和java7的东西混合在一起使用一样,虽然这也也没太大问题,但总感觉不舒服,无论是脑海里的看法,还是工程实践。这本书也是刚买不久,粗粗的看了一下,感觉东西比较全,点都有覆盖,自己工作中涉及到的,以及可能涉及到的点都有,不知道详细程度如何,实际开发中会存在很多大大小小的或配置,或使用方法的坑,比如第一个坑:Spring Boot 2.0.0 需要JDK1.8 以上和Spring Framework 5.0.2.Release 以上版本,构建支持Maven3.2+ 和Gradle4,现在一般来说公司都要求jdk1.8了吧,但是maven很多情况是2x系列,gradle是3x系列,这点要注意。我在详读之前,心里其实希望看到关于springboot的一些最佳实践推荐,毕竟很多问题有多个方法可以解决,但有最佳实践最好。这本书涉及docker化,但是内容不多,我也可以理解吧,毕竟这是一本springboot的书,而且就使用docker而言,这些内容足够了,当然运维人员看这个是远远不够的,比如集群,比如k8s等,做为应用开发测试人员,是足够了。先好好研读,再来和大家交流学习。

程序员诗人 回复

确实是的。

西风二马 回复

在求一本书啊,给周边朋友用

评论
4

痞子姜 复制链接去分享

1、Java 程序员到了必须学习 Spring Boot 的时候了吗?

是到了学习Spring Boot的时候了,Spring Boot是顺应潮流的产物,是先进生产力的代表,没道理不去学习,而且学习Spring Boot也能了解一些Spring的发展方向,为未来的学习打下良好的基础

2、我的Java语言用得很溜,还需要学习什么 Kotlin 吗?

学习不同的语言,会对编码有不一样的认识,学习Kotlin 可以加深对java的理解,怎么去利用Java和Kotlin 的优劣势

3、Maven 已经这么强大了,Gradle 真的有那么好用吗?

Gradle书写上是有优势的,编码简洁,但在实际应用当中,相比Maven还是有一些欠缺,并不能完全替代Maven,在商业项目上,还是推荐Maven来构建,Gradle目前拿来练手就好了

4、在Docker容器中运行Spring Boot应用真的有那么方便吗?

方便,减少了很多运维工作,把很多复杂的环境问题解决掉了

程序员诗人 回复

不能同意更多

评论
1

debugger; 已获得Spring Boot开发实战 复制链接去分享

1. Java 程序员到了必须学习 Spring Boot 的时候了吗? 答案是肯定的。美丽优于丑陋。 清楚优于含糊。 简单优于复杂。 复杂优于繁琐。 平坦优于曲折。 宽松优于密集。 重要的是可读性。 特殊的案例不足以特殊到破坏规则。 尽管实践可以打破真理。 错误却不可置之不理。 除非另有明确要求。 面对模棱两可,拒绝猜测。 2. 我的Java语言用得很溜,还需要学习什么 Kotlin 吗? 当然。为什么需要kotlin? 空类型安全 Lambda表达式 扩展方法 类型推导 胜任java能做的所有事,还要更加难 没有分号!!!! 妈妈在也不用担心我的NullPointerExpection了! 对于个人的项目来转向Kotlin,通常不是很难的选择,毕竟Kotlin是那么优秀的语言,相信很多人还是愿意尝试并使用这个事半功倍的语言的。 而比较难抉择的情况是如果如何让团队转用Kotlin,个人认为团队难以转用的原因有很多,比如学习成本,历史包袱等等。但其实根本原因还是思维方式的问题,歪果仁喜欢用工具来提升开发效率,因为人力成本很高。而国内团队提高效率的办法通常是增加成员。 不久以后,android开发会慢慢从java转向kotlin。所以,如果有时间,还是尽量多的知道一点关于kotlin的使用把。 3. Maven 已经这么强大了,Gradle 真的有那么好用吗? 对的。Java世界中主要有三大构建工具:Ant、Maven和Gradle。经过几年的发展,Ant几乎销声匿迹、Maven也日薄西山,而Gradle的发展则如日中天。Maven的设计核心Convention Over Configuration被Gradle更加发扬光大,而Gradle的配置即代码又超越了Maven。在Gradle中任何配置都可以作为代码被执行的,我们也可以随时使用已有的Ant脚本(Ant task是Gradle中的一等公民)、Java类库、Groovy类库来辅助完成构建任务的编写。 Gradle的命令行比Maven的要强大的太多。 4. 在Docker容器中运行Spring Boot应用真的有那么方便吗? 是的。微服务的天然选择。传统项目实施过程中经常会出现“程序在我这跑得好好的,在你那怎么就不行呢?! ”   这是一个典型的应用场景,Docker image中包含了程序需要的所有的运行时依赖,比如java的程序,肯定要在image中包含jdk;比如Python的程序,肯定要在image中包含对应版本的Python解释器。Docker把整个运行时环境打包放到image中,所以搞定了环境依赖问题!   Docker解决了运行环境和配置问题,方便发布,也就方便做持续集成。
2

langll 复制链接去分享

php 学这个咋样

程序员诗人 回复

挺好的, Spring Boot 是互联网公司通用技术栈

评论
3

cyandnow 复制链接去分享

1.Java 程序员到了必须学习 Spring Boot 的时候了吗?
其实这个问题分人而论,对于有追求的 Java程序员来说肯定是必须了解到,相比于.NET Core/Ruby On Rails/Django 的快速开发,传统的 Spring 需要配置很多,之前用SSM 组合写一个项目配置就花了很多的时间,现在 Java 也可以快速开始的项目的实现,对于微服务的使用来说真是完美的配合.
2.我的Java语言用得很溜,还需要学习什么 Kotlin 吗?
进无止境,首先 Kotlin 兼容 Java 代码使其过渡比较顺利,甚至可以说是渐进的方式,其他 Kotlin 的语法,我原职是使用 ObjC 的 iOS 开发,后来使用 Swift,后来也有接触 Scala,感觉其语法及其相似,再后来接触到Kotlin,也是与 Swift 语法相接近的,这使好感度倍加,同时有 RxKotlin 的加持,如虎添翼.
3.Maven 已经这么强大了,Gradle 真的有那么好用吗?
有看过相关文章,其实 Gradle 速度是比不上 Maven 的,但是 Gradle 贵在 Groovy 语法的支持上,配置文件清晰明了,结构明确,相比于 Maven 的配置是要简单.使用也要灵活,同时能使用 Maven 的仓库,可以说是站在巨人的肩膀上了,也是一种进步.
4.在Docker容器中运行Spring Boot应用真的有那么方便吗?
如同在1中提到的微服务,时代造就英雄,得益于分布式,云计算,以及模块化,工程化的概念普及,使得微服务的应用场景得到大大提高,同时 Docker 的实现方式也有利于以上提到的实现,可以说是相得益彰,在 Docker 容器中运行应用都很方便,那么运行 Spring Boot 应用也是很方便的了.配合 CI 的使用,更是使我们从繁杂的工作中抽身出来,有更多的时间来实现功能部分.

2

1068023340742010 复制链接去分享

大二了,刚刚踮起脚尖想要跨入门,加油,虽然现在还看不懂spring。..

uname 回复

兄弟啊,至少你大二就有这个想法了的,非常棒了,我当时大4都还在不务正业,惭愧

评论
1

1663736118232994 复制链接去分享

朋友买了一本,简单看了下还不错,spring boot适合什么样的项目?

程序员诗人 回复

spring适合的,都行

评论
3

青藤木子 复制链接去分享

Java 程序员到了必须学习 Spring Boot 的时候了吗?
我正在学呢,目前还在努力找资料,Spring用起来真的不舒服,本人最不喜欢的就是xml了,对xml有极大的反感,特别是Android开发,xml成堆,但是用上Spring boot后感觉非常舒服,眼睛再也不同咯,而且我用Spring boot时经常用的kotlin,所以我感觉非用不可,一定要学习啊,很巴适
我的Java语言用得很溜,还需要学习什么 Kotlin 吗?
Java用的六,但是实际代码一大堆不是吗?自从kotlin出来后我就开始学了,目前开发小项目不是问题,要学的话很快就能入手,并且Java调用kotlin,kotlin还能调用java,Java一百多行代码,kotlin只要八十行,最重要的是总字节少了。总的来kotlin入手很快,可以学
Maven 已经这么强大了,Gradle 真的有那么好用吗?
构建安卓软件时用的就是Gradle,目前我并没有什么感觉那个更好,唯一的就是Maven要下很多依赖库,跟node.js差不多,Gradle是封装在一个库,下一个库然后解包就可以用了,两者下载速度都几乎一样慢,gradle偶尔好一些,总的说两个我觉得都一样吧
在Docker容器中运行Spring Boot应用真的有那么方便吗?
抱歉,没用过Docker,之前想在我的Archlinux上安装却安装失败,无赖没用上

2

1197035857721869 复制链接去分享

虽然工作才一年,但是还是发表一下自己的看法:
1、首先是springboot的大热其实是必然的趋势,首当其冲的就是降低了你搭建spring项目的门槛,不用拷贝繁琐的xml,也不用担心xsd和jar的版本不一致导致出错,提供了许多默认的配置,bean的配置方式提倡java config,增加了大量的condition相关的注解,这点我觉得很关键,然后内嵌了tomcat容器也是一个小亮点吧,反正就是你用起来不再那么麻烦了,这个大概也就是所谓的习惯优于配置吧,而且spring cloud也是基于spring boot的,所以说其实学习springboot是很有必要的,其实spring boot不就是spring么,所以spring掌握的好,spring boot根本不是问题。
2、关于其他语言,应该说不只是Kotlin ,其实学习一点其他的语言未必不是好事,java程序员多少也有摸道过scala和groovy吧,编程语言其实很多都是粘性语言,应该说有一门精通的,入门其他的语言应该也不难,但是还是取决于程序员个人水平,像我这种初出茅庐的菜鸡,我想花更多时间在巩固自己的java基础上,再来学习其他语言,前期的学习过于杂实在是不太好吧。
3、gradle自己了解过一点点,但是没有在工作中用过,工作中maven其实已经提供了相当多的便利了,当然,我不是特别了解gradle在安卓程序员心中的地位,gradle的话需要了解一些groovy相关的内容,而且就之前的gradle了解来看...我觉得确实是更灵活,可以通过自定义groovy脚本做更多个性化定义,所以估计未来的趋势应该是gradle,当然目前还是maven。
4、关于docker,其实在工作环境下让我认识到这个可能更趋向于是运维的技能。当然,不爱学习的程序员不是好程序员,了解一下当前大热的技术对自己也有不少好处,其实我对于docker的理解一直很狭隘,也可能是工作年限有限,视野不够开阔,但是也用过一点点,虽然嘴巴上说着容器,但是一直站在虚拟机的角度去看它,然后说到docker其实很多人都要引申可持续集成云云,其实这点事见仁见智的,不是每个项目都适合这些,因为项目规模不大的情况下简直就是杀鸡用宰牛刀,没有必要,有些事情shell脚本就能做了。毕竟我自己用docker经常就是用来安装中间件。。。比如redis和rabbitmq等,直接拉下镜像映射端口就能直接使用了,嗯...比自己去上网一个个下载方便多了。
5、上班时间马了这么多字,能不能给本书,我很想了解一下springboot2.0的新特性呀!!!

2

aoteman675 复制链接去分享

1、java 程序员到了必须学习 Spring Boot 的时候了吗?
了解是必须的,Spring Boot是个快速应用构建框架,作为java程序员,在项目构建过程中使用Spring Boot能快速缩短开发周期。如果过多的自己脱离框架开发,代码效率和安全低,也不能保证代码耦合性与Spring Boot相比。Spring一直是松耦合框架,扩展性更强。
2、我的Java语言用得很溜,还需要学习什么 Kotlin 吗?
安卓的开发语言主推Kotlin,在android studio3.0之后kotlin就是安卓APP的官方开发语言了,虽然kotlin还不能撼动java的其他应用领域,但是会逐步替换,逐步替换旧java系统,换成效率更高的kotlin系统。如果现在学习kotlin,到kotlin行业风口缺口打开时候,就会有多年的kotlin开发经验了,比其他人多几年开发经验。
3、Maven 已经这么强大了,Gradle 真的有那么好用吗?
Gradle 真的很好用,配置没有Maven麻烦。Gradle 有以下优点
(1)基于Gradle的构建支持;
(2)支持ProGuard协议防止软件反编译和应用软件重签名功能;
(3)系统自带布局预览功能,UI控件任意拖放都不会出错,不同屏幕配置上可以自动预览界面布局效果;
(4)Android特定重构和快速修复;
(5)在Gradle代码程序构建编译时使用AAR依赖十分方便;
(6)智能重构、智能预测报错以及智能代码补填。
4、在Docker容器中运行Spring Boot应用真的有那么方便吗?
方便啊,只需将spring boot应用打成镜像即可。

2

程序员诗人 复制链接去分享

Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。

在 Java 开发领域的诸多著名框架:Spring 框架及其衍生框架、做缓存Redis、消息队列框架RabbitMQ、Greenplum数据库等等,这些都是 Pivotal 团队的产品。还有Tomcat、Apache Http Server、Groovy里的一些顶级开发者,DevOps理论的提出者都在Pivotal。

Spring 团队在现有 Spring 框架的基础上,开发了一个新框架:Spring Boot,用来简化配置和部署 Spring 应用程序的过程,干掉了那些繁琐的开发步骤和样板代码及其配置,使得基于 Spring 框架的 Java 企业级应用开发“极简化”。

相比于传统的 Spring/Spring MVC 框架的企业级应用开发(Spring 的各种配置太复杂了,我们之前是在用“生命”在搞这些配置),而Spring Boot 用简单的注解和 application.properties 配置文件,避免了繁琐而且容易出错的 xml配置文件,极大的简化了基于 Spring 框架的企业级应用开发的配置。

而 Kotlin 是由 JetBrains 团队开发的多平台、静态类型、强工程实用性的编程语言。

Kotlin 100% 兼容Java,比Java更强大、更安全、更简洁、更优雅,比 Scala 更简单、更实用。

Kotlin 是 Google 公司的 Android 官方支持的开发语言。

Spring 官方也正式支持Kotlin语言,Spring Boot 2.0 版本中为 Kotlin 提供了一流的支持。其实,在 Spring Boot 2.0 和 Spring 5.0 框架源代码中,我们已经可以看到 Kotlin 代码。

至于Java 开发领域的项目构建工具,曾经的 Ant、Maven 无疑是“行业标准”。但是,作为后起之秀的 Gradle 的发展则如日中天。Gradle抛弃了Maven的基于 xml 的繁琐配置(众所周知XML的阅读体验比较差),Gradle 取而代之,采用了领域特定语言 Groovy DSL 的配置,大大简化了构建代码的行数。Gradle 极其简洁,基于Groovy的紧凑脚本让人爱不释手;Gradle 强大灵活,各种在Maven中难以下手的事情在 Gradle 中就是小菜一碟。相比于一门 Groovy 编程语言的配置跟 xml 语法的配置,孰优孰劣,显而易见。
本书可以说是我对使用 Spring Boot + Kotlin 进行服务端开发的实战和思考过程的粗浅总结。通过本书的写作,加深了我对 Spring Boot框架和 Kotlin 编程语言的理解,我深刻体会到了学无止境的含义。写书的过程也是我系统学习与思的过程,如果本书能够对你有所帮助,将不胜欣慰。

2

北方的郎 复制链接去分享

希望能得到这本书,好好学学。

Java 程序员到了必须学习 Spring Boot 的时候了吗?
其他java程序员怎么样不知道,我自己肯定是到了必须学习 Spring Boot 的时候了。

我的Java语言用得很溜,还需要学习什么 Kotlin 吗?
这个感觉要看自己的职业规划、时间、精力等综合考虑了。
我感觉如果未来有相关的项目需求,肯定要好好地学一下,否则玩玩也是不错的。

Maven 已经这么强大了,Gradle 真的有那么好用吗?
这个准备实验一下看看。

在Docker容器中运行Spring Boot应用真的有那么方便吗?
Docker用起来感觉还是很方便得。

2

似水的流年 复制链接去分享

1.Java 程序员到了必须学习 Spring Boot 的时候了吗?
是的,在学校只是用ssh或者ssm写系统,经常会有jar包版本冲突,在工作后就开始用springboot,完美的解决了大部分版本冲突,提高效率,而且可以结合springcloud使用,非常方便,可以构建分布式系统
2.我的Java语言用得很溜,还需要学习什么 Kotlin 吗?
目前还没用过kotlin,不过kotlin已经成为安卓官方支持的开发语言,可以编译成java字节码或者js,方便在没有jvm的虚拟机的机器上运行,如果需要还是可以使用的。
3.Maven 已经这么强大了,Gradle 真的有那么好用吗?
以前用maven,工作后使用gradle,感觉gradle配置管理更加方便,构建项目也简单,比如将项目构建成docker,只需要配置一下点buildDocker即可完成,十分方便。
4.在Docker容器中运行Spring Boot应用真的有那么方便吗? ......
个人觉得很方便,对于springboot的小项目,那没什么感觉,自己配置环境也花不了多少时间。但是开发springcloud项目时候,用docker就非常方便了,减少部署时间,将模块构建成docker文件,上传到仓库,服务器拉去镜像即可部署完成,减少部署时间,而且一旦有问题可以直接回滚,减少运维花费的时间,目前基本上我都是用docker部署。

2

happy_cloudlife 复制链接去分享

spring boot的盛行还是有原因的,比如说约定大于配置的理念,整合一切的野心。但是,使用方面来讲还是要看具体的需求和场景,最终还是离不开底层协议和规范的。

2

饭娱咖啡 复制链接去分享

现在公司正在转型做微服务,几个同事分别研究跟微服务有关的插件和框架。我之前在研究 Mybatis 和 Swagger,现在在研究 Restful API 和 MongoDB 。希望有机会可以向您请教。

2

西风二马 复制链接去分享

熟悉Spring Boot/Cloud的人都知道,Spring Boot依赖于Spring,而Spring Cloud又依赖于Spring Boot,因此Spring Boot2.0的发布正式整合了Spring5.0的很多特性,同样后面Spring Cloud最新版本的发布也需要整合最新的Spring Boot2.0内容。自己一只在使用中学习,学习中使用,应该是2.0比1.x多了很多东西,也做了很多改变,自己的脑海里对2.0和1.0的东西混淆在一起,就像对java8和java7的东西混合在一起使用一样,虽然这也也没太大问题,但总感觉不舒服,无论是脑海里的看法,还是工程实践。这本书也是刚买不久,粗粗的看了一下,感觉东西比较全,点都有覆盖,自己工作中涉及到的,以及可能涉及到的点都有,不知道详细程度如何,实际开发中会存在很多大大小小的或配置,或使用方法的坑,比如第一个坑:Spring Boot 2.0.0 需要JDK1.8 以上和Spring Framework 5.0.2.Release 以上版本,构建支持Maven3.2+ 和Gradle4,现在一般来说公司都要求jdk1.8了吧,但是maven很多情况是2x系列,gradle是3x系列,这点要注意。我在详读之前,心里其实希望看到关于springboot的一些最佳实践推荐,毕竟很多问题有多个方法可以解决,但有最佳实践最好。这本书涉及docker化,但是内容不多,我也可以理解吧,毕竟这是一本springboot的书,而且就使用docker而言,这些内容足够了,当然运维人员看这个是远远不够的,比如集群,比如k8s等,做为应用开发测试人员,是足够了。先好好研读,再来和大家交流学习。

西风二马 回复

求作者再给一本,给周围朋友学习使用

评论
2

弦断星辰 复制链接去分享

当然需要,我不认为说目前所在公司不需要用到该技术就不用学,做技术的首先应该做到的,就是不断学习,不断努力,因为技术在不断发展,一个好的开发人员,不应该局限自己的技术范围。

弦断星辰 回复

当然我更想要这本书。

评论
5
3782170
浏览
3
收藏
邀请他人互动
关注
8
粉丝
24
话题
1

简介:

一个会写诗的程序员

著作:

2017年 9月 Kotlin极简教程
是阿里云安全专家基于阿里云多年安全最佳实践经验为云上用户提供的全方位安全技术和咨询服务,为云上用户建立和持续优化...

大数据开发套件(Data IDE),提供可视化开发界面、离线任务调度运维、快速数据集成、多人协同工作等功能,为您...

阿里云移动APP解决方案,助力开发者轻松应对移动app中随时可能出现的用户数量的爆发式增长、复杂的移动安全挑战等...

为您提供简单高效、处理能力可弹性伸缩的计算服务,帮助您快速构建更稳定、安全的应用,提升运维效率,降低 IT 成本...