简介
spring boot:基于spring技术栈的再封装,简化spring应用开发,去繁从简。
优点:
使用嵌入式的servlet容器,项目无需打成war包,可直接打成jar包运行。
有众多的启动器starter,自动依赖导入和版本自动控制。
大量的自动配置,简化开发,也可自行修改。
缺点: 入门容易精通难。
微服务:一种架构风格,服务微小化,一个功能模块做成一个服务,整个大的服务由这些小的服务共同组建成,微服务之间通过http互通。
微服务的每一个功能应用都是一个可独立替换和升级的软件单元。
创建spring boot项目
1. 创建maven项目,pom.xml中导入springboot启动器父项目spring-boot-starter-parent、启动器依赖spring-boot-starter-xx、打jar包插件spring-boot-maven-plugin;
2. 编写springboot主程序类,添加注解@SpringBootApplication,SpringApplication.run(主程序类名,args),编写其他业务;
3. 运行主程序(访问时无需加项目名。也可使用maven的lifecycle中的package将项目打成jar包,然后在jar包所在路径直接运行java -jar xxx.jar)
也可以按照开发平台指引快速创建。
打成的jar包之所以能运行,因为整个jar包中已经包含了tomcat的相关jar包。
配置文件
springboot的配置文件:application.properties,application.ymal或application.yml 都为springboot的全局配置文件,名称固定为application。
ymal/yml 格式的配置文件的使用规则:关键点在对空格的使用,以空格的缩进来控制层级关系。
基本语法:key:空格value,具体使用方法如下
K: "V" : 值中含有的转义字符将会被转义;
K: 'V' : 值中含有的转义字符将不会被转义,如 \n 还是表示 \n;
多环境配置文件的使用:
配置文件是application.properties类型时:application-dev.properties,application-prod.properties代表不同环境的配置文件,默认使用application.properties,可以在application.properties中指定要使用的配置文件:
spring.profiles.active=dev
配置文件是application.yml时,可以使用yml多文档的方式表示不同的配置文件,同样使用 spring.profiles.active=dev 指明使用的配置文档。
配置文件读取
配置文件中的key要与bean中的属性名称相同,且要有set方法
需引入配置文件处理器依赖:spring-boot-configuration-processor
1. 读取全局配置文件
使用配置属性注解:@ConfigurationProperties(prefix=“xxx”)
/**
* @ConfigurationProperties 将配置文件中的对应配置加载到bean对应的属性上,
* prefix = "person":指定配置文件中具体哪个配置
* @Component: 将bean加载到容器中,才能使用容器提供的@ConfigurationProperties功能
* @PropertySource:指定使用的配置文件源
*/
@Component
@ConfigurationProperties(prefix = "person")
//@PropertySource(value = {"classpath:personConfig.properties"})
public class Person {
// @Value("${person.last-name}")
private String lastName = "lisi";
// @Value("#{2*6}")
private int age;
// @Value("${person.birth}")
private Date birth;
// @Value("true")
private Boolean male;
private String url="http:baid";
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
private Map<String,Object> map;
private List<String> list;
private Dog dog;
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Date getBirth() {
return birth;
}
public void setBirth(Date birth) {
this.birth = birth;
}
public Boolean getMale() {
return male;
}
public void setMale(Boolean male) {
this.male = male;
}
public Map<String, Object> getMap() {
return map;
}
public void setMap(Map<String, Object> map) {
this.map = map;
}
public List<String> getList() {
return list;
}
public void setList(List<String> list) {
this.list = list;
}
public Dog getDog() {
return dog;
}
@Override
public String toString() {
return "Person{" +
"lastName='" + lastName + '\'' +
", age=" + age +
", birth=" + birth +
", male=" + male +
", url='" + url + '\'' +
", map=" + map +
", list=" + list +
", dog=" + dog +
'}';
}
public void setDog(Dog dog) {
this.dog = dog;
}
}
2. 读取指定配置文件
@PropertySource(value = {"classpath:personConfig.properties"}),value值可为多个,使用指定配置文件中的值进行配置。
相比读取全局配置文件,读取指定配置文件,只需要在读取全局配置文件方式的基础上添加指定的配置文件源就可以了,也就是加在bean上加上注解:@PropertySource(value = {"classpath:personConfig.properties"})。
@ConfigurationProperties 与 spring注解 @Value 对比
@Configurationproperties | @Value | |
作用 | 用配置文件批量赋值 | 用配置文件一个个赋值 |
SpEl语法 | 不支持 | 支持 |
数据类型支持 | 复杂+简单 | 简单 |
对@Validated数据校验 | 支持 | 不支持 |
在(全局)配置文件中使用占位符
1. 使用随机数 ${random.value},${random.xxx}
2. 引用前面配置过的属性 ${person.age},
${person.age:18} :找不到当前属性时的默认值
加载Spring配置文件内容到容器
1. 加载Spring配置文件的方式
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="dog" class="com.muchen.Dog"></bean>
</beans>
@ImportResource(locations = {"classpath:spring.xml"}) :启动时倒入Spring配置文件。
@ImportResource(locations = {"classpath:spring.xml"})
@SpringBootApplication
public class SpringBoot01QuickApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBoot01QuickApplication.class, args);
}
}
Springboot 配置类的作用相当于配置文件的作用,所以可以用配置类代替配置文件,即下面的第二种加载Spring配置的方式
2. 使用@Configuration+@Bean,注入到容器中的bean的id就是方法名。
@Configuration
public class MyConfig {
/**
* 方法名就是bean的id
* @return
*/
@Bean
Dog dog(){
return new Dog();
}
}
SpringBoot推荐给容器加组件的方式:使用全注解(不写配置文件)。
全局配置文件的加载位置和优先级
项目路径下:/config/application.properties
项目路径下:/application.properties
类路径下:/config/application.properties
类路径下:/application.properties
以上位置配置文件加载顺序从高到低,所有的配置文件都会被加载,高优先级内容覆盖低优先级内容。