springboot参数配置

全局配置文件

  1. application.properties 配置文件

先准备两个pojo实体类Pet和Person

@Component//用于将Person类作为Bean注入到spring容器中
@ConfigurationProperties(prefix = "person") //将配置文件中以person开头的属性注入到该类中
public class Person {


    private int id;            //id
    private String name;      //名称
    private List hobby;       //爱好
    private String[] family; //家庭成员
    private Map map;
    private Pet pet;          //宠物
    //getter  setter  toString方法省略

@ConfigurationProperties(prefix = “person”)注解的作用就是将配置文件中的以person开头的属性值通过setXX()方法注入到实体类对应的属性中。
@Component注解的作用是将当前注入属性值的Person类对象作为Bean组件放入到Spring容器中,只有这样才能被@ConfigurationProperties注解进行赋值。

在resource目录下的application.properties配置文件,在该配置文件中编写需要对Person类设置的属性,如下

person.id=1
person.name=tom
person.hobby=吃饭,睡觉,打豆豆
person.family=father,mother
person.map.k1=v1
person.map.k2=v2
person.pet.type=dog
person.pet.name=旺财

编写application.properties配置文件时,由于要配置Person对象属性是我们自定义的,Spring Boot无法自动识别,所以不会有任何书写提示。在实际开发中,为了出现代码提示的效果来方便配置,在使用@ConfigurationProperties注解进行配置文件属性值注入时,可在pom.xml中添加一个Spring Boot提供的配置处理器依赖

		 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>

在pom.xml中添加上述配置依赖后,还需要重新运行项目启动类或者使用“Ctrl+F9”快捷键(即Build Project)重构当前Spring Boot项目方可生效

在这里插入图片描述

打印结果
Person{id=1, name=‘tom’, hobby=[吃饭, 睡觉, 打豆豆], family=[father, mother], map={k1=v1, k2=v2}, pet=Pet{type=‘dog’, name=‘旺财’}}
可以看出,测试方法configurationTest()运行成功,同时正确打印出了Person实体类对象,至此,说明application.properties配置文件属性配置正确,并通过相关注解自动完成了属性注入。

  1. application.yaml 配置文件
  1. value值为普通数据类型
person:
  id: 2
  name: lucy
  1. value值为数组和单列集合,主要有两种书写格式:缩进式、行内式
#缩进式,如下两种都可以

person:
  hobby: 
    - 吃饭
    - 睡觉
    - 打豆豆
        
person:
  hobby:
    吃饭,
    睡觉,
    打豆豆

#行内式
person:
  hobby: [吃饭,睡觉,打豆豆]
  1. value值为map集合和对象
#缩进式
person:
  map:
    k1: v1
    k2: v2
    
#行内式
person:
  map: {k1: v1,k2: v2}

需要注意的一点是application.properties会覆盖application.yaml同样的配置

配置文件属性值的注入

  1. 使用@ConfigurationProperties注入属性
//用于将Person类作为Bean注入到spring容器中
@Component
//将配置文件中以person开头的属性注入到该类中
@ConfigurationProperties(prefix = "person")
public class Person {

    private int id;

    public void setId(int id) {
        this.id = id;
    }
}

@ConfigurationProperties(prefix = “person”) 表示配置文件中的属性以person开头

  1. 使用@Value注入属性
@Component
public class Person {

    @Value("${person.id}")
    private int id;
    
    @Value("${person.name}")
     private String name; 
     
	@Value("北京")
    private String address;
}

@Value不仅可以将配置文件中的属性注入person的id属性,还可以直接赋值,@ConfigurationProperties不支持。另外使用@Value注解方式需要对每一个属性注入设置,但是不需要写属性setXX()的方法。

自定义配置

  1. 使用 @PropertySource加载配置文件

加载自定义配置文件的需求,可以通过使用@PropertySource注解结合@Configuration注解配置类的方式实现。@PropertySource注解用于指定自定义配置文件的位置和名称。同时,为了保证springboot能够扫描到,还需要在类上添加@Configuration注解来表明这是一个配置类。

