Spring Boot配置文件和常见操作

Spring Boot项目发布成jar包

在这里插入图片描述
在idea中通过maven构建Spring Boot项目,可直接使用maven的打包功能进行发布,
在maven project选项卡中运行package即可打包


Spring Boot配置方式

每个starter都有自己默认的配置,如果需要改变默认值,可以在其他地方配置来覆盖掉默认的值,覆盖默认的配置有多种方式,每种方式的优先级也不同,如果在多个地方配置则优先使用优先级高的值,其中命令行参数优先级最高, 其中大部分参数一般都配置在属性文件application.properties中,属性文件即可以覆盖starter中默认的值,也可以自定义值

  1. 在命令行行输入的参数
  2. SPRING_APPLICATION_JSON中的属性。SPRING_APPLICATION_JSON是以json格式配置在系统环境变量中的内容
  3. java:comp/env 里的 JNDI 属性
  4. Java的系统属性,可以通过System.getProperties()获得的内容
  5. 操作系统环境变量
  6. RandomValuePropertySource属性类生成的random.*属性
  7. 位于当前应用jar包之外,针对不同的profile换将的配置文件内容,例如application-{profile}.properties或者yaml定义的配置文件
  8. 位于当前应用jar包之内,针对不同的profile换将的配置文件内容,例如application-{profile}.properties或者yaml定义的配置文件
  9. 位于当前应用jar包之外的application.properties和yaml配置内容
  10. 位于当前应用jar包之内的application.properties和yaml配置内容
  11. 在应用@Configuration配置类中,用@PropertySource注解声明的属性文件
  12. 应用默认属性,SpringApplication.setDefaultProperties声明的默认属性

命令行方式

# 通过使用--server.port属性来设置xxx.jar应用的端口为80 
# --debug启动调试模式,会打印更多日志
java -jar xxx.jar --server.port=80 --debug

应用程序属性文件: application.properties

starter中的配置

#debug模式启动
debug=false

#服务端口80
server.port=80

自定义属性

#自定义属性
default.name=xubo
default.age=22
default.result=姓名${default.name},年龄${default.age}

在配置文件中,可以通过${key}来相互引用,key可以在当前属性文件中也可以在其他属性文件中。
注意:application.properties 配置中文值的时候,读取出来的属性值会出现乱码问题。
但是application.yml不会出现乱码问题。原因是,Spring Boot 是以iso-8859的编码方式读取 application.properties配置文件。

Spring可以通过注解@Value(“${属性名}”)来加载对应的配置属性,然后将属性值赋值给注解对应的实体属性

    @Value("${default.name}")
    private String name;
    @Value("${default.age}")
    private Integer age;

在配置文件中也可以通过random.*来调用RandomValuePropertySource#getRandomValue(String type)方法来随机生成一个值,注意:随机的key不能以random开头,如random.a是不允许的

#随机生成int
default.id=${random.int}
#生成10以内的随机数
default.random1=${random.int(10)}
#生成10-20的随机数
default.random2=${random.int[10,20]}
#随机生成long
default.long=${random.long}
#生成随机字符串
default.str=${random.value}
#生成uuid
default.uuid=${random.uuid}

@ConfigurationProperties(prefix = “xxx”): 配置属性注解,可以指定一个属性的前缀,将配置文件中的key为prefix.属性名的值赋值给对应的属性,这种方式适用于前缀相同的一组值,这样就不用再为每个属性配置@Value(“${prefix.field}”)

@Component
@ConfigurationProperties(prefix = "default")
public class RandomProperties {

    private Integer id;
    private Integer random1;
    private Integer random2;
    private String str;
    private String uuid;
}

自定义配置文件

@Component
@PropertySource("classpath:default.properties")
public class Users {

    @Value("${default.id}")
    private Integer id;
    @Value("${default.name}")
    private String name;
    @Value("${default.age}")
    private Integer age;
}

application.properties虽然也可以定义非starter中的配置,即定义自己的配置,如果把自己的配置也放到这个文件中可能会使得文件很臃肿,可以将自己的配置放在其他属性文件中,这样配置更加集中
在resources中的根目录创建一个default.properties文件
使用@PropertySource来定义属性文件的位置


环境切换
项目中经常有一些参数环境的不同而配置不同的值,如开发环境的数据库配置信息和生产环境的数据库配置信息是不同的,为了了方便环境之间的简单的切换,可以通过profile来实现, Spring Boot中多环境配置文件名需要满足application-{profile}.properties的格式,其中{profile}对应你的环境标识,比如:

  • application-dev.properties:开发环境
  • application-test.properties:测试环境
  • application-prod.properties:生产环境

至于哪个具体的配置文件会被加载,需要在application.properties文件中通过spring.profiles.active属性来设置,其值对应{profile}值
如:spring.profiles.active=test1就会加载application-test1.properties配置文件内容
java -jar xxx.jar --spring.profiles.active=test1


参考文献

Spring Boot入门教程(四):配置文件

猜你喜欢

转载自blog.csdn.net/lolwsyzc/article/details/82998924