【spring】在一般spring项目中使用ConfigurationProperties(非springboot)

背景

@ConfigurationProperties注解可以将配置文件自动封装成javabean,方便调用,SpringBoot的自动配置,使用了此特性。在Spring Bean中读取配置文件属性,可以使用@Value注解,也可以使用@ConfigurationProperties注入封装好的配置对象,后者在存在大量属性时方便很多。

自定义配置类

springboot项目

springboot项目中可直接定义使用
配置类:

package top.freej.demo.config;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

@Data
@Configuration
@ConfigurationProperties(prefix = "demo.config")
public class ConfigurationDemo {
    private String key1;
    private String key2;
    private Complex complex = new Complex();

    @Data
    public class Complex {
        private String key1;
        private String key2;
    }
}

配置文件

demo:
  config:
    key1: "key1"
    key2: "key2"
    complex:
      key1: "complexKey1"
      key2: "complexKey2"

测试

package top.freej.demo;

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import top.freej.demo.config.ConfigurationDemo;

import javax.annotation.Resource;

@SpringBootTest
class DemoApplicationTests {
	@Resource
	private ConfigurationDemo configurationDemo;

	@Test
	public void testConfig() {
		Assertions.assertEquals("key1", configurationDemo.getKey1());
		Assertions.assertEquals("key2", configurationDemo.getKey2());
		Assertions.assertEquals("complexKey1", configurationDemo.getComplex().getKey1());
		Assertions.assertEquals("complexKey2", configurationDemo.getComplex().getKey2());
	}
}

注意事项:
1. 配置类中的@Configuration用于标记此类是一个SpringBean,可以替换为Component等有相同效果的注解
2. 定义复杂配置需要增加类,类似例子中的Complex类

非springboot项目

普通spring项目还需要在配置类上添加@EnableConfigurationProperties注解,并且可以通过@PropertySource注解从指定配置文件位置

@Data
@Configuration
@EnableConfigurationProperties
@PropertySource("classpath:application.yaml")
@ConfigurationProperties(prefix = "demo.config")
public class ConfigurationDemo {
    private String key1;
    private String key2;
    private Complex complex = new Complex();

    @Data
    public class Complex {
        private String key1;
        private String key2;
    }
}

其他知识点

  • 在高版本gradle中使用lombok
    annotationProcessor "org.projectlombok:lombok:${dpd.lombokVersion}"
    compileOnly "org.projectlombok:lombok:${dpd.lombokVersion}"
    testAnnotationProcessor "org.projectlombok:lombok:${dpd.lombokVersion}"
    testCompileOnly "org.projectlombok:lombok:${dpd.lombokVersion}"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值