[英]Spring Boot : YAML configuration not loaded to bean
角色权限映射.yml
内容:
role-mapping-permissions:
rolePermissions:
-
role : 'role1'
permissions:
-'role1'
-'perm1'
-'perm2'
-
role: 'role2'
permissions:
-'role2'
-'perm1'
-'perm2'
配置 class:
@Configuration
@ConfigurationProperties(prefix="role-mapping-permissions")
@EnableConfigurationProperties
@Slf4j
public class RolePermissionMapping {
private List<RoleDetails> rolePermissions = new ArrayList<>();
@PostConstruct
public void init(){
if(!rolePermissions.isEmpty()){
log.info("Role -Permission size {}",rolePermissions.size());
}else{
log.info("role-permission-mapping is not configured");
}
}
public List<RoleDetails> getRolePermissions() {
return rolePermissions;
}
public void setRolePermissions(List<RoleDetails> rolePermissions) {
this.rolePermissions = rolePermissions;
}
public static class RoleDetails {
private String role;
private List<String> permissions = new ArrayList<String>();
public RoleDetails(String role,List<String> permissions){
this.role= role;
this.permissions = permissions;
}
public String getRole() {
return role;
}
public void setRole(String role) {
this.role = role;
}
public List<String> getPermissions() {
return permissions;
}
public void setPermissions(List<String> permissions) {
this.permissions = permissions;
}
}
}
预期的 Output 应该是:上面的代码显示 output没有配置角色权限映射而不是加载配置并执行log.info("Role -Permission size {}",rolePermissions.size());
即使添加了@PropertySource
注释,它也需要使用@Value
注释。 没有@Value
注释有什么方法可以使用吗?
最后我得到了解决方案:
它需要实现 YamlPropertySourceFactory
public class YamlPropertySourceFactory implements PropertySourceFactory {
@Override
public PropertySource<?> createPropertySource(String name, EncodedResource encodedResource)
throws IOException {
YamlPropertiesFactoryBean factory = new YamlPropertiesFactoryBean();
factory.setResources(encodedResource.getResource());
Properties properties = factory.getObject();
return new PropertiesPropertySource(encodedResource.getResource().getFilename(), properties);
}
}
配置文件似乎更改为YamlPropertySourceFactory 以用于 @PropertySource和实现的空构造函数。
更新配置 class:
@Configuration
@ConfigurationProperties(prefix="role-mapping-permissions")
@PropertySource(value="classpath:role-permissions-mapping.yml",factory = YamlPropertySourceFactory.class)
@Slf4j
public class RolePermissionMapping {
private List<RoleDetails> rolePermissions = new ArrayList<>();
private Map<String,List<String>> rolePermissionMap;
/*Empty constructor*/
public RolePermissionMapping() {
}
@PostConstruct
public void init(){
if(!rolePermissions.isEmpty()){
rolePermissionMap = new HashMap<String, List<String>>();
rolePermissions.stream().forEach(rolePermissions->{
rolePermissionMap.put(rolePermissions.getRole(), rolePermissions.getPermissions());
});
}else{
log.debug("role-permission-mapping is not configured");
}
}
public List<String> getPermissions(String role) {
if(StringUtils.isEmpty(role) || !rolePermissionMap.entrySet().contains(role)){
throw new ResourceNotFoundException("Role Name '"+role+"' not found.");
}
return rolePermissionMap.get(role);
}
public List<RoleDetails> getRolePermissions() {
return rolePermissions;
}
public void setRolePermissions(List<RoleDetails> rolePermissions) {
this.rolePermissions = rolePermissions;
}
@Configuration
public static class RoleDetails {
private String role;
private List<String> permissions = new ArrayList<String>();
/*Empty constructor*/
public RoleDetails(){
}
public String getRole() {
return role;
}
public void setRole(String role) {
this.role = role;
}
public List<String> getPermissions() {
return permissions;
}
public void setPermissions(List<String> permissions) {
this.permissions = permissions;
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.