SPringBoot的配置文件

classpath介绍

classpath就是class的path,也就是类文件(*.class的路径)。

web项目发布后的目录结构
使用idea对项目进行打包,一种是war包,一种是explorer的文件夹,war包解压后就是explorer了。
在这里插入图片描述

在这里插入图片描述

配置文件的加载顺序

在SpringBoot 当中,全局配置文件有两种不同的格式,一个是我们常见的properties, 一种是yml.
这两种格式的文件其实也没什么太大的区别,使用的时候按照个人的习惯来就行。

内部配置文件加载顺序

创建SpringBoot 的项目时,默认在resources目录下创建一个application.properties文件,这时我们可以在这个文件当中对项目进行配置即可。但是在SpringBoot 中application.properties可以存放在以下几个位置:

  1. file:./config/ 项目根目录下的config文件夹下
  2. file:./ 项目根目录下
  3. classpath:/config/ 类路径下的config文件夹下
  4. classpath:/ 类路径下

文件的加载顺序:即根目录下的config目录下,然后是 根目录下,然后是classpath路径下的config目录下,最后是classpath路径下。
在这里插入图片描述
优先级由高到低,高优先级的配置会覆盖低优先级的配置。

注意: 并不是高优先级的被加载了,低优先级的就不会再加载,实际上是SpringBoot会从这四个位置全部加载主配置文件,并且还能产生互相配置的效果。

除此外,我们还可以通过spring.config.location来改变默认的配置文件位置。

例如:项目打包好以后,我们可以使用命令行参数的形式,启动项目的时候来指定配置文件的新位置;指定默认加载的这些配置文件共同起作用形成互补配置。

在 G盘目录下,创建一个application.yml文件,定义端口为8085

打包项目,启动命令行:java -jar spring-boot-config-0.0.1-SNAPSHOT.jar --spring.config.location=G:/application.yml 回车运行。

外部配置文件加载顺序

命令行参数

java -jar spring-boot-config-0.0.1-SNAPSHOT.jar --server.port=8087

由jar包外向jar包内进行寻找:

在这里插入图片描述

外部配置文件加载方式

第一种是在jar包的同一目录下建一个config文件夹,然后把配置文件放到这个文件夹下;
第二种是直接把配置文件放到jar包的同级目录;
第三种在classpath下建一个config文件夹,然后把配置文件放进去;
第四种是在classpath下直接放配置文件。

这四种方式的优先级是从一到四一次降低的,这里主要说前面两种外部配置文件使用。

获取配置文件的方式

@Value

创建配置类,由于篇幅问题这里省略了 setter、getter 方法,但是实际开发中这个是必须的,否则无法成功注入,@Component表示把当前配置类注入到Spring容器当中。

@Component
public class PersonConfig {

    @Value("${person.userName}")
    private String userName;
    @Value("${person.age}")
    private int age;
    
}

@ConfigurationProperties

如果我们需要取 许多个配置项,通过 @Value 的方式去配置项需要一个一个去取,显然有点麻烦。所以我们可以使用 @ConfigurationProperties

标有@ConfigurationProperties的类的所有属性和配置文件中相关的配置项进行绑定,绑定之后我们就可以通过这个类去访问全局配置文件中的属性值。

@Component
@ConfigurationProperties(prefix = "user")  //配置项在配置文件中的前缀,即user。
public class User {
    private String  username;
    private String password;
    private Map<String,String> map;
    private Person person;
    private List<String> list;
    private Object[] objects;

}

这里 @ConfigurationProperties 有一个 prefix参数,主要是用来指定该配置项在配置文件中的前缀,即user。

两种获取配置方式的对比

@ConfigurationProperties@Value
功能批量注入配置文件的属性一个一个指定
松散绑定支持不支持
JSR303数据校验支持不支持
复杂数据封装支持不支持(Map)

松散绑定,username 可以用user-name 表示,来获取值

JSR303数据校验,如果用@Value获取全局配置文件的属性,使用@Validated文件格式校验是不起作用的。

@PropertySource 注解加载指定的配置文件。

@PropertySource (value = “ ”) 指明加载类路径下的哪个配置文件来注入值

创建配置类,由于篇幅问题这里省略了 setter、getter ,toString 方法,但是实际开发中这个是必须的,否则无法成功注入。

@Component
@PropertySource( "classpath:student.properties")
@ConfigurationProperties(prefix = "student")
public class Student {

    private String sname;
}

配置文件内容

student.sname=admin

@ImportResource 导入Spring 配置文件

@ImportResource 注解用来导入 Spring 的配置文件,如果Spring配置文件 “bean.xml”,从而让配置文件里面的内容生效,通常可以把@ImportResource标注在@SpringBootApplication的启动类上即可。

启动类代码:

@ImportResource("classpath:bean.xml")
@SpringBootApplication
public class SpringBootConfigApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringBootConfigApplication.class, args);
    }

}

Spring的配置文件:bean.xml

<?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="personService" class="com.zfcoding.service.PersonService"></bean>
</beans>

这Spring 中bean的配置实现,但是SpringBoot 推荐我们使用注解开发,那Springboot 中注解是如何实现bean 的注入呢?

@Configuration:指明当前类是配置类,就是代替上面说到的spring的配置文件.

@Bean 将方法返回值添加到容器当中,容器中这个组件默认的id 是方法名

@Configuration
public class MyConfig {
    @Bean
    public PersonSerivcer personSerivcer(){
        return new PersonSerivcer();
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值