为了账号安全,请及时绑定邮箱和手机立即绑定

(七)SpringBoot2.0基础篇- application.properties属性文件的解析及获取

标签:
Java SpringBoot

注:由于测试代码较多,影响查看效果,所以只放了核心代码,如需查看,请点示例代码

  1. 默认访问的属性文件为application.properties文件,可在启动项目参数中指定spring.config.location的参数:

    java -jar myproject.jar --spring.config.location=classpath:/default.properties,classpath:/override.properties

    参考官方文档:https://docs.spring.io/spring-boot/docs/2.0.2.RELEASE/reference/htmlsingle/#boot-features-external-config-application-property-files

  2. 使用@PropertySource来获取配置文件的中属性值(注意:在使用该注解时,属性文件必须为properties文件,yaml文件不可用):

    复制代码

    @Configuration
    @PropertySource("classpath:/app.properties")public class AppConfig {
    
        @Autowired
        Environment env;
    
        @Bean    public TestBean testBean() {
            TestBean testBean = new TestBean();
            testBean.setName(env.getProperty("testbean.name"));        return testBean;
        }   
    }

    复制代码

    参考官方文档:https://docs.spring.io/spring/docs/5.0.6.RELEASE/javadoc-api/org/springframework/context/annotation/PropertySource.html

  3. 使用@Value注解直接将属性值注入进修饰对对象中:

    复制代码

    import org.springframework.stereotype.*;import org.springframework.beans.factory.annotation.*;
    
    @Componentpublic class MyBean {
    
        @Value("${name}")    private String name;    // ...}

    复制代码

    参考官方文档:https://docs.spring.io/spring-boot/docs/2.0.2.RELEASE/reference/htmlsingle/#boot-features-external-config

  4. 使用@ConfigurationProperties(prefix="my")将属性值注入进对象,可以注入对象的属性key的对象,也可以注入进List或Set中,但是属性的书写需要有规范:

    my.servers0=dev.example.com
    my.servers1=another.example.com

    使用方式

    复制代码

    @ConfigurationProperties(prefix="my")public class Config {    //set,list不需要Setter方法
        private List<String> servers = new ArrayList<String>();    public List<String> getServers() {        return this.servers;
        }
    }

    复制代码

    参考官方文档:https://docs.spring.io/spring-boot/docs/2.0.2.RELEASE/reference/htmlsingle/#boot-features-external-config-loading-yaml

  5. 可以使用yaml文件格式来替换properties,属性获取方式不变(注:yaml文件后缀名为.yml)

  6. 使用POJO方式直接将属性注入进实体对象中:

    application.yml

    复制代码

    acme:
        remote-address: 192.168.1.1
        security:
            username: admin
            password: admincss
            roles:            - USER            - ADMIN

    复制代码

    AcmeProperties.java

    复制代码

    package com.example;import java.net.InetAddress;import java.util.ArrayList;import java.util.Collections;import java.util.List;import org.springframework.boot.context.properties.ConfigurationProperties;
    
    @ConfigurationProperties("acme")public class AcmeProperties {    private InetAddress remoteAddress;    private final Security security = new Security();    public InetAddress getRemoteAddress() { ... }    public void setRemoteAddress(InetAddress remoteAddress) { ... }    public Security getSecurity() { ... }    public static class Security {        private String username;        private String password;        private List<String> roles = new ArrayList<>(Collections.singleton("USER"));        public String getUsername() { ... }        public void setUsername(String username) { ... }        public String getPassword() { ... }        public void setPassword(String password) { ... }        public List<String> getRoles() { ... }        public void setRoles(List<String> roles) { ... }
    
        }
    }

    复制代码

 

参考文档:https://docs.spring.io/spring-boot/docs/2.0.2.RELEASE/reference/htmlsingle/#boot-features-external-config-typesafe-configuration-properties

代码示例:https://gitee.com/lfalex/spring-boot-example/tree/dev/spring-boot-properties

原文出处

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消