最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
SpringBoot中@ConfigurationProperties实现配置自动绑定代码方法
时间:2022-06-29 01:55:13 编辑:袖梨 来源:一聚教程网
本篇文章小编给大家分享一下SpringBoot中@ConfigurationProperties实现配置自动绑定代码方法,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。
代码如下
pom.xml:
4.0.0 org.springframework.boot spring-boot-starter-parent 2.6.2 jar com.kaven springboot 0.0.1-SNAPSHOT springboot springboot 1.8 org.springframework.boot spring-boot-starter-web org.projectlombok lombok org.springframework.boot spring-boot-maven-plugin
配置类:
package com.kaven.springboot.config; import lombok.Setter; import lombok.ToString; import org.springframework.boot.context.properties.ConfigurationProperties; import java.util.List; import java.util.Map; import java.util.Set; @ConfigurationProperties(prefix = "user") @Setter @ToString public class UserProperties { private String username; private String password; private Sethobbies; private Map scores; private List userToken; }
UserToken类:
package com.kaven.springboot.config; import lombok.Setter; import lombok.ToString; @Setter @ToString public class UserToken { private String token; }
接口:
package com.kaven.springboot.controller; import com.kaven.springboot.config.UserProperties; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; @RestController public class ConfigController { @Resource private UserProperties userProperties; @GetMapping("/config") public String getConfig() { return userProperties.toString(); } }
application.properties:
user.username="kaven" user.password="itkaven" user.hobbies[0]="A" user.hobbies[1]="B" user.hobbies[2]="C" user.scores.mathematics=145 user.scores.english=80 user.user-token[0].token="A" user.user-token[1].token="B" user.user-token[2].token="C"
启动类:
package com.kaven.springboot; import com.kaven.springboot.config.UserProperties; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.context.properties.EnableConfigurationProperties; @SpringBootApplication @EnableConfigurationProperties(value = {UserProperties.class}) //@ConfigurationPropertiesScan(basePackageClasses = {UserProperties.class}) public class SpringbootApplication { public static void main(String[] args) { SpringApplication application = new SpringApplication(SpringbootApplication.class); application.run(args); } }
下面这两个注解都可以使得Spring Boot基于被@ConfigurationProperties注解修饰的类创建bean,因此UserProperties实例可以自动注入到控制器中。
@EnableConfigurationProperties(value = {UserProperties.class}) @ConfigurationPropertiesScan(basePackageClasses = {UserProperties.class})
而@ConfigurationPropertiesScan注解还可以指定要被扫描的包数组。
@ConfigurationPropertiesScan(basePackages = {"com.kaven.springboot.config"})
启动应用,访问http://localhost:8080/config。
效果符合预期。
构造器绑定
Spring Boot将配置文件中的配置自动绑定到配置类,无非就是通过反射等手段,创建配置类实例,而配置项需要绑定到配置类实例的属性,这一般通过属性的set方法或者构造器来实现,上面的演示是通过set方法来进行绑定,这是@Setter注解的效果。
@Setter
如果需要通过构造器将配置项绑定到配置类实例的属性,可以使用@ConstructorBinding注解。
package com.kaven.springboot.config; import lombok.ToString; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.ConstructorBinding; import java.util.List; import java.util.Map; import java.util.Set; @ConfigurationProperties(prefix = "user") @ToString @ConstructorBinding public class UserProperties { private String username; private String password; private Sethobbies; private Map scores; private List userToken; public UserProperties(String username, String password, Set hobbies, Map scores, List userToken) { this.username = username; this.password = password; this.hobbies = hobbies; this.scores = scores; this.userToken = userToken; } }
使用@ConstructorBinding注解修饰类的问题在于类中可能有多个构造器,如果出现这种情况就会有问题。
package com.kaven.springboot.config;import lombok.ToString;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.boot.context.properties.ConstructorBinding;import java.util.List;import java.util.Map;import java.util.Set;@ConfigurationProperties(prefix = "user")@ToString@ConstructorBindingpublic class UserProperties { private String username; private String password; private Sethobbies; private Map scores; private List userToken; public UserProperties() {} public UserProperties(String username, String password, Set hobbies, Map scores, List userToken) { this.username = username; this.password = password; this.hobbies = hobbies; this.scores = scores; this.userToken = userToken; }}
因为Spring Boot不知道调用哪个构造器。
可以将@ConstructorBinding注解修饰在构造器上。
package com.kaven.springboot.config; import lombok.ToString; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.ConstructorBinding; import java.util.List; import java.util.Map; import java.util.Set; @ConfigurationProperties(prefix = "user") @ToString public class UserProperties { private String username; private String password; private Sethobbies; private Map scores; private List userToken; public UserProperties() {} @ConstructorBinding public UserProperties(String username, String password, Set hobbies, Map scores, List userToken) { this.username = username; this.password = password; this.hobbies = hobbies; this.scores = scores; this.userToken = userToken; } }
结合@PropertySource
SourceConfig类:
package com.kaven.springboot.config; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; @Configuration @PropertySource(value = "classpath:/static/user.properties") public class SourceConfig {}
效果符合预期,@ConfigurationProperties实现配置自动绑定
相关文章
- 《原神》5.2卡池抽取建议 11-14
- 《原神》5.2版本新怪物介绍 11-14
- 《原神》希诺宁增伤触发方法 11-14
- 《原神》循音觅奇活动入口 11-14
- 《原神》循音觅奇兑换码获取方法 11-14
- 《原神》花羽会活动飞行技巧介绍 11-14