SpringBoot配置⽂件简介
从传统的Java web到SSM框架,都是在对开发过程的简化,后⾯⼜出现了SpringBoot,这就使得开发更加的简化了。我们在使⽤SSM框架的时候,各种配置⽂件,使得Spring在某⼀段时间⾥被称作“配置地狱”,后⾯为了更加简化,就出现了
SpringBoot,SpringBoot帮助我们做了很多的事情,使得开发更加简化了。
下⾯就聊聊博主对于SpringBoot配置⽂件的理解(以下理解全部是基于Java语⾔的Maven构建的SpringBoot⼯程)。
1.SpringBoot配置⽂件说明
SpringBoot项⽬是⼀个标准的Maven项⽬,它的配置⽂件需要放在src/main/resources/下,其⽂件名必须为application,其存在两种⽂件形式,分别是properties和yaml(或者yml)⽂件。
properties yaml
语法结构key=value key: value(:和value之间需要空格)
⽂件后缀.properties.yaml或者.yml
如果两种类型的配置⽂件同时存在,properties⽂件的优先级⼤于yaml⽂件。
举个例⼦,同样是配置端⼝号,properties⽂件如下:
# 修改端⼝号为80
server.port=80
yaml⽂件如下:
# 修改端⼝号为80
server:
port:80
博主更喜欢使⽤yaml⽂件作为配置⽂件。
2.读取⾃定义配置数据
在SpringBoot项⽬的开发过程中可能会存在⾃定义的⼀些数据需要读取到程序中,我们也能够直接在SpringBoot的配置⽂件中⾃定义。
使⽤Idea新建⼀个SpringBoot项⽬,在pom⽂件中添加依赖如下:
<!--lombok偷懒⼯具-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!--使⽤ConfigurationProperties注解需要该依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
然后在主启动类的同级⽬录下建config包,并在下⾯创建两个类,供以使⽤。Address类:
package fig;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Address {
private String province;
private String city;
private String street;
}
Student类:
package fig;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.t.properties.ConfigurationProperties; import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.Map;
//lombok注解
@Data
@NoArgsConstructor
@AllArgsConstructor
//将当前类对象放在IOC容器中
@Component
//表⽰与配置⽂件中前缀为student的数据相对应
@ConfigurationProperties(prefix ="student")
public class Student {
private int id;
private String name;
private boolean sex;
private String[] subjects;
/**
* 时间(默认时间格式:1999/09/23)
* 可通过@DateTimeFormat注解指定
* eg: @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
*/
private Date birthday;
private Map<String,String> teachers;
private Address address;
}
然后在配置⽂件(application.yaml)中写⼊数据如下:
ssm框架简单吗# student对象的⾃定义数据
student:
id:20200729
name: Ara
sex:true
# 数组还可以写成如下:
# subjects: [C,C++,Java]
subjects:
- C
- C++
- Java
# 时间
birthday: 1999/09/23
# Map集合
teachers:
math:汤⽼师
C: Tom
Java: jack
# 对象对象还可以写成如下⾏内形式(注意:和value之间的空格)
# address: {province: 四川,city: 成都,street: 成华⼤道}
address:
province:四川
city:成都
street:成华⼤道
# ⾃定义value
custom:
def:
value:这是⼀个⾃定义的值
然后在测试类中写⼊以下代码:
//⾃动注⼊我们提供的Student类对象
@Autowired
private Student student;
//通过${}来获取配置⽂件中指定key的值
@Value("${custom.def.value}")
private String value;
@Test
void contextLoads(){
System.out.println(student);
System.out.println(value);
}
然后运⾏测试项⽬,发现控制台打印出我们在配置⽂件中编写的数据:
到此,就成功的读取到了⾃定义配置的数据。
3.SpringBoot的配置
除了⾃定义的配置,就是SpringBoot本⾝就有的配置。
举个例⼦:
我们设置项⽬的端⼝号,在配置⽂件中写⼊server.port=xxxx,这⾥就是在ServerProperties类中注⼊了我们配置的值,打开源码可见:
如果我们没有进⾏设置,将会使⽤SpringBoot提供的默认配置。
当然这配置还有很多,具体的可以在jar/META-INF/spring.factories中去查看。
再举个例⼦,连接数据库的配置,我们在spring.factories中可以看到这个类。
然后我们继续跟进,直接查看该类的源码:
我们发现该类对象出现在IOC容器中是有条件的,这⾥的@ConditionalOnXxx就决定了该类对象是否会⾃动注⼊到IOC容器中。
@Configuration(proxyBeanMethods =false)
//该类要在DataSource和EmbeddedDatabaseType类对象存在于IOC中才会⾃动注⼊到IOC
@ConditionalOnClass({ DataSource.class, EmbeddedDatabaseType.class})
//该类需要在IOC中没有类型为"io.r2dbc.spi.ConnectionFactory"的bean才能被注⼊IOC
@ConditionalOnMissingBean(type ="io.r2dbc.spi.ConnectionFactory")
//⾃动配置类
@EnableConfigurationProperties(DataSourceProperties.class)
@Import({ DataSourcePoolMetadataProvidersConfiguration.class, DataSourceInitializationConfiguration.class})
我们继续跟进⾃动配置类DataSourceProperties.class:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论