StringBoot中@ConfigurationProperties注解的使用讲解

目录

1 用代码解释怎么使用

1.1 userInfo实体

1.2 userInfo.properties

1.3 application.properties

1.4 读取配置文件,并使用configurationproperties映射到实体里面

1.5 启动类

1.6 测试类

1.7 @ConfigurationProperties和@Value对比

1.8应用场景


1 用代码解释怎么使用

1.1 userInfo实体

public class UserInfo{
    private Integer userId;
    private String userName;
    private String userPassword;
    private String userAddress;
//省去get/set方法
}

1.2 userInfo.properties


#自定义参数前缀名字
spring.user.user-id=123
spring.user.user-name=小明
spring.user.user-password=xiaoming
spring.user.user-address=上海

1.3 application.properties

spring.main.allow-bean-definition-overriding=true

 在application.properties里面写这句话,主要是为了预防会报错,具体错信息:A bean with that name has already been defined in file

1.4 读取配置文件,并使用configurationproperties映射到实体里面

@Configuration
@PropertySource(value={"classpath:userInfo.properties"},encoding="utf-8")
public class SpringConfig{

    @Bean
    @ConfigurationProperties(prefix="spring.user")
    public UserInfo userInfo(){
        return new UserInfo();
    }

1.5 启动类

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

1.6 测试类

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes={AppStringBoot.class})
public class TestUserInfo{
    @Autowired
    private UserInfo userInfo;
    @Test
    public void testUserInfo(){
        System.out.println(userInfo);
    }
    
}

1.7 @ConfigurationProperties和@Value对比

  @ConfigurationProperties @Value
功能 根据配置文件中设置的属性,批量注入属性值 单个指定值
松散语法 支持(lastName可以写作last-name、last_name) 不支持
SpEL(Spring表达式) 不支持 支持
JSR303数据校验 支持(可以通过@Email等注解校验属性值是否符合要求) 不支持
复杂类型封装(Map、List等类型) 支持 不支持

1.8应用场景

  • 如果只是某个业务中需要获取配置文件中的某项值或者设置具体值,可以使用@Value
  • 如果一个JavaBean中大量属性值要和配置文件进行映射,可以使用@ConfigurationProperties
     

 

你可能感兴趣的:(SpringBoot,注解)