mxcsdn 2017-10-20
大家都喜欢 Spring Framework,对吧?
我们已习惯 Spring 提供的现成特性,比如依赖注入、事务管理、消息支持、集成支持、面向方面编程支持等等。指定一个必要功能,您会发现已有一个围绕它构建的 Spring 库来满足您的需求。当然,Spring 生态系统中的这些包或模块提供了框架级支持,极大地推动了实际应用程序开发流程的发展。
作为 Java™ 开发人员我们知道,在所有这些优点背后,往往会有一个难倒最老练开发人员的框架。作为一个框架,它有时会令人不知所措,甚至就算已经了解了如何放入特定的 Spring 模块,一些开发人员仍会感慨“我本来可以自己编写这段代码,而不是配置它”。
作为开发人员,我看到在一些以往的 Spring 项目中,没有使用像 Maven 或 Gradle 这样的工具来管理依赖项。所以这就引出了另一组“待办事项”。似乎仅有 XML 和 Bean 配置还不够,我们现在还应该处理各种库包的依赖项冲突和版本不匹配。
Spring Boot 是大救星
为了开发企业 Java 应用程序,我们大部分人需要在某个时刻使用 Spring。但通常我们都知道,它减少了大量配置和变更管理的框架开销。不过不用担心,“Spring Boot”可以拯救您。
如果查看 Spring Boot 的项目页,就会在其中看到类似这样的描述:
Spring Boot 使您能轻松地创建独立的、生产级的、基于 Spring 且能直接运行的应用程序。
那么这是什么意思?
“轻松”:这里所指的“轻松”来源于提前为您配置许多“starter-pom”的想法。基本上讲,这意味着:“告诉 Boot 您的愿望,它就会为您配置依赖项”。在下图中,给出了我想构建的一个新的 Spring 项目的 STS 屏幕截图。
在这个示例中,我仅选择了两个依赖项
Web
Mongo DB
Web 的定义是“使用 tomcat 和 MVC 支持的一站式应用程序开发”。
Mongo DB 的定义是适当配置 Mongodb 依赖项,就这么简单。
现在让我们看看做出上述选择后生成的 pom。
生成了一个预先配置的仅有 2 个依赖条目的 pom.xml。一个依赖项名为“spring-boot-starter-web”,另一个名为“spring-boot-starter-data-mongodb”。
让我们看看下面的 pom 屏幕截图。
现在让我们来看看,生成的实际的依赖项分层结构结果。
在这里我们可以看到,我的应用程序中已配置了依赖项需求。这是“starter pom”的一个便利特性,它使您能够开箱即用地配置应用程序依赖项。
“独立”:大多数传统 Web 应用程序都是为了在应用服务器内运行而开发的。
任何“Spring Boot”应用程序都有一个不错的特性,那就是您可以在传统 J2EE 服务器内运行应用程序,或者如果可以选择的话,您还可以采用独立存档形式运行它。
java -jar ......<your archive file>
在最终用户与应用程序的交互方式上没有区别。
“直接运行”:任何 Spring Boot 应用程序都能像从 main 方法运行的 Java 应用程序那样运行。
大部分依赖项都会为您自动配置。您可以使用此链接查看 @SpringBootApplication 的 Javadoc。
特定于项目的配置参数去哪了?
它们位于类路径中的一个“application*.properties”文件或“application*.yml”文件中。您可以在这里提供特定于环境的项目设置,比如 jdbc url、smtp 主机名等。有关这些参数的实际值,可以参阅这里提供的官方文档。
“配置文件”:您只需在 application*.properties 文件或 application*.yml 中编写配置设置一次,并在各种环境中采用相同的构建版本,比如开发、测试和生产环境。
但是如何更改配置参数,比如数据库连接 url 或 smtp 主机名?在这里,配置文件的概念就派上了用场。假设我有一个“dev”环境和一个“prod”环境。
那么,我可以使用以下配置文件来处理环境的特定设置。
application.yml(在运行应用程序期间没有显式指定任何设置时的默认配置文件)
application-dev.yml(此文件将拥有我的“dev”配置文件的配置)
application-prodI.yml(此文件将拥有我的“prod”配置文件的配置)
在运行应用程序期间,我可以指定想要运行哪个配置文件,在启动应用程序时就会挑选该配置文件。
在我看来,Sping Boot 是 Spring 社区做出的最大贡献之一,它使 Spring 应用程序的设置和配置变得非常容易。与它提供的大量好处相比,学习曲线更小。如果您正在开发新的 Spring 应用程序,你值得一试,并爱上她……