Spring Boot 系列 | 第二篇:配置文件相关知识

Spring Boot 系列 | 第二篇配置:文件相关知识

本文不算原创(参考了网上相关博客资料),也不做任何声明,仅仅是作为笔者的笔记记录。

本篇分为以下几点进行记录:

  • 项目默认属性
  • 自定义属性
  • 属性之间参数引用
  • 随机值
  • 自定义配置文件
  • 运行时指定属性值
  • 多环境配置

项目默认属性

在观察项目结构的时候可以发现,在resources文件夹会默认生成一个applicaiton.properties文件,这个文件是新建项目时自动生成的,如果没有生成可以自己创建。Spring Boot支持properties格式的配置同时也支持yml格式的配置文件。个人习惯用properties格式。

项目默认的属相还是需要设置一下的,比如启动的端口号,项目的上下文位置,比如一些tomcat的相关配置

在application.properties中添加以下配置可以指定端口号和上下文路径

#指定端口号
server.port=8080
#指定上下文路径
server.context-path=/demo

比如配置了以上信息之后,访问路径就变为:http://localhost:8080/demo/xxx

自定义属性

通常我们可以自定义一些属性,比如我们在application.properties中添加:

com.demo.name=wang
com.demo.age=12

当我们需要使用这些属性的时候可以通过@Value("${key}")这样的形式来获取,比如我在HelloController中需要这两个属性

@RestController
public class HelloController {

    @Value("${com.demo.name}")
    String name;

    @Value("${com.demo.age}")
    String age;

    @RequestMapping("/")
    public String index() {
        return name + ":" + age;
    }
}

运行,这时在浏览器中输入http://localhost:8080/demo/即可看到输出wang:12

另一种读取配置的方式为:将配置属性绑定到bean中
如下:

@Component
@ConfigurationProperties(prefix = "com.demo")
public class ConfigBean {
    private String name;
    private String age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }
}

然后再修改HelloController

@RestController
public class HelloController {

    @Autowired
    ConfigBean configBean;

    @RequestMapping(value = "/")
    public String index() {
        return configBean.getName() + ":" + configBean.getAge();
    }

}

运行,这时在浏览器中输入http://localhost:8080/demo/即可看到输出wang:12

属性之间相互引用

属性之间也可以相互引用,使用 ${key},比如在properties中添加:

com.demo.info=${com.demo.name}的年龄是${com.demo.age}

修改HelloController:

@RestController
public class HelloController {

    @Value("${com.demo.name}")
    String name;

    @Value("${com.demo.age}")
    String age;

    @Value("${com.demo.info}")
    String info;

    @RequestMapping("/")
    public String index() {
        return info;
    }

}

运行,这时在浏览器中输入http://localhost:8080/demo/看到输出是乱码的。
在我这个Mac IDEA 中需要按照以下步骤设置即可解决乱码:

  • File -> Settings -> Editor -> File Encodings
  • Properties Files (*.properties)下的Default encoding for properties files设置为UTF-8,将Transparent native-to-ascii conversion前的勾选上。

再次运行,此时可以看到输出为:wang的年龄是12

随机值

有时候可能会需要在配置文件中使用随机值,Spring Boot,在配置文件中,支持使用${random}来产生随机值

#随机字符串
com.demo.value=${random.value}
#int
com.demo.int=${random.int}、
#long
com.demo.long=${random.long}
#10以内随机数
com.demo.num1=${random.int(10)}
#5-10随机数
com.demo.num2=${random.int[5-10]}

自定义配置文件

有时候可能我们并不想把所有的配置都写在application.properties中.那我们可以自己建立properties文件,在resources文件夹中,可以创建目录。

我们把上面所用到的属性移到resources下的test.properties中,则ConfigBean需要改成这样:

@Component
@ConfigurationProperties(prefix = "com.demo")
@PropertySource("classpath:test.properties")
public class ConfigBean {
    private String name;
    private String age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }
}

需要添加一个@PropertySource注解来指定读取哪个配置文件.

运行时指定属性值

通常情况下,我们在IDEA开发的时候直接点击类然后点击run就可以了,但是在部署到服务器之后,则需要将项目打包,然后在运行。

在终端(我直接使用IDEA的Terminal),先去到项目中的路径,然后输入mvn clean package进行打包。

注意:如果是按照我的项目中步骤来做的话打包会失败,因为之前编写过的测试期望 “/”路径返回的字符串是:Greetings from Spring Boot!,但是现在已经改了返回值了,所以单元测试不通过导致构建失败,把测试方法内容注释掉再次打包即可。或者打包的命令后面添加参数:-Dmaven.test.skip=true来指定跳过单元测试

构建完成后你会发现在项目中的target目录会生成一个jar

运行这个jar包:

java -jar demo-0.0.1-SNAPSHOT.jar

这个时候就可以把项目跑起来了,此时我们可以指定某些属性。

java -jar java -jar xx.jar --server.port=9090

这个时候你会发现项目运行绑定的端口变为9090了。这里指定的参数会覆盖properties中的配置。
如果觉得这样会有风险,也可以调用以下代码禁用运行时参数功能:

SpringApplication.setAddCommandLineProperties(false)

多环境配置

通常经常下,在开发的时候,我们可能会在开发环境/测试环境/正式环境。而且这些环境所需要的参数是不一样的。所以这个时候就可以使用多环境配置了。

多环境配置的方式为:

  • application.properties配置通用的内容。
  • application-{profile}.peoperties 配置指定环境的内容。

比如我有3个环境,开发/测试/生产

则可以创建3个文件:

  • application-dev.properties
  • application-staging.properties
  • application-produce.properties

如果使用?

有两种方式:

  • 在默认的application.properties中配置属性spring.profiles.active={profile}
  • 在运行时指定参数 –spring.profiles.active={profile}

    这样就可以读取对应环境的参数了。

总结

此篇整理了大部分Spring Boot配置相关的知识,可能有部分遗漏

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值