1,依赖太多了, 且存在版本问题
2,配置太多了且每次都一样,大部分工程,配置每次都是一样的,从一个地方拷贝到另外一个地方,且Spring发展10多年,各种配置版本太多,对于很多程序员来说, 分不清哪个是有效, 哪个无效
3,部署太麻烦,需要tomcat部署, 项目结构也需要照着Java EE的目录结构来写
1,创建独立的Spring应用程序
2,嵌入的Tomcat,无需部署WAR文件
3,简化Maven配置
4,自动配置Spring
5,提供生产就绪型功能,如指标,健康检查和外部配置
6,绝对没有代码生成和对XML没有要求配置
1,自动配置
一项简化配置的功能,比如在classpath中发现有spring security的jar包,则自动创建相关的bean等
2,starters(简化依赖)
这个比较关键,方便spring去集成各类组件,比如redis、mongodb等等。
静态资源路径:是指系统可以直接访问的路径,且路径下的所有文件均可被用户直接读取。
Spring Boot默认提供静态资源目录位置需置于classpath下,目录名需符合如下规则:
/static
/public
/resources
/META-INF/resources
也可以通过WebMvcConfigurerAdapter在addResourceHandlers方法中配置静态资源访问路径。
Actuator是spring boot的一个附加功能,可在生产环境时监视和管理应用程序。可以使用HTTP的各种请求来监管,审计,收集应用的运行情况,特别对于微服务管理十分有意义。
缺点:没有可视化界面(Spring cloud 还会用到这功能,就可以看到界面了)
@Configuration:配置类
@EnableConfigurationProperties:这是一个开启使用配置参数的注解,value值就是、配置实体参数映射的ClassType,将配置实体作为配置来源。
@ConditionalOnBean:当SpringIoc容器内存在指定Bean的条件
@ConditionalOnClass:当SpringIoc容器内存在指定Class的条件
@ConditionalOnExpression:基于SpEL表达式作为判断条件
@ConditionalOnJava:基于JVM版本作为判断条件
@ConditionalOnMissingBean:当SpringIoc容器内不存在指定Bean的条件
@ConditionalOnMissingClass:当SpringIoc容器内不存在指定Class的条件
@ConditionalOnNotWebApplication:当前项目不是Web项目的条件
@ConditionalOnProperty:指定的属性是否有指定的值
@ConditionalOnResource:类路径是否有指定的值
@ConditionalOnSingleCandidate:当指定Bean在SpringIoc容器内只有一个,或者虽然有多个但是指定首选的Bean
@ConditionalOnWebApplication:当前项目是Web项目的条件
Spring Boot CLI是一个命令行工具,如果想使用Spring进行快速开发可以使用它。它允许你运行Groovy脚本,可以使用熟悉的类Java语法,并且没有那么多的模板代码。可以通过Spring Boot CLI启动新项目,或为它编写命令。
1,扫描优化
在默认情况下,会使用@SpringBootApplication注解来自动获取应用的配置信息,但这样也会带来一些副作用。使用这个注解后,会触发自动配置和组件扫描,这跟使用@Configuration、@EnableAutoConfiguration和@ComponentScan三个注解的作用是一样的。这样做给开发带来方便的同时,会有以下的一些影响:
1,会导致项目启动时间变长(原因:加载了我们不需要使用的组件,浪费了cpu资源和内存资源)。当启动一个大的应用程序,或将做大量的集成测试启动应用程序时,影响会特别明显。
2,会加载一些不需要的多余的实例。
3,会增加CPU消耗和内存的占用。
改进:可以自定义扫描的初始化类,如果有不使用的类,可以不进行扫描,并且指定类可以不用去扫描多余的路径。
2,JVM参数调优
1,初始化ApplicationContextInitializer和SpringApplicationRunListener的实现类。
2,通过ServletWebServerFactoryAutoConfiguration类中的TomcatServletWebServerFactoryCustomizer类实现了WebServerFactoryCustomizer类,去初始化tomcat的一些启动参数,并且属性赋值即tomcat的启动操作在getWebServer方法中完成。
3,getWebServer方法是一个模板方法,最后在各种初始化参数完成之后,会在spring的refresh方法中的refresh方法调用。
在spring程序main方法中添加@SpringBootApplication或者@EnableAutoConfiguration,会自动去maven中读取每个starter中的spring.factories文件,该文件里配置了所有需要被创建spring容器中的bean。
Spring Boot的核心配置文件是 application 和 bootstrap 配置文件,yml格式不支持@PropertySource 注解导入配置。
application配置文件:
主要用于 Spring Boot 项目的自动化配置。
bootstrap配置文件:
1,使用SpringCloudConfig配置中心时,这时需要在bootstrap配置文件中添加连接到配置中心的配置属性来加载外部配置中心的配置信息;
2,一些固定的不能被覆盖的属性;
3,一些加密/解密的场景;
Starters可以理解为启动器,它包含了一系列可以集成到应用里面的依赖包,可以一站式集成Spring及其他技术,而不需要到处找示例代码和依赖包。如想使用Spring JPA访问数据库,只要加入spring-boot-starter-data-jpa启动器依赖就能使用了。
Spring Boot可以通过@PropertySource,@Value,@Environment, @ConfigurationProperties来绑定变量。
1,一个完整的Spring Boot Starter要包含两个组件:
1,autoconfigure模块:
包含自动配置的代码
2,starter模块:
提供对autoconfigure模块的依赖,以及一些其它的依赖
2,在自动配置模块中,自定义Service类和配置类XXAutoConfiguration,加上注解
@Configuration
@ConditionalOnWebApplication //web应该生效
@EnableConfigurationProperties(HelloProperties.class(自定义的属性类))
3,在resources下创建文件夹META-INF并在META-INF下创建文件spring.factories,添加:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.gf.service.HelloServiceAutoConfiguration
4,在starter模块引入配置模块的依赖
5,即可使用