SpringBoot 通过属性文件外置配置

在看了官方的一些Demo和网上博客之后,发现关于SpringBoot 通过属性文件外置配置有些眼花缭乱,故写了一个专门的Demo。

本文使用的SpringBoot版本是1.4.5.RELEASE

第一种方式:使用@Value注解直接读取application.properties中配置的属性
Controller:

@RestController
public class UserController {

    @Value("${my.user.name}")
    private String name;

    @GetMapping("/user/name")
    public String getUserName() {
        return name;
    }
}

application.properties:

my.user.name=Richard-陈龙祥

但是该方式无法支持中文,中文会出现乱码,原因是Properties文件最终是使用Java Properties类的load方法读取,该方法使用的编码集是ISO 8859-1,要使用中文需要使用Unicode escapes

第二种方式:使用@Value注解直接读取application.yml中配置的属性
和上述的区别就是将application.properties重命名为application.yml

my.user.name: Richard-陈龙祥

yml文件默认使用UTF-8编码集,可以支持中文

第三种方式:@Value注解目前已经不怎么推荐使用了,SpringBoot提供属性Bean配置的方式
application.yml:

my.book.author: 罗贯中
my.book.name: 三国演义
my.book.price: 60

属性Bean:

@ConfigurationProperties(prefix = "my.book")
public class BookConfig {

    private String name;
    private String author;
    private int price;
    //getter setter
}

Controller:

@RestController
public class BookController {

    @Autowired
    private BookConfig bookConfig;

    @GetMapping("/book")
    public String getBook() {
        return bookConfig.getAuthor() + " " + bookConfig.getName() + "" + bookConfig.getPrice();
    }
}

需要配合@EnableConfigurationProperties注解

@EnableConfigurationProperties({BookConfig.class})
@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

该方式当需要外置配置的属性过多时,将外置配置属性集中的application文件中不够优雅

第四种方式:使用独立的属性文件
my.book.properties:

my.book.author=罗贯中
my.book.name=三国演义
my.book.price=60

属性配置Bean:

@Configuration
@ConfigurationProperties(prefix = "my.book")
@PropertySource(value = "my.book.properties", encoding = "UTF-8")
public class BookConfig {
    private String name;
    private String author;
    private int price;
    //getter setter
}

使用@Configuration和@PropertySource组合的方式,因为@ConfigurationProeprties注解的location属性已经不推荐使用了,此处需要注意的是,若使用中文,需要指定@PropertySource的encoding属性值
而且此时不需要@EnableConfigurationProperties注解配合使用

目前推荐第四种方式,相比较而言比较优雅

具体的代码可以参考SpringBoot-Configuration-Demo 里面都有readme.txt,有具体解释,相信应该足够在一般项目中使用了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值