首页 > 编程知识 正文

springboot的配置文件,springboot spring配置文件

时间:2023-05-04 00:30:59 阅读:198640 作者:4932

从传统的Java web到SSM框架,都是在对开发过程的简化,后面又出现了SpringBoot,这就使得开发更加的简化了。我们在使用SSM框架的时候,各种配置文件,使得Spring在某一段时间里被称作“配置地狱”,后面为了更加简化,就出现了SpringBoot,SpringBoot帮助我们做了很多的事情,使得开发更加简化了。

下面就聊聊博主对于SpringBoot配置文件的理解(以下理解全部是基于Java语言的Maven构建的SpringBoot工程)。

1.SpringBoot配置文件说明

SpringBoot项目是一个标准的Maven项目,它的配置文件需要放在src/main/resources/下,其文件名必须为application,其存在两种文件形式,分别是properties和yaml(或者yml)文件。

propertiesyaml语法结构key=valuekey: value(:和value之间需要空格)文件后缀.properties.yaml或者.yml

如果两种类型的配置文件同时存在,properties文件的优先级大于yaml文件。

举个例子,同样是配置端口号,properties文件如下:

# 修改端口号为80server.port=80

yaml文件如下:

# 修改端口号为80server: 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 com.ara.config;import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;@Data@NoArgsConstructor@AllArgsConstructorpublic class Address { private String province; private String city; private String street;}

Student类:

package com.ara.config;import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;import org.springframework.boot.context.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)中写入数据如下:

# 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: 成华大道# 自定义valuecustom: def: value: 这是一个自定义的值

然后在测试类中写入以下代码:

//自动注入我们提供的Student类对象@Autowiredprivate Student student;//通过${xxx.xxx}来获取配置文件中指定key的值@Value("${custom.def.value}")private String value;@Testvoid contextLoads() { System.out.println(student); System.out.println(value);}

然后运行测试项目,发现控制台打印出我们在配置文件中编写的数据:

到此,就成功的读取到了自定义配置的数据。

3.SpringBoot的配置

除了自定义的配置,就是SpringBoot本身就有的配置。
举个例子:
我们设置项目的端口号,在配置文件中写入server.port=xxxx,这里就是在ServerProperties类中注入了我们配置的值,打开源码可见:

如果我们没有进行设置,将会使用SpringBoot提供的默认配置。

当然这配置还有很多,具体的可以在spring-boot-autoconfiguration-x.x.x.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:


然后我们又发现了这个注解@ConfigurationProperties,现在我们就明白了,SpringBoot的配置我们都可以通过这种方式去查看源码和进行自定义配置。

简单示意图如下:

仅仅通过这一点的源码跟进,我们就发现了SpringBoot设计的巧妙之处,当然这只是很浅的“皮毛”,需要更加深入理解的话,还是要花费很深的功夫。

如有不严谨或者错误的描述之处,还望xldbg能够批评指教。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。