Spring Boot介绍
一.什么是Spring Boot?
Spring Boot是一套用于构建微服务的基础框架。其宗旨并非是要重写Spring或者是替代spring,而是希望通过设计大量的自动化配置等方式来简化Spring原有样板化的配置,使得开发者可以快速构建应用。
二. Spring Boot的优势
(1)通过设计大量的自动化配置等方式来简化Spring原有样板化的配置,使得开发者可以快速构建应用
(2)Spring Boot通过一系列Starter POMs定义,让我们整合各项功能及框架时,不需要在Maven的pom.xml中维护那些错综复杂的依赖关系,而是通过类似模块化的Starter模块定义来引用,使得依赖管理工作变得更加简单。
(3)Spring Boot可以很好的融入Docker,其自身也支持嵌入式的Tomcat、Jetty等容器,通过Spring Boot构建应用不需要再安装Tomcat,将应用打成war包,再部署Tomcat这样复杂的构建与部署动作,只需要将Spring Boot应用打成jar包,并通过java –jar命令直接运行就能启动一个标准化的web应用,这使得Spring Boot应用变得非常轻便。
(4)整个Spring Boot的生态系统使用了Groovy,可以通过使用Gradle和Groovy来开发Spring Boot应用。
三. Starter POMs
Starter POMs是一系列轻便的依赖包,是一套一站式的Spring相关技术解决方案,开发者在使用和整合模块时,不必再去搜寻样例代码中的依赖配置来复制使用,只需要引入对应的模块包即可。比如,开发web应用的时候,就引入spring-boot-starter-web,希望访问数据库时就引入spring-boot-start-jdbc或者spring-boot-start-jpa。
Starter POMs采用spring-boot-start-*的命名方式,*代表一个特别的应用功能模块。例如web和test。应用Starter POMs后,各应用不需要在pom文件中做大量的依赖配置,而是通过Starter POMs定义的依赖包,使得功能模块整合变得轻巧,易于理解和使用。
四. 配置文件
4.1 默认配置文件
Springboot的默认配置文件为src\main\resources\application.properties
4.2 配置文件类型
Springboot的配置文件除了可以使用传统的properties文件之外,还支持现在被广泛推荐使用的yaml文件。
YAML的配置信息利用结题后缩进的方式,其结构更为清晰易读,同时配置内容的字符量也得到显著减少。除此之外,YAML还可以在一个单个文件中通过使用spring.profiles属性定义多个不同的环境配置。
Application.properties中
server.port=9033
YAML的内容如下:
server:
port: 9033
4.3 自定义参数
除了可以在Spring Boot的配置文件中设置各个Starter模块中预定义的配置属性,也可以在配置文件中顶一个一些我们需要的自定义属性。比如在application.properties中添加:
book.name=Spring cloud Manager
然后再应用程序中通过@Value注解来加载这些自定义参数,@Value注解加载属性时可以支持两种表达式来进行配置,如下所示:
(1) 一种是PlaceHolder方式,格式为${…},大括号内为PlaceHolder。
(2) 另一种是使用SpEL表达式(Spring Expression Language),格式为#{…},大括号内为SpEL表达式。
比如:
@Component
public class Book {
@Value(“${book.name}”)
private Stringname;
//省略setter和getter
}
4.4 参数引用
在application.properties中的各个参数之间可以直接通过使用PlaceHolder的方式来进行引用,就像下面的设置:
book.name= SpringCloud
book.author=ZhaiYongchao
book.desc=${book.author} iswriting<<${book.name}>>
4.5 使用随机数
在一些特殊情况下,我们希望有些参数每次被加载的时候不是一个固定值,比如密钥、服务端口等。
在Spring Boot的属性配置文件中,可以通过使用${random}配置来产生随机的int值、long值或者string字符串,这样我们就可以容易地通过配置随机生成属性,而不需要再程序中通过编码来实现这些逻辑。
举例如下:
application.properties
server.port=9091
server.context-path=/helloboot
error.path=error.html
boot.name=bootname
author.name=shl
author.age=31
logging.file=d:/log.log
log.level.org.springframework.web=DEBUG
spring.profiles.active=dev
#随机长整型
value.long=${random.long}
#随机整型
value.int=${random.int}
#随机字符串
value.value=${random.value}
#随机10以内的整数
value.intlt10=${random.int(10)}
#随机10到20内的整数
value.intbetween10and20=${random.int[10,20]}
MvcController.java
@RestController
@ConfigurationProperties(prefix="author")
public classMvcController {
@Value("${value.int}")
private int intValue;
@Value("${value.value}")
private String value;
@Value("${value.intlt10}")
private int intlt10;
@Value("${value.intbetween10and20}")
private int intbetween10and20;
@Value("${boot.name}")
private String name;
private int age;
@Value("${value.long}")
private long longvalue;
@Autowired
private SettingConfig config;
@RequestMapping("/aa")
String index() {
System.out.println("===========================");
System.out.println("hell world");
System.out.println(intValue);
System.out.println(value);
System.out.println(intlt10);
System.out.println(intbetween10and20);
System.out.println(name);
//System.out.println("hell world");
return "world";
//return config.getName()+"123"+","+config.getAge();
}
}
4.6 多环境适配
在整个研发流程中,会有几个不同的环境,包括开发,测试,生产等,其中每个环境的数据库地址,服务端口等配置都不相同,如果在不同环境打包时都要频繁修改配置文件的话,会非常繁琐,且容易发生错误。
对于多环境配置,各种项目构建工具的思路比较一致,通过配置多份不同环境的配置文件,再通关打包命令指定需要打包的内容之后进行区分打包。
在Spring Boot中,多环境配置的文件名需要满足application-{profile}.properties的格式,其中{profile}对应的是不同环境的环境标识,如下:
application-dev.properties
application-test.properties
application-prod.properties
至于哪个文件会加载,需要在application.properties文件中通过spring.profiles.active属性来设置,其值对应配置文件中的{profile}值。如spring.profiles.active=dev,那么application-dev.properties文件就会被加载。
通常情况下:
(1) 在application.properties文件中配置通用内容,并设置spring.profiles.active=dev,以开发环境为默认配置。
(2) 在application-{profile}.properties中配置各个环境的不同内容
(3) 通过命令行方式去激活不同环境的配置。
4.7 加载顺序
为了能够更合理地重写各属性的值,Spring Boot使用下面这种较为特别的属性加载顺序,数字越小的优先级越高,其中第7项到第9项都是从应用jar包之外读取配置文件,所以实现外部化配置的原理就是从此切入,为其制定外部配置文件的加载位置来取代jar包之内的配置内容。通过这样的实现,我们的工程在配置中就可以变得非常干净,只需要在本地防止开发需要的配置即可。其他环境的配置交由对应环境的负责人去维护即可。
(1) 在命令行中传入的参数
(2) SPRING_APPLICATION_JSON中的属性。SPRING_APPLICATION_JSON是以JSON格式配置在系统环境变量中的内容
(3) java:comp/env中的JNDI属性
(4) java的系统属性,可以通过System.getProperties()获得的内容。
(5) 操作系统的环境变量
(6) 通过random.*配置的随机属性
(7) 位于当前应用jar包之外,针对不同{profile}环境的配置文件内容,例如application-{profile}.properties或是YAML定义的配置文件
(8) 位于当前应用jar包之内,针对不同{profile}环境的配置文件内容,例如application-{profile}.properties或是YAML定义的配置文件
(9) 位于当前应用jar包之外的application.properties和YAML配置内容
(10) 位于当前应用jar包之内的application.properties和YAML配置内容
(11) 在@Configuration注解修改的类中,使用@PropertySource注解的属性
(12) 应用默认属性,使用SpringAppliaction.setDefaultProperties定义的内容
知识小贴士:作者尽心运营的知识星球社群【请点击:简道源码&&架构分析 加入】(可添加运营同学WX:wx454876882)持续拉新中...,定期的jdk与核心框架源码解析,主流行业解决方案与架构设计资料查阅与下载尽在其中。帮助行业新人和有志于技术的专业人士体系化的学习源码与系统架构,获取业界知名技术峰会和厂商对外公布的主流业务场景的解决方案。同时这个星球也是一个社群,大家可以在社群中结识有识之士,共同探讨,答疑解惑。希望可以通过这个星球帮助大家每日进步一点点,一年持续365天,共勉
本星球 聚焦于Java源码分析,架构解析。低代码,可扩展和高可用架构设计。帮助你更好地学编程,欢迎想进步的同学!仅精品案例的资料整理即物超所值。让我们大家一起每日进步一点点~~,你可以:
1. 阅读星球专属的编程知识和优质文章
2.JAVA知识从点和面,深度挖掘。通过点,形成面。提升自身的技术广度和深度。
3. 加入星球专属交流群,帮你找到学习伙伴、获取每日优质文章推送等
4.业界优秀案例资料学习及下载
5. 和伙伴们一起学习打卡,增加动力,共同进步
6.工作、学习和方法论。如何提升软实力,比如写文章、画架构图、技术产品的营销、社区的运营等等。
7.招聘、面试和晋升。如何提前准备面试,有什么套路?如何提升硬实力,少走弯路?
8.提供简历优化服务哟。本人常年招聘,也就面试了1000+程序员和架构师~~
9.解答你的疑问。
10.每日进步一点点(最重要的一点): 让自己与众不同,每天学习1-2小时源码和架构知识,365天后再回首,1年前的自己可能是个SB吧。用通勤的时间让自己成长,让优秀变成一种习惯。