  1. 在项目路径下新建test.properties配置文件,在配置文件中编写需要设置的属性
test.id=1
test.name=test
  1. 自定义配置类
@Configuration
@PropertySource("classpath:test.properties")  //配置自定义配置文件的名称及位置
@EnableConfigurationProperties(MyProperties.class) // 
@ConfigurationProperties(prefix = "test")
public class MyProperties {

	private int id;
    private String name;
	//省略getXX()和setXX()方法
}
  • @Configuration注解表示当前类是一个自定义配置类,这里也可以使用传统的@Component注解
  • @PropertySource(“classpath:test.properties”) 注解指定了自定义配置文件的位置和名称
  • @ConfigurationProperties(prefix = “test”)注解将上述自定义配置文件test.properties中以person开头的属性值注入到该配置类属性中
  • 如果配置类上使用的是@Component注解而非@Configuration注解,@EnableConfigurationProperties注解可以省略
  1. 测试
//测试启动器,并加载spring boot测试注解
@RunWith(SpringRunner.class)
//标记该类为spring boot单元测试类,并加载项目的applicationContext上下文环境
@SpringBootTest
class Springboot01DemoApplicationTests {

    /*
      @propertySource进行测试
     */
    @Autowired
    private MyProperties myProperties;

    @Test
    void myPropertiesTest() {
        System.out.println(myProperties);
    }
}

测试结果:MyProperties{id=1, name=‘test’}

  1. 使用@Configuration编写自定义配置类
  1. 在springboot框架中,推荐使用配置类的方式向容器中添加和配置组件,通常使用@Configuration注解定义一个配置类,springboot会自动扫描和识别配置类,从而替换传统spring框架中的XML配置文件
  2. 当定义一个配置类后,还需要在类的方法上添加@Bean注解进行组件配置,将方法的返回值对象注入到spring容器中,并且组件名称默认使用的方法名,也可以使用@Bean的name或者value属性自定义组件名称。
  3. 自定义一个bean类
public class MyService {
}
  1. 自定义一个配置类
//标明该类为配置类
@Configuration 
public class MyConfig {

    //将返回值对象作为组件添加到spring容器中,标识id默认是方法名
    @Bean(name = "iservice")   
    public MyService myService() {

        return new MyService();
    }
}
  1. 测试
//测试启动器,并加载spring boot测试注解
@RunWith(SpringRunner.class)
//标记该类为spring boot单元测试类,并加载项目的applicationContext上下文环境
@SpringBootTest
class Springboot01DemoApplicationTests {

    @Autowired
    private ApplicationContext context;

    @Test
    void iocTest() {
        System.out.println(context.containsBean("iservice"));
    }
}

测试结果返回true,表示容器中包含id 为iservice的实例对象组件,说明使用自定义配置类成功向spring容器添加和配置了组件

随机参数设置和参数间引用

  1. 随机参数配置

在springboot配置文件中,随机值设置使用springboo内嵌的RandomValuePropertySource类,对一些隐秘属性值或者测试用例属性值进行随机值注入,具体用法如下

#随机值
my.secret=${random.value}
#随机整数
my.number=${random.int}
#随机长整形
my.bignumber=${random.long}
#随机UUID
my.uuid=${random.uuid}
#小于10的随机整数
my.number.less.than.ten=${random.int(10)}
#范围在[1024,65536]之间的随机整数
my.number.in.range=${random.int[1024,65536]}
  1. 参数间引用
  1. 在springboot配置文件中,配置文件的属性值还可以进行参数间的引用,也就是在后一个配置的属性值中直接引用先前已经定义过的属性,这样可以直接其中的属性值。
  2. 优点:在多个具有互相关联的配置属性中,只需要修改一处属性预先配置,其他地方都可以引用,省去了后续多出修改的麻烦。参数间引用的语法格式为${xx},xx表示先前在配置文件已经配置过的属性名,具体用法如下
#随机值设置及参数间引用
tom.age=${random.int[10,20]}
tom.description=tom的年龄可能是${tom.age}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值