目录
1.接下来使用Java开发一个简单的“Hello World!” web应用来完成SpringBoot的快速入门。 我们将使用STS和Maven构建该项目。
1、配置项目继承 spring-boot-starter-parent 只需要简单地设置 parent 为:
3、下面的应用程序starters是SpringBoot在org.springframework.boot组下提供的:
4、除了应用程序的starters, 下面的starters可以用于添加生产准备的特性。
前言
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。实际上,Spring Boot的一项重要工作就是让Spring配置不再成为开发路上的绊脚石。
提示:以下是本篇文章正文内容,下面案例可供参考
一、SpringBoot简介
spring boot并不是一个全新的框架,它不是spring解决方案的一个替代品,而是spring的一个封装。所以,以前可以用spring做的事情,现在用spring boot都可以做。
Spring boot就是一个非常好的微服务开发框架,可以使用它快速的搭建起一个系统。同时,你也可以使用spring Cloud(Spring Cloud是一个基于Spring Boot实现的云应用开发工具)来搭建一个分布式的网站。
1、SpringBoot优点
- 使编码变得简单
SpringBoot采用Java config的方式,对Spring进行配置,并且提供了大量的注解,极大地提高了工作效率。
- 使配置变得简单
spring boot提供许多默认配置,当然也提供自定义配置。但是所有spring boot的项目都只有一个配置文件:application.properties/application.yml。用了spring boot,再也不用担心配置出错找不到问题所在了。
功能的组合配置
部署环境配置
- 使部署变得简单
spring boot内置了三种servlet容器:tomcat,jetty,undertow
名称 | Servlet版本 | Java版本 |
Tomcat 8 | 3.1 | Java 7+ |
Tomcat 7 | 3 | Java 6+ |
Jetty 9 | 3.1 | Java 7+ |
Jetty 8 | 3 | Java 6+ |
Undertow 1.1 | 3.1 | Java 7+ |
所以,只需要一个Java的运行环境就可以运行SpringBoot的项目了。
SpringBoot的项目可以打成一个jar包,然后通过java -jar xxx.jar来运行。
(SpringBoot项目的入口是一个main方法,运行该方法即可。 )
也可以将Spring Boot应用部署到任何兼容Servlet 3.0+的容器
- 使监控变得简单
SpringBoot提供了actuator包,可以使用它来对应用进行监控。
2、微服务架构
微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。SpringBoot就是搭建微服务的一个很好的选择。
微服务一般都是运行在分布式环境中的,这可不是简单的写一个SSM框架的小程序就可以解决的,其中需要用到很多技术,比如负载均衡,反向代理,服务治理,配置管理,消息总线等,SpringCloud提供了这些技术。并且,SpringCloud生态是基于spring boot的。
二、SpringBoot快速入门
1.接下来使用Java开发一个简单的“Hello World!” web应用来完成SpringBoot的快速入门。 我们将使用STS和Maven构建该项目。
- 首先构建SpringBoot项目:
- 设置项目参数
- 项目创建后的目录结构:
此时已经生成包含勾选依赖的pom文件,勾选后需要添加依赖可以直接修改pom文件
- 直接在主类上添加响应请求的代码:
- 运行结果·:
2.代码基本解析
- 主类上使用的第一个注解是 @RestController ,对于Spring, 该类扮演了一个特殊角色。在本示例中, 我们的类是一个WEB Controller ,所以当处理进来的web 请求时, Spring会使用它来进行响应。
@RequestMapping 注解提供路由信息。 它告诉Spring任何来自"/"路径的HTTP请求都应该被映射到 home 方法。 @RestController 注解告诉Spring以字符串的形式渲染结果, 并直接返回给调用者。
@RestController和@RequestMapping注解是Spring MVC注解(它们不是Spring Boot的特定部分)
第二个类级别的注解是 @EnableAutoConfiguration 。 这个注解告诉Spring Boot根据添加的jar依赖猜测你想如何配置Spring。由于 spring-boot-starter-web 添加了Tomcat和Spring MVC, 所以auto-configuration将假定我们正在开发一个web应用并相应地对Spring进行设置。//
Starter POMs和Auto-Configuration:
设计auto-configuration的目的是更好的使用“Starter POMs”, 但这两个概念没有直接的联系。 我们可以自由地挑选starter POMs以外的jar依赖, 并且Spring Boot将仍旧尽最大努力去自动配置你的应用。
三、SpringBoot详解
1、配置项目继承 spring-boot-starter-parent 只需要简单地设置 parent 为:
- 如果不使用 spring-boot-starter-parent , 通过使用一个 scope=import 的依赖, 仍能获取到依赖管理的好处:
- spring-boot-starter-parent 选择相当保守的Java兼容策略。 如果希望使用指定的Java版本, 可以添加一个 java.version 属性:
- Spring Boot包含一个Maven插件, 它可以将项目打包成一个可执行jar。 如果想使用它, 你可以将该插件添加到 <plugins>点处:
2、Starter POMs
Starter POMs是可以包含到应用中的一个方便的依赖关系描述符集合。 可以获取所有Spring及相关技术的一站式服务, 而不需要翻阅示例代码, 拷贝粘贴大量的依赖描述符。 例如, 如果你想使用Spring和JDBC进行数据库访问, 只需要在你的项目中包含spring-boot-starter-jdbc依赖, 然后你就可以开始了。该starters包含很多你搭建项目, 快速运行所需的依赖, 并提供一致的, 管理的传递依赖集。
3、下面的应用程序starters是SpringBoot在org.springframework.boot组下提供的:
名称 | 描述 |
spring-boot-starter | 核心Spring Boot starter, 包括自动配置支持, 日志和YAML |
spring-boot-starter-actuator | 生产准备的特性, 用于帮你监控和管理应用 |
spring-boot-starter-amqp | 对"高级消息队列协议"的支持, 通过 spring-rabbit 实现 |
spring-boot-starter-aop | 对面向切面编程的支持, 包括 spring-aop 和AspectJ |
spring-boot-starter-batch | 对Spring Batch的支持, 包括HSQLDB数据库 |
spring-boot-starter-cloudconnectors | 对Spring Cloud Connectors的支持, 简化在云平台下(例如, Cloud Foundry 和Heroku) 服务的连接 |
spring-boot-starter-dataelasticsearch | 对Elasticsearch搜索和分析引擎的支持, 包括spring-data-elasticsearch |
名称 | 描述 |
spring-boot-starter-datagemfire | 对GemFire分布式数据存储的支持, 包括 spring-data-gemfire |
spring-boot-starter-data-jpa | 对"Java持久化API"的支持, 包括 spring-data-jpa , spring-orm 和Hibernate |
spring-boot-starter-datamongodb | 对MongoDB NOSQL数据库的支持, 包括 spring-data-mongodb |
spring-boot-starter-data-rest | 对通过REST暴露Spring Data仓库的支持, 通过 spring-data-rest-webmvc 实现 |
spring-boot-starter-data-solr | 对Apache Solr搜索平台的支持, 包括 spring-data-solr |
spring-boot-starter-freemarker | 对FreeMarker模板引擎的支持 |
spring-boot-starter-groovytemplates | 对Groovy模板引擎的支持 |
spring-boot-starter-hateoas | 对基于HATEOAS的RESTful服务的支持, 通过 spring-hateoas 实现 |
名称 | 描述 |
spring-boot-starter-hornetq | 对"Java消息服务API"的支持, 通过HornetQ实现 |
spring-boot-starter-integration | 对普通 spring-integration 模块的支持 |
spring-boot-starter-jdbc | 对JDBC数据库的支持 |
spring-boot-starter-jersey | 对Jersey RESTful Web服务框架的支持 |
spring-boot-starter-jtaatomikos | 对JTA分布式事务的支持, 通过Atomikos实现 |
spring-boot-starter-jta-bitronix | 对JTA分布式事务的支持, 通过Bitronix实现 |
spring-boot-starter-mail | 对 javax.mail 的支持 |
spring-boot-starter-mobile | 对 spring-mobile 的支持 |
spring-boot-starter-mustache | 对Mustache模板引擎的支持 |
spring-boot-starter-redis | 对REDIS键值数据存储的支持, 包括 spring-redis |
名称 | 描述 |
spring-boot-starter-security | 对 spring-security 的支持 |
spring-boot-starter-socialfacebook | 对 spring-social-facebook 的支持 |
spring-boot-starter-sociallinkedin | 对 spring-social-linkedin 的支持 |
spring-boot-starter-socialtwitter | 对 spring-social-twitter 的支持 |
spring-boot-starter-test | 对常用测试依赖的支持, 包括JUnit, Hamcrest和Mockito, 还有 spring-test 模块 |
spring-boot-starter-thymeleaf | 对Thymeleaf模板引擎的支持, 包括和Spring的集成 |
spring-boot-starter-velocity | 对Velocity模板引擎的支持 |
spring-boot-starter-web | 对全栈web开发的支持, 包括Tomcat和 spring-webmvc |
spring-boot-starter-websocket | 对WebSocket开发的支持 |
spring-boot-starter-ws | 对Spring Web服务的支持 |
4、除了应用程序的starters, 下面的starters可以用于添加生产准备的特性。
名称 | 描述 |
spring-boot-starter-actuator | 添加生产准备特性, 比如指标和监控 |
spring-boot-starter-remote-shell | 添加远程 ssh shell支持 |
- 如果要查看应用指标或对应用进行监控,可以加入执行器actuator的依赖:
执行器接口允许监控应用及与应用进行交互。 SpringBoot包含很多内置的接口, 也可以添加自己的,例如,health端点提供了应用的基本健康信息
- 接口暴露的方式取决于采用的技术类型。大部分应用选择HTTP监控, 接口的ID映射到一个URL。 例如,默认情况下,health端点将被映射到/health。:
ID | 描述 | 敏感(Sensitive) |
autoconfig | 显示一个auto-configuration的报告, 该报告展示所有auto-configuration候选者及它们被应用或未被应用的原因 | true |
beans | 显示一个应用中所有Spring Beans的完整列表 | true |
configprops | 显示一个所有@ConfigurationProperties的整理列表 | true |
dump | 执行一个线程转储 | true |
env | 暴露来自Spring ConfigurableEnvironment的属性 | true |
- 更多的执行器接口:
ID | 描述 | 敏感(Sensitive) |
health | 展示应用的健康信息(当使用一个未认证连接访问时显示一个简单的'status', 使用认证连接访问则显示全部信息详情) | false |
info | 显示任意的应用信息 | false |
metrics | 展示当前应用的'指标'信息 | true |
mappings | 显示一个所有@RequestMapping路径的整理列表 | true |
shutdown | 允许应用以优雅的方式关闭(默认情况下不启用) | true |
trace | 显示trace信息(默认为最新的一些HTTP请求) | true |
- 验证执行器访问
在项目中加入执行器依赖:
启动后访问执行器接口映射:
- 修改执行器访问端口,和业务系统分离:
自定义监控端口
执行器端口和接口:
- 敏感信息访问限制
在端口列表中,敏感为false的,表示可以随意访问,否则就是做了一些保护,不能随意访问,如果需要关闭敏感保护,则可以将对应的端口的sensitive属性设置为false,如endpoints.mappings.sensitive=false
敏感方法默认是需要用户拥有ACTUATOR角色,因此,也可以设置关闭安全限制:management.security.enabled=false
- 自定义系统信息
可以在配置文件中提供自定义的系统信息供执行器监控端口查看
自定义项目Info信息,通过设置配置文件属性info.*, 可以定义info端点暴露的数据。 所有在info关键字下的Environment属性都将被自动暴露。
- 显式设置的自定义属性
- SpringApplication类提供了一种从main()方法启动Spring应用的便捷方式。 在很多情况下, 只需委托给SpringApplication.run这个静态方法:
- 当应用启动时, 应该会看到类似下面的东西:
默认情况下会显示INFO级别的日志信息, 包括一些相关的启动详情, 比如启动应用的用户等。
通过在classpath下添加一个banner.txt或设置banner.location来指定相应的文件可以改变启动过程中打印的banner(即启动时正常日志前拼接出来的Spring部分)。 如果这个文件有特殊的编码, 可以使用banner.encoding设置它(默认为UTF-8) 。在banner.txt中可以使用如下的变量:
名称 | 描述 |
${application.version} | MANIFEST.MF中声明的应用版本号, 例如1.0 |
${application.formattedversion} | MANIFEST.MF中声明的被格式化后的应用版本号(被括号包裹且以v作为缀) , 用于显示, 例如(v1.0) |
${spring-boot.version} | 正在使用的Spring Boot版本号, 例如1.5.0.BUILD-SNAPSHOT |
${spring-boot.formatted-version} | 正在使用的Spring Boot被格式化后的版本号(被括号包裹且以v作为缀) , 用于显示, 例如(v1.5.0.BUILD-SNAPSHOT) |
- 自定义Banner:
在classpath中新建banner.txt
- 使用application.properties文件来配置SpringApplication
如果想获取原始的命令行参数, 或一旦SpringApplication启动后需要运行一些特定的代码, 可以实现CommandLineRunner接口。 在所有实现该接口的Spring beans上将调用run(String… args)方法