美文网首页
SpringBoot 外部配置

SpringBoot 外部配置

作者: quiterr | 来源:发表于2017-03-02 14:38 被阅读0次

    1、读取默认配置文件

    默认配置文件是指在resources目录下的application.properties或application.yml配置文件,读取这两个配置文件的方法有三种。
    application.properties内容如下:

    #log
    logging.level.root=INFO
    logging.path=logs
    
    #custom properties
    a.age=29
    a.msg=hello
    b.age=92
    b.msg=hi
    
    
    

    方法一:

    @Value("${a.age}")
    private String age;
    //其他类似,代码省略
    
    

    方法二:

    @Autowired
    private Environment env;
    String msg = env.getProperty("a.age");
    //其他类似,代码省略
    
    

    方法三:
    适合于配置比较多,希望更好的组织,定义一个CustomASettings类:

    @ConfigurationProperties(prefix = "a")
    public class CustomASettings {
        private String age;
        private String msg;
    
        public String getAge() {
            return age;
        }
    
        public void setAge(String age) {
            this.age = age;
        }
    
        public String getMsg() {
            return msg;
        }
    
        public void setMsg(String msg) {
            this.msg = msg;
        }
    }
    

    必须添加@EnableConfigurationProperties注解

    @SpringBootApplication
    @EnableConfigurationProperties({CustomASettings.class})
    public class App{
    
        public static void main(String args[]){
            SpringApplication.run(App.class);
        }
    }
    

    2、嵌套属性
    假设application.properties内容如下:

    #嵌套属性
    name=test
    jdbc.username=root
    jdbc.password=root
    

    定义一个NestedSettings类:

    @ConfigurationProperties
    public class NestedSettings {
        private String name;
        @NestedConfigurationProperty
        private Jdbc jdbc;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Jdbc getJdbc() {
            return jdbc;
        }
    
        public void setJdbc(Jdbc jdbc) {
            this.jdbc = jdbc;
        }
    
        public static class Jdbc {
            private String username;
            private String password;
    
            public String getUsername() {
                return username;
            }
    
            public void setUsername(String username) {
                this.username = username;
            }
    
            public String getPassword() {
                return password;
            }
    
            public void setPassword(String password) {
                this.password = password;
            }
        }
    }
    

    @EnableConfigurationProperties注解添加NestedSettings.class:

    @SpringBootApplication
    @EnableConfigurationProperties({NestedSettings.class})
    public class App{
    
        public static void main(String args[]){
            SpringApplication.run(App.class);
        }
    }
    

    3、读取自定义配置文件

    假设有一个custom.properties文件:

    c.age=29
    c.msg=hello
    

    SpringBoot 1.5版本之前的做法:

    @ConfigurationProperties(locations = "classpath:custom.properties", prefix = "c")
    public class CustomCSettings{
        private String age;
        private String msg;
    
        public String getAge() {
            return age;
        }
    
        public String getMsg() {
            return msg;
        }
    
        public void setAge(String age) {
            this.age= age;
        }
    
        public void setMsg(String msg) {
            this.msg= msg;
        }
    }
    

    但是现在@ConfigurationProperties已经没有locations这个属性。
    SpringBoot 1.5版本之后可以这样做:

    @Configuration
    @PropertySource("classpath:custom.properties")
    public class CustomCSettings {
        @Autowired
        Environment environment;
    
        public String getAge() {
            return environment.getProperty("c.age");
        }
    
        public String getMsg() {
            return environment.getProperty("c.msg");
        }
    }
    

    源码:https://github.com/quiterr/config-test.git

    相关文章

      网友评论

          本文标题:SpringBoot 外部配置

          本文链接:https://www.haomeiwen.com/subject/zcttgttx.html