在spring的基础上,对开发做了一些简化操作,不需要进行大量的配置,进一步提高了开发效率,Spring Boot并不是替代了Spring,还是需要Spring支持的。
特点:约定大于配置
在pom文件导入相关依赖
org.springframework.boot</groupId>
spring‐boot‐starter‐parent</artifactId>
1.5.9.RELEASE</version>
</parent>
org.springframework.boot</groupId>
spring‐boot‐starter‐web</artifactId>
</dependency>
</dependencies>
spring-boot-starter:spring-boot场景启动器,帮我们导入了web模块正常运行所依赖的组件,Spring Boot将所有的功能场景都抽取出来,做成一个个的starters(启动器),只需要在项目里面引入这些starter
相关场景的所有依赖都会导入进来。要用什么功能就导入什么场景的启动器
编写一个主程序:
package com.txl;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
//@SpringBootApplication 来标注一个主程序类,说明这是一个Spring Boot应用
@SpringBootApplication
public class HelloWorldApplication {
public static void main(String[] args) {
SpringApplication.run(HelloWorldApplication.class,args);
}
}
@SpringBootApplication用来标注主程序类,说明是一个SpringBoot应用
编写Controller:
package com.txl.springboot.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
//@Controller
//@ResponseBody
@RestController
public class HelloController {
@RequestMapping("/hello")
public String hello(){
return "hello world";
}
}
@Controller和@ResponseBody可以用@RestController代替
此时可以不用配置tomcat,直接运行主程序:
可以在pom文件添加插件,将用于打包成jar包,用命令行执行
<!‐‐ 这个插件,可以将应用打包成一个可执行的jar包;‐‐>
org.springframework.boot</groupId>
spring‐boot‐maven‐plugin</artifactId>
</plugin>
</plugins>
</build>
- @SpringBootConfiguration:Spring Boot的配置类,标注在某个类上,表示这是一个Spring Boot的配置类;
- @Configuration:配置类上来标注这个注解
- @EnableAutoConfiguration:开启自动配置功能;
- @AutoConfigurationPackage:自动配置包
SpringBoot使用一个全局的配置文件,配置文件固定为application,有properties和YAML两种格式
配置文件的作用:修改SpringBoot的默认配置
YAML以数据为中心,比xm、json等l文件更适合做配置文件
YAML:
server:
port: 8081
xml:
<server>
<port>8081</port>
</server>
k:(空格)v:表示一对键值对(空格必须有);
以空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的,对大小写敏感
例如:
server:
port: 8081
path: /hello
k: v:字面直接来写;
字符串默认不用加上单引号或者双引号;
"":双引号;不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思
name: “Rick \n Morty”
输出:Rick 换行 Morty
’’:单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据,会原原本本的输出
name: ‘Rick \n Morty’:
输出:Rick \n Morty
k: v:在下一行来写对象的属性和值的关系;注意缩进
对象还是k: v的方式
friends:
lastName: Rick
age: 20
行内写法:
friends: {lastName: Rick,age: 18}
用- 值表示数组中的一个元素
pets:
‐ cat
‐ dog
‐ pig
行内写法:
pets: [cat,dog,pig]
创建javaBean:
package com.txl.springboot.bean;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
import java.util.Map;
@Component
@EnableConfigurationProperties(Person.class)
@ConfigurationProperties(prefix = "person")
public class Person {
private String lastName;
private Integer age;
private Date birth;
private boolean boss;
private Dog dog;
private Map<String,Object> map;
private List<Object> list;
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Date getBirth() {
return birth;
}
public void setBirth(Date birth) {
this.birth = birth;
}
public boolean isBoss() {
return boss;
}
public void setBoss(boolean boss) {
this.boss = boss;
}
public Dog getDog() {
return dog;
}
public void setDog(Dog dog) {
this.dog = dog;
}
public Map<String, Object> getMap() {
return map;
}
public void setMap(Map<String, Object> map) {
this.map = map;
}
public List<Object> getList() {
return list;
}
public void setList(List<Object> list) {
this.list = list;
}
@Override
public String toString() {
return "Person{" +
"lastName='" + lastName + '\'' +
", age=" + age +
", birth=" + birth +
", boss=" + boss +
", dog=" + dog +
", map=" + map +
", list=" + list +
'}';
}
}
导入入配置文件处理器依赖:
<!‐‐导入配置文件处理器,配置文件进行绑定就会有提示‐‐>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring‐boot‐configuration‐processor</artifactId>
<optional>true</optional>
</dependency>
yml配置文件:
person:
lastName: lisi
age: 21
birth: 1999/6/5
boss: false
map: {k1: v1,k2: v2}
list:
- rick
- morty
dog:
name: 狗剩
age: 8
@ConfigurationProperties | @Value | |
---|---|---|
功能 | 批量注入配置文件中的属性 | 一个个指定 |
松散绑定(松散语法) | 支持 | 不支持 |
SpEL | 不支持 | 支持 |
JSR303数据校验 | 支持 | 不支持 |
复杂类型封装 | 支持 | 不支持 |
- 我们只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value;
- 我们专门编写了一个javaBean来和配置文件进行映射,我们就直接使用@ConfigurationProperties;
- @Validated注解用于数据校验
@PropertySource:加载指定的配置文件
@PropertySource(value = {"classpath:person.properties"})
@ImportResource:导入Spring的配置文件,让配置文件里面的内容生效,写在主类
@ImportResource(locations = {"classpath:beans.xml"})
导入Spring的配置文件让其生效
也可以不写配置文件,用配置类代替,需要在配置类上加@Configuration,在方法上加@Bean
package com.txl.springboot.config;
import com.txl.springboot.service.HelloService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MyAppConfig {
@Bean
public HelloService helloService(){
System.out.println("配置类@Bean给容器添加了组件");
return new HelloService();
}
}
${random.value}、${random.int}、${random.long}
${random.int(10)}、${random.int}
如果没有,可以指定默认值
person.last-name=李狗不嗨${random.uuid}
person.age=${random.int}
person.birth=1999/6/5
person.boss=true
person.list=hello,a,c,d
person.map.k1=v1
person.map.k2=v2
person.dog.name=阿狗_${hello:hello1}
person.dog.age=7
我们在主配置文件编写的时候,文件名可以是 application-{profile}.properties/yml
默认使用application.properties的配置。
激活特定文件,该文件配置会生效:
spring.profiles.active=dev
spring:
profiles:
active: prod
---
server:
port: 8082
spring:
profiles: dev
---
server:
port: 8083
spring:
profiles:prod
1、在配置文件中指定 spring.profiles.active=dev
2、命令行:
java -jar spring-boot-02-config-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev;
可以直接在测试的时候,配置传入命令行参数
3、虚拟机参数;
-Dspring.profiles.active=dev
springboot 启动会扫描以下位置的application.properties或者application.yml文件作为Spring boot的默认配置文
件
–file:./config/
–file:./
–classpath:/config/
–classpath:/
优先级由高到底,高优先级的配置会覆盖低优先级的配置;
SpringBoot会从这四个位置全部加载主配置文件;互补配置