SpringBoot读取application.properties文件

http://blog.csdn.net/cloume/article/details/52538626

Spring Boot中使用自定义的properties

Spring Boot的application.properties中已经提供了很多默认的配置,如果要添加自定义的配置该怎么办呢?我们可以继续在application.properties中添加自定义的配置项,也可以使用新的配置文件,在里面添加自定义的配置项。比如说最近我在做一个简单的系统权限配置,我就把 
系统的角色和角色可操作的权限列表写在application.properties中以方便进行更新。那么怎么获取自定义的配置项内容呢?

1. 在application.properties中添加配置项

比如说我在application.properties中添加了如下配置项:

# user privilege
privilege.assistor=assitor
privilege.admin=assistor_create,star_operate,requirement_dispatch,fee_return,fee_charge,expiration_set
privilege.superman=admin_create
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

依然可以通过@Value注解方便地获取到配置项的值:

@Value("${privilege.assistor}") private String assistorPrivileges;
  • 1
  • 1

2. 使用新的配置文件

为了和其他默认配置项保持独立,我也可以新建一个privilege.properties的配置文件,然后将权限相关的配置内容放到这个文件里面:

privilege.properties

# user privilege
privilege.assistor=assitor
privilege.admin=assistor_create,star_operate,requirement_dispatch,fee_return,fee_charge,expiration_set
privilege.superman=admin_create
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

这个时候再使用@Value注解就拿不到配置项的值了。怎么办呢?我们可以新增相应的配置项类,在需要使用到配置项的地方直接注入使用。

1. 定义配置类

package com.cloume.hsep.security;

import java.util.ArrayList;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.security.core.authority.SimpleGrantedAuthority;

//privilege.properties是放在resource/config目录下的
@ConfigurationProperties(prefix = "privilege", locations = "classpath:application.properties")
public class PrivilegeSettings {

    private String superman;    
    private String assistor;    
    private String admin;

    private static ArrayList<SimpleGrantedAuthority> superPrivileges = new ArrayList<SimpleGrantedAuthority>();
    private static ArrayList<SimpleGrantedAuthority> adminPrivileges = new ArrayList<SimpleGrantedAuthority>();
    private static ArrayList<SimpleGrantedAuthority> assistorPrivileges = new ArrayList<SimpleGrantedAuthority>();

    public String getSuperman() {
        return superman;
    }

    public void setSuperman(String superman) {
        this.superman = superman;
        for(String privilege : superman.split(",")){
            SimpleGrantedAuthority authority = new SimpleGrantedAuthority(privilege);
            superPrivileges.add(authority);
        }
    }

    public String getAssistor() {
        return assistor;
    }

    public void setAssistor(String assistor) {
        this.assistor = assistor;
        for(String privilege : assistor.split(",")){
            SimpleGrantedAuthority authority = new SimpleGrantedAuthority(privilege);
            assistorPrivileges.add(authority);
        }
    }

    public String getAdmin() {
        return admin;
    }

    public void setAdmin(String admin) {
        this.admin = admin;
        for(String privilege : admin.split(",")){
            SimpleGrantedAuthority authority = new SimpleGrantedAuthority(privilege);
            adminPrivileges.add(authority);
        }
    }

    public ArrayList<SimpleGrantedAuthority> getSuperPrivileges() {
        return superPrivileges;
    }

    public ArrayList<SimpleGrantedAuthority> getAdminPrivileges() {
        return adminPrivileges;
    }

    public ArrayList<SimpleGrantedAuthority> getAssistorPrivileges() {
        return assistorPrivileges;
    }

   }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68

2. 在Spring Boot入口类增加配置项注解@EnableConfigurationProperties

   @SpringBootApplication
   @EnableConfigurationProperties({PrivilegeSettings.class, Privilege2Settings.class})
   public class DemoApplication {

       public static void main(String[] args) {

           SpringApplication.run(DemoApplication.class, args);
       }
   }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

3. 使用自定义properties类

   @RestController
   public class TestController {

       @Autowired
       private PrivilegeSettings privilegeSettings;

       @RequestMapping(value = "/test", method = RequestMethod.GET)
       public @ResponseBody String test(){
           System.out.println(privilegeSettings.getSuperman());
           System.out.println(privilegeSettings.getAdmin());
           System.out.println(privilegeSettings.getAssistor());

           return "OK";
       } 
   }
 
 
SpringBoot读取application.properties文件,通常有3种方式

1. @Value  例如: 

@Value("${spring.profiles.active}")

private String profileActive;------相当于把properties文件中的spring.profiles.active注入到变量profileActive中

2. @ConfigurationProperties  例如:

@Component
@ConfigurationProperties(locations = "classpath:application.properties",prefix="test")
public class TestProperties {
String url;
String key;

}

其他类中使用时,就可以直接注入该TestProperties 进行访问相关的值

3. 使用Enviroment   例如:

private Enviroment env;

env.getProperty("test.url");

而env方式效率较低

注:@ConfigurationProperties也可用于其他.properties文件,只要locations指定即可

原文地址:https://www.cnblogs.com/bigben0123/p/7462199.html