SpringBoot中通过注解获取properties文件中的值

开发平台:IntelliJ IDEA 2019.2 x64企业版

框架:Spring Boot 2.0.6.RELEASE

JDK:1.8

项目结构:

我测试用的是application-test.properties这个文件,因为项目启动时不会自动加载这个文件,所以在启动类里手动加上,代码如下:

@PropertySource(value = "classpath:application-test.properties")// 手动加载文件
@SpringBootApplication
public class TestApplication {
    private static final Logger logger = LoggerFactory.getLogger(TestApplication.class);
    public static void main(String[] args) {
        SpringApplication.run(TestApplication.class, args);
        logger.info("========== 测试项目启动成功 ========");
    }
}

测试的文件中内容为:

jason.test.date=2019-10-06
jason.test.address=shanghai哈哈哈
jason.test.person=chengHoll.wang
jason.test.do-what= play games

email.ip=172.0.0.1
email.account=1320194169@qq.com
email.password=123456
test-platform=qq

项目启动时会加载这个文件,把里面的内容以key-value的形式存进map中。

读取properties文件中值方法很多,这里主要介绍通过注解的方式获取的。

方式一:通过注解@ConfigurationProperties

代码:

@ConfigurationProperties(prefix = "jason.test")
@Component
public class PropertiesValue {
    private String date;
    private String address;
    private String person;
    private String doWhat;

//省略get/set方法,get/set方法是必须有的
}

此注解会自动读取配置文件中以jason.test开头的变量名,也就是key。后面的内容(如:date,address,person,do-what)会自动按照驼峰规则去匹配我们类里面的成员变量。do-what对应daWhat。注意:@Component不能少了。

使用如下:

@RestController
@RequestMapping("/properties")
public class PropertiesController {
    @Autowired
    private PropertiesValue propertiesValue;

    @RequestMapping("/test1")
    public String test1(){
        return propertiesValue.toString();
    }
}

浏览器输出:

方式二:通过注解@Value

此注解比较简单,代码如下:

@Component
public class PropertiesValueNoPrefix {
    @Value("${email.ip}")
    private String ip;

    @Value("${email.account}")
    private String account;

    @Value("${email.password}")
    private String password;

    @Value("${test-platform}")
    private String platform;

// 省略get/set方法,这里get/set方法可以没有,我这里是为了在别的地方可以调用成员变量

}

使用如下:

@RestController
@RequestMapping("/properties")
public class PropertiesController {

    @Autowired
    private PropertiesValueNoPrefix propertiesValueNoPrefix;

    @RequestMapping("/test2")
    public String test2() {
        return propertiesValueNoPrefix.toString();
    }
}

浏览器输出:

也可以直接在需要使用的地方通过这个注解获取值,如下:

@RestController
@RequestMapping("/properties")
public class PropertiesController {
    
    @Value("${email.ip}")
    private String ip;
    @Value("${email.account}")
    private String account;
    @Value("${email.password}")
    private String password;
    @Value("${test-platform}")
    private String platform;

 @RequestMapping("/test3")
    public String test3() {
        return ip + " " + account + " " + password + " " + platform;
    }
}

浏览器输出:

注意:有些情况需要我们采用默认配置值

例如配置文件:

jason.test.date=2019-10-06
jason.test.address=shanghai哈哈哈
jason.test.person=chengHoll.wang
jason.test.do-what=what to do

java代码:

@ConfigurationProperties(prefix = "jason.test")
@Component
public class PropertiesValue {
    private String date;
    private String address;
    private String person;
    private String doWhat = "play games";

//省略get/set方法,get/set方法是必须有的
}

这个时候如果配置文件中没有jason.test.do-what这个配置,则doWhat的值就是"play games",如果有这个配置项,则doWhat的值就是"what to do"。同样还有下面这种方式:

配置文件:

test.count=10

java代码:

@RestController
@RequestMapping("/properties")
public class PropertiesController {
    
    @Value("${test.count:200}")
    private String count;

 @RequestMapping("/count")
    public String test4() {
        return count;
    }
}

如果配置文件中没有test.count这个配置项,则count的值是200,如果有的话,count的值就是配置的值:10

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值