跟我学SpringBoot之配置常见用法

只需低头努力,剩下的交给时光,时间会公平地帮你处理一切

配置基本用法

application.yml

book:
  name: "Java"

@Value注解可以直接取配置的值

@RestController
@EnableAutoConfiguration
public class ConfigurationDemo {

    @Value("${book.name}")
    private String bookName;

    @RequestMapping("/config")
    public String config(){
        return bookName;
    }

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

启动程序,访问:localhost:8080/config,显示上显示

Java

这应该是配置最基础的用法了

不同的环境配置

一般在实际开发过程中,我们都会根据不同的环境来读取不同的配置文件

比如,我们要配置一个文件上传的目录,在本地开发环境可能是Windows下的D:\upload目录

在生产Linux环境可能是/home/admin/upload目录,针对这种不同的环境需要不同的配置,我们一般是根据环境来分配置文件

比如,开发环境的配置文件是application-dev.yml,生产环境的配置文件是application-prod.yml

在项目启动时,可以选择性的激活不同的配置文件,达到不同环境配置隔离的效果

application-dev.yml

file:
  upload: D:\upload

application-prod.yml

file:
  upload: /home/admin/upload

命令行参数

java -jar springBoot-demo-1.0-SNAPSHOT.jar --spring.profiles.active=prod

可以在项目启动的时候,增加命令行参数,命令行参数的优先级比配置文件高

命令行还支持json格式参数,用的不多,了解一下就行

java -jar springBoot-demo-1.0-SNAPSHOT.jar -Dspring.application.json='{"file":{"upload":"user/upload"}}'

自定义配置文件名称

我们项目中默认都是取的application.yml或application.properties文件中的配置

如果不想使用application作为配置文件的名称,可以进行自定义读取的配置名称,只需要指定spring.config.name就行了,如下

java -jar springBoot-demo-1.0-SNAPSHOT.jar --spring.config.name=myconfig

注意,你指定了myconfig为配置文件的名称,项目就不会再读取application配置了

导入配置

有时我们有多个配置文件,可以组织到一起,使用import来进行配置的导入

classpath形式导入

spring:
  config:
    import: classpath:my-dev.yml

my-dev.yml

myconfig:
  import:
    name: "yml import config"

file形式导入

spring:
  config:
    import: file:E:\\workspace\\springBoot-demo\\src\\main\\resources\\dev.properties

dev.properties

myconfig.import.name = "properties import config"

可以看到,不管是yml配置文件还是properties配置文件,都可以被spring.config.import导入

占位符配置

配置文件中,可以获取到配置中属性的引用,直接使用${property}占位符进行引用即可,如下

spring:
  app:
    name: "springboot-demo"
    descript: "${spring.app.name} is a springboot application"
    @Value("${spring.app.descript}")
    public String descript;

    @RequestMapping("/descript")
    public String getDescript(){
        return descript;
    }

访问http://localhost:8080/descript 页面上会显示springboot-demo is a springboot application

配置随机数

springboot内置了随机数的取值方式,可以直接在配置中使用random取出来作为应用的配置项

rand:
  number: ${random.value}
  intNumber: ${random.int}
  longNumber: ${random.long}
  uuid: ${random.uuid}
    @Value("${rand.uuid}")
    public String randomValue;
    
    @RequestMapping("/random")
    public String getRandom(){
        return c;
    }

@ConfigurationProperties

有时候使用@Value(’${property}’)注解获取属性值显得比较麻烦,尤其是当我需要配置多个属性值或者配置本身需要分层级时,就显得很麻烦

@ConfigurationProperties注解可以将属性绑定到JavaBean的属性上

最常见的应用就是我们的数据库连接配置

jdbc:
  connection:
    url: "jdbc:mysql://localhost:3306/testdb"
    username: "root"
    passwrod: "123456"
    driver: "com.mysql.jdbc.Driver"

新增一个Bean

@ConfigurationProperties(prefix = "jdbc.connection")
@Configuration
public class DataSource {
    private String url;
    private String username;
    private String password;
    private String driver;

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    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;
    }

    public String getDriver() {
        return driver;
    }

    public void setDriver(String driver) {
        this.driver = driver;
    }
}

    @Autowired
    private DataSource dataSource;
    
    @RequestMapping("/datasource")
    public String getDataSourceUrl(){
        return dataSource.getUrl();
    }

启动项目,访问http://localhost:8080/datasource 页面上显示jdbc:mysql://localhost:3306/testdb

可以看到@ConfigurationProperties注解将application.yml中的属性配置自动绑定到DataSource的属性上

当然,前提是两边的属性名称要对上,其实两边的属性名称不需要完全对上

比如配置名user_name、user-name都可以绑定到username属性上,这就是relaxed binding,但还是建议两边的属性名最好保持一致,不要给自己找麻烦

其次,就是prefix配置的层级一定要对上才行

以上就是SpringBoot中配置的几种常用的做法,当然还有很多其他配置的用法比较不常用,这里就不多做介绍

如果有兴趣可以去看一下springboot的官方文档

源码已上传至https://github.com/pzjtian/springboot-demo,请持续关注~

如果感觉对你有些帮忙,请收藏好,你的关注和点赞是对我最大的鼓励!
如果想跟我一起学习,坚信技术改变世界,请关注【Java天堂】公众号,我会定期分享自己的学习成果,第一时间推送给您

在这里插入图片描述

posted @ 2021-02-28 21:16  果子爸聊技术  阅读(23)  评论(0)    收藏  举报