(目的:简化,敏捷开发)
copy:
当所有的人认为 Spring 不在前进的时候,Spring 推出了微架构实现的两个重要开发框架:SpringBoot、SpringCloud。
如果要想在 Spring 之中整合 RabbitMQ、Kafka、ActiveMQ、MySQL、 Druid、Redis、Shiro,需要编写一堆堆的*.xml 配置文件; 所以在这样的一个大的历史背景下,很多人开始寻求更加简便的开发,而遗憾的是这种简便的开发没有被 JDK 所支持、没有 被 JavaEE 所支持,因为这些只是平台,平台能够提供的只是最原始的技术支持。这一时刻终于由于 Spring 框架的升级而得到了新 生,SpringBoot 的出现,改变了所有 Java 开发的困境,SpringBoot 的最终奉行的宗旨:废除掉所有复杂的开发,废除掉所有的配置文件,让开发变得更简单纯粹,核心:“零配置”。
棒棒哒!!!
1.快速创建项目。(简化配置)
2.容器内嵌,独立运行。
3.提供约定的starter POM来简化Maven配置。
4.基本可以完全不使用xml配置文件,采用注解配置。
5.自动配置。(事务/spring/springmvc)
6:Actuator。(Actuator则要提供在运行时检视应用程序内部情况的能力。安装了Actuator就能窥探应用程序的内部情况了)
名称 | 描述 |
---|---|
spring-boot-starter | 核心依赖,包括auto-configuration , logging和YAML。 |
spring-boot-starter-activemq | 支持Apache ActiveMQ启动JMS消息。 |
spring-boot-starter-amqp | 支持Spring AMQP与Rabbit MQ组件。 |
spring-boot-starter-aop | 支持Spring AOP、AspectJ组件。 |
spring-boot-starter-artemis | 支持Apache Artemis嵌入式消息服务。 |
spring-boot-starter-batch | 支持Spring Batch,一款面向Spring的批处理框架。 |
spring-boot-starter-cache | 支持spring的缓存技术。 |
spring-boot-starter-cloud-connectors | 支持SpringCloud连接器。 |
spring-boot-starter-data-jpa | 支持Hibernate的Spring JPA。 |
spring-boot-starter-data-mongodb | 支持mongodb。 |
spring-boot-starter-data-redis | 支持redis缓存。 |
spring-boot-starter-data-solr | 支持solr,一款比Lucene更为丰富的查询语言,同时实现了可配置、可扩展,并对索引、搜索性能进行了优化的框架。 |
spring-boot-starter-jdbc | 支持jdbc连接。 |
spring-boot-starter-jersey | 使用JAX-RS和Jersey构建RESTful web应用程序的入门框架。 |
spring-boot-starter-json | 支持json数据的读写操作。 |
名称 | 描述 |
---|---|
spring-boot-starter-jetty | 使用Jetty作为嵌入式servlet容器。 |
spring-boot-starter-reactor-nett | 使用reactor netty作为嵌入式反应性HTTP服务器。 |
spring-boot-starter-tomcat | 使用tomcat作为嵌入式servlet容器。 |
spring-boot-starter-undertow | 使用undertow作为嵌入式servlet容器。 |
在实际开发过程中我们可以到dependencies依赖里面去拷贝出,需要的场景启动器,然后去掉版本好即可;
如果dependencies中的一些引用不想使用默认的版本,可以直接加上version信息,把默认的覆盖掉;
知识延伸:
compile
默认就是compile,什么都不配置也就是意味着compile。compile表示被依赖项目需要参与当前项目的编译,当然后续的测试,运行周期也参与其中,是一个比较强的依赖。打包的时候通常需要包含进去。
test
scope为test表示依赖项目仅仅参与测试相关的工作,包括测试代码的编译,执行。比较典型的如junit。
runntime
runntime表示被依赖项目无需参与项目的编译,不过后期的测试和运行周期需要其参与。与compile相比,跳过编译而已,说实话在终端的项目(非开源,企业内部系统)中,和compile区别不是很大。比较常见的如JSR×××的实现,对应的API jar是compile的,具体实现是runtime的,compile只需要知道接口就足够了。oracle jdbc驱动架包就是一个很好的例子,一般scope为runntime。另外runntime的依赖通常和optional搭配使用,optional为true。我可以用A实现,也可以用B实现。
provided
provided意味着打包的时候可以不用包进去,别的设施(Web Container)会提供。事实上该依赖理论上可以参与编译,测试,运行等周期。相当于compile,但是在打包阶段做了exclude的动作。
system
从参与度来说,也provided相同,不过被依赖项不会从maven仓库抓,而是从本地文件系统拿,一定需要配合systemPath属性使用。
application.properties 和 application.yml 区别?
(1)结构
yml文件,树状结构。
注意点:
1,原有的key,例如spring.jpa.properties.hibernate.dialect,按“.”分割,都变成树状的配置
2,key后面的冒号,后面一定要跟一个空格
3,把原有的application.properties删掉。然后一定要执行一下 maven -X clean install
对比:看项目?
(2)优先级
src/main/resources/config下application.properties覆盖src/main/resources下application.properties中相同的属性
application.yml 先加载,application.properties后加载(后者覆盖前者,因此后者优先级高)
(3)我们在使用中经常会根据不同的环境根据spring.profiles.active
属性来定义不同的配置文件:
(1)new SpringApplication:
setInitializers:设置的时候会先new,也就是说这方法每次都是整体更换,不会追加。这个方法的参数都是各个模块中配置在META-INF/spring.factories中的key为org.springframework.context.ApplicationContextInitializer的值,这些类都是接口ApplicationContextInitializer
setListeners:同上
mainApplicationClass:在deduceMainApplicationClass方法中,通过获取当前调用栈,找到入口方法main所在的类,并将其复制给SpringApplication对象的成员变量mainApplicationClass。在我们的例子中mainApplicationClass即项目中Application类。
(2)run():
StopWatch:秒表,非线程安全
configureHeadlessProperty():System.setProperty("java.awt.headless","true")即使没有检测到显示器,也允许其启动
listeners.starting():
prepareEnvironment: 先是读取了应用的启动参数和profile配置,configurePropertySources来配置properties,然后调用 configureProfiles来配置profiles然后用listeners.environmentPrepared(environment)传给监听器
configureIgnoreBeanInfo:#跳过搜索BeanInfo类spring.beaninfo.ignore
createApplicationContext:通过扫描所有注解类来加载bean,最后通过BeanUtils实例化上下文对象
prepareContext:将listeners、environment、applicationArguments、banner等重要组件与上下文对象关联
refreshContext(context):是实现spring-boot-starter-*(mybatis、redis等)自动化配置的关键,包括spring.factories的加载,bean的实例化等核心工作,注册可以解析的自动装配
@SpringBootApplication:
@RestController:
用于标注控制层组件(如struts中的action),包含@Controller和@ResponseBody。
@ComponentScan:
组件扫描。个人理解相当于
@Configuration:
指出该类是 Bean 配置的信息源,相当于XML中的
@Bean:
相当于XML中的
@EnableAutoConfiguration:
让 Spring Boot 根据应用所声明的依赖来对 Spring 框架进行自动配置,一般加在主类上