程序员程序员小天地

@ConfigurationProperties获取配置文件

2020-05-22  本文已影响0人  小草莓子桑

项目中已经会用到配置文件,spring项目中可以用@Value来获取配置,今天来说说springboot项目中通过@ConfigurationProperties获取配置文件

@ConfigurationProperties

先来说下@ConfigurationProperties这个注解
直接简单截取源码来说

package org.springframework.boot.context.properties;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention; 
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.core.annotation.AliasFor;
@Target({ ElementType.TYPE, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ConfigurationProperties {

    @AliasFor("prefix")
    String value() default "";
    @AliasFor("value")
    String prefix() default "";
    boolean ignoreInvalidFields() default false;
    boolean ignoreUnknownFields() default true;
}

看到了这个注解包,要使用这个注解,直接引入spring-context相关就好了

<dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-context</artifactId>
     <version>${spring.version}</version>
</dependency>
举个栗子
#用户角色
role:
  #管理员角色
  admin:
    ## 管理角色可以操作 index、item页面
    ## 对页面拥有insert,select,update,delete的权限
    index: insert,select,update,delete
    item: insert,select,update,delete
  #普通角色
  common:
    ## 普通角色只拥有 index页面。 select权限
    index: select
先实现读取普通角色index页面的权限,就像相当于读取role.common.index的值

先创建一个实体类来读取这份配置文件,直接上代码:

@RunWith(SpringRunner.class)
@SpringBootTest(classes = {BootStartApplication.class})// 指定启动类
//使用前缀role.common,意思为读取的是 role.common后面的key
@ConfigurationProperties(prefix = "role.common")
public class TestRole {

    /**
     * 对应到 具体的key  index
     * 加上前缀就定位到了  role.common.index
     */
    private String index;

    public String getIndex() {
        return index;
    }

    public void setIndex(String index) {
        this.index = index;
    }

    @Test
    public void test() {
        System.out.println(JSON.toJSONString(index));
    }
}

先看下运行结果:


运行结果

说下代码:

实现读取管理员角色admin拥有哪些权限

先创建一个实体类来读取这份配置文件,直接上代码:

@RunWith(SpringRunner.class)
@SpringBootTest(classes = {BootStartApplication.class})// 指定启动类
@ConfigurationProperties(prefix = "role")
public class TestRole {

    private Map<String,String> admin;

    public Map<String, String> getAdmin() {
        return admin;
    }

    public void setAdmin(Map<String, String> admin) {
        this.admin = admin;
    }

    @Override
    public String toString() {
        return new StringJoiner(", ", TestRole.class.getSimpleName() + "[", "]")
                .add("admin=" + admin)
                .toString();
    }

    @Test
    public void test() {
        System.out.println(JSON.toJSONString(admin));
    }
}

先看下运行结果:


运行结果

说下代码:

{
    "index": "insert,select,update,delete",
    "item": "insert,select,update,delete"
}
实现读取所有的角色和他们的页面权限

先创建一个实体类来读取这份配置文件,直接上代码:

@RunWith(SpringRunner.class)
@SpringBootTest(classes = {BootStartApplication.class})// 指定启动类
@ConfigurationProperties()
public class TestRole {

    private Map<String,String> role;

    public Map<String, String> getRole() {
        return role;
    }

    public void setRole(Map<String, String> role) {
        this.role = role;
    }

    @Override
    public String toString() {
        return new StringJoiner(", ", TestRole.class.getSimpleName() + "[", "]")
                .add("role=" + role)
                .toString();
    }

    @Test
    public void test() {
        System.out.println(JSON.toJSONString(role));
    }
}

看下执行结果:


执行结果
{
    "admin.index": "insert,select,update,delete",
    "admin.item": "insert,select,update,delete",
    "common.index": "select"
}

看结果是把role下面的每个key读取了出来,这样就是先了读取所有的角色和页面权限

springboot项目中通过@ConfigurationProperties获取配置文件就为大家分享到这里,欢迎大家来交流,指出文中一些说错的地方,让我加深认识,愿大家没有bug,谢谢!

上一篇下一篇

猜你喜欢

热点阅读