如何使用Spring Boot
本文章将会详细介绍如何使用Spring Boot。它覆盖了构建系统,自动配置和运行/部署选项等主题。我们也覆盖了一些Spring Boot最佳实践。尽管Spring Boot没有什么特别的(只是一个你能消费的库),但仍有一些建议,如果你遵循的话将会让你的 开发进程更容易。 如果你刚接触Spring Boot,那最好先了解一下
构建系统
强烈建议你选择一个支持依赖管理,能消费发布到Maven中央仓库的artifacts的构建系统。我们推荐你选择Maven或Gradle。
选择其他构建系统来使用Spring Boot也是可能的(比如Ant),但它们不会被很好的支持。
Maven
Maven用户可以继承 spring-boot-starter-parent 项目来获取合适的默认设置。该父项目提供以下特性:
默认编译级别为Java 1.6
源码编码为UTF-8
一个依赖管理节点,允许你省略普通依赖的 标签,继承自 spring-boot-dependencies POM。
合适的资源过滤
合适的插件配置(exec插件,surefire,Git commit ID,shade)
针对 application.properties 和 application.yml 的资源过滤
最后一点:由于默认配置文件接收Spring风格的占位符( ${...} ),Maven filtering改用 @..@ 占位符(你可以使用Maven属 性 resource.delimiter 来覆盖它)。
继承starter parent
想配置你的项目继承 spring-boot-starter-parent 只需要简单地设置 parent 为:
注:你应该只需要在该依赖上指定Spring Boot版本。如果导入其他的starters,你可以放心的省略版本号。
使用没有父POM的Spring Boot
不是每个人都喜欢继承 spring-boot-starter-parent POM。你可能需要使用公司标准parent,或你可能倾向于显式声明所有
Maven配置
如果你不使用 spring-boot-starter-parent ,通过使用一个 scope=import 的依赖,你仍能获取到依赖管理的好处:
改变Java版本
使用Spring Boot Maven插件
Gradle
Gradle用户可以直接在它们的 dependencies 节点处导入”starter POMs“。跟Maven不同的是,这里没有用于导入共享配置 的"超父"(super parent)。
spring-boot-gradle-plugin插件也是可以使用的,它提供创建可执行jar和从source运行项目的任务。它也添加了一 个 ResolutionStrategy 用于让你省略常用依赖的版本号:
Ant
使用Apache Ant构建一个Spring Boot项目是完全可能的,然而,Spring Boot没有为它提供特殊的支持或插件。Ant脚本可以 使用Ivy依赖管理系统来导入starter POMs
Starter POMs
Starter POMs是可以包含到应用中的一个方便的依赖关系描述符集合。你可以获取所有Spring及相关技术的一站式服务,而 不需要翻阅示例代码,拷贝粘贴大量的依赖描述符。例如,如果你想使用Spring和JPA进行数据库访问,只需要在你的项目
中包含 spring-boot-starter-data-jpa 依赖,然后你就可以开始了。
该starters包含很多你搭建项目,快速运行所需的依赖,并提供一致的,管理的传递依赖集。
名字有什么含义:所有的starters遵循一个相似的命名模式: spring-boot-starter-* ,在这里 * 是一种特殊类型的应用程序。
该命名结构旨在帮你找到需要的starter。很多IDEs集成的Maven允许你通过名称搜索依赖。例如,使用相应的Eclipse或STS
插件,你可以简单地在POM编辑器中点击 ctrl-space ,然后输入"spring-boot-starter"可以获取一个完整列表。
下面的应用程序starters是Spring Boot在 org.springframework.boot 组下提供的:
表 13.1. Spring Boot application starters
Spring Boot生产准备的starters
Spring Boot technical starters
组织你的代码
Spring Boot不需要使用任何特殊的代码结构,然而,这里有一些有用的最佳实践。
使用"default"包
当类没有包含 package 声明时,它被认为处于 default package 下。通常不推荐使用 default package ,并应该避免使用它。因
为对于使用 @ComponentScan , @EntityScan 或 @SpringBootApplication 注解的Spring Boot应用来说,来自每个jar的类都会被读 取,这会造成一定的问题。
注:我们建议你遵循Java推荐的包命名规范,使用一个反转的域名(例如 com.example.project )。
定位main应用类
我们通常建议你将main应用类放在位于其他类上面的根包(root package)中。通常使用 @EnableAutoConfiguration 注解你的 main类,并且暗地里为某些项定义了一个基础“search package”。例如,如果你正在编写一个JPA应用,
被 @EnableAutoConfiguration 注解的类所在包将被用来搜索 @Entity 项。
使用根包允许你使用 @ComponentScan 注解而不需要定义一个 basePackage 属性。如果main类位于根包中,你也可以使 用 @SpringBootApplication 注解。
下面是一个典型的结构:
Application.java 文件将声明 main 方法,还有基本的 @Configuration 。
配置类
Spring Boot提倡基于Java的配置。尽管你可以使用一个XML源来调用 SpringApplication.run() ,我们通常建议你使 用 @Configuration 类作为主要源。一般定义 main 方法的类也是主要 @Configuration 的一个很好候选。
注:很多使用XML配置的Spring配置示例已经被发布到网络上。你应该总是尽可能的使用基于Java的配置。搜索查 看 enable* 注解就是一个好的开端。
导入其他配置类
你不需要将所有的 @Configuration 放进一个单独的类。 @Import 注解可以用来导入其他配置类。另外,你也可以使 用 @ComponentScan 注解自动收集所有的Spring组件,包括 @Configuration 类。
导入XML配置
如果你绝对需要使用基于XML的配置,我们建议你仍旧从一个 @Configuration 类开始。你可以使用附加的 @ImportResource 注 解加载XML配置文件。
自动配置
Spring Boot自动配置(auto-configuration)尝试根据你添加的jar依赖自动配置你的Spring应用。例如,如果你的classpath下
存在 HSQLDB ,并且你没有手动配置任何数据库连接beans,那么我们将自动配置一个内存型(in-memory)数据库。
你可以通过将 @EnableAutoConfiguration 或 @SpringBootApplication 注解添加到一个 @Configuration 类上来选择自动配置。
注:你只需要添加一个 @EnableAutoConfiguration 注解。我们建议你将它添加到主 @Configuration 类上
Spring Beans和依赖注入
你可以自由地使用任何标准的Spring框架技术去定义beans和它们注入的依赖。简单起见,我们经常使用 @ComponentScan 注解 。
搜索beans,并结合 @Autowired 构造器注入。
如果使用上面建议的结构组织代码(将应用类放到根包下),你可以添加 @ComponentScan 注解而不需要任何参数。你的所有 应用程序组件( @Component , @Service , @Repository , @Controller 等)将被自动注册为Spring Beans。
下面是一个 @Service Bean的示例,它使用构建器注入获取一个需要的 RiskAssessor bean。
注:注意如何使用构建器注入来允许 riskAssessor 字段被标记为 final ,这意味着 riskAssessor 后续是不能改变的。
使用@SpringBootApplication注解
很多Spring Boot开发者总是使用 @Configuration , @EnableAutoConfiguration 和 @ComponentScan 注解他们的main类。由于这些
注解被如此频繁地一块使用(特别是你遵循以上最佳实践时),Spring Boot提供一个方便的 @SpringBootApplication 选择。
该 @SpringBootApplication 注解等价于以默认属性使用 @Configuration , @EnableAutoConfiguration 和 @ComponentScan 。
运行应用程序
将应用打包成jar并使用一个内嵌HTTP服务器的一个最大好处是,你可以像其他方式那样运行你的应用程序。调试Spring Boot应用也很简单;你不需要任何特殊IDE或扩展。
注:本章节只覆盖基于jar的打包,如果选择将应用打包成war文件,你最好参考一下服务器和IDE文档。
作为一个打包后的应用运行
使用Maven插件运行
使用Gradle插件运行
热交换
由于Spring Boot应用程序只是普通的Java应用,那JVM热交换(hot-swapping)应该能出色的工作。JVM热交换在它能替换 。
的字节码上有些限制,更全面的解决方案可以使用Spring Loaded项目或JRebel。
打包用于生产的应用程序 。
可执行jars可用于生产部署。由于它们是自包含的,非常适合基于云的部署。关于其他“生产准备”的特性,比如健康监控,审 计和指标REST,或JMX端点,可以考虑添加 spring-boot-actuator 。具体参考Part V, “Spring Boot Actuator: Productionready features”。
除了Spring Boot的使用方式外还有Spring Boot特性、执行器、CLI、需要了解的可以私信我.
Spring Boot特性举个例子
开发Wed应用
Spring Boot非常适合开发web应用程序。你可以使用内嵌的Tomcat,Jetty或Undertow轻轻松松地创建一个HTTP服务器。大 多数的web应用都使用spring-boot-starter-web模块进行快速搭建和运行。
Spring Web MVC框架 Spring Web MVC框架(通常简称为"Spring MVC")是一个富"模型,视图,控制器"的web框架。 Spring MVC允许你创建特
定的@Controller或@RestController beans来处理传入的HTTP请求。 使用@RequestMapping注解可以将控制器中的方法映 射到相应的HTTP请求。
示例:
HttpMessageConverters
Spring MVC使用HttpMessageConverter接口转换HTTP请求和响应。合理的缺省值被包含的恰到好处(out of the box),例 如对象可以自动转换为JSON(使用Jackson库)或XML(如果Jackson XML扩展可用则使用它,否则使用JAXB)。字符串 默认使用UTF-8编码。
如果需要添加或自定义转换器,你可以使用Spring Boot的HttpMessageConverters类:
需要这份Spring Bootpdf文档的朋友们转发收藏+关注私信“资料”立即获取