Spring Boot怎么配置文件类型的properties格式与yml格式
Spring Boot怎么配置文件类型的properties格式与yml格式
本篇内容介绍了“SpringBoot怎么配置文件类型的properties格式与yml格式”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
一 配置文件类型
Spring Boot默认支持properties和yml两种格式的配置文件。yml格式是天然的树状接口,相对于properties,yml更加的一目了然。这也是我们推荐的配置文件格式。
properties 格式举例:
server.port=8090server.session-timeout=30server.tomcat.max-threads=0server.tomcat.uri-encoding=UTF-8spring.datasource.url=jdbc:mysql://localhost:3306/newbirdsspring.datasource.username=rootspring.datasource.password=mymysqlspring.datasource.driverClassName=com.mysql.jdbc.Driverspring.jpa.database=MYSQLspring.jpa.show-sql=truespring.jpa.hibernate.ddl-auto=updatespring.jpa.hibernate.naming-strategy=org.hibernate.cfg.ImprovedNamingStrategyspring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
yml 格式举例:
server:port:8090session-timeout:30tomcat.max-threads:0tomcat.uri-encoding:UTF-8spring:datasource:url:jdbc:mysql://localhost:3306/newbirdsusername:rootpassword:mymysqldriverClassName:com.mysql.jdbc.Driverjpa:database:MYSQLshow-sql:truehibernate:ddl-auto:updatenaming-strategy:org.hibernate.cfg.ImprovedNamingStrategyproperties:hibernate:dialect:org.hibernate.dialect.MySQL5Dialect
二 配置文件
2.1 核心配置文件
Spring Boot默认支持两种核心配置文件:bootstrap.yml(bootstrap.properties)、application.yml(application.properties)。bootsrap先加载。
2.1.1 bootstrap.yml(bootstrap.properties)
bootstrap.yml用于应用程序上文的引导节点,由父Spring ApplicationContext加载。我们可以简单的把bootstrap里面的配置信息理解成系统级别的参数。这些参数轻易是不会改变的。
bootstrap配置文件有以下几个应用场景:
使用Spring Cloud Config的时候,需要将spring.application.name和spring.cloud.config.server.git.uri写入bootstrap.yml。
一些固定的不能被覆盖的属性。
一些加密/解密的场景。会把encryption/decryption(加密/解密)存储在bootstrap.yml里面。
一旦bootStrap.yml 被加载,则内容不会被覆盖,即便后期加载的application.yml的内容标签与bootstrap的标签一致,application 也不会覆盖bootstrap。
2.1.2 application.yml(application.properties)
application.yml是我们用的最多的一个配置文件.一般配置应用级别的配置,比如数据库的连接配置,如果我们用到了redis可能会写一些redis相关的配置等等。
2.2 自定义配置文件
为了不破坏核心文件的原生态,但又需要有自定义的配置信息存在,一般情况下会选择自定义配置文件来放这些自定义信息,比如我们在resource目录下创建一个product.properties文件.
resources/product.properties文件内容如下:
ppid=1000mmid=1ccid=10
三 配置文件读取
3.1 读取核心配置文件信息
读取核心配置文件信息值的是读取bootstrap.yml(bootstrap.properties)、application.yml(application.properties)文件里面的信息.
3.1.1 Environment方式
这种方式是依赖注入Evnironment来完成,在创建的成员变量private Environment env上加上@Autowired注解即可完成依赖注入,然后使用env.getProperty("键名")即可读取出对应的值。比如如下的代码.
application.yml文件里面添加我们自定义的属性:
#自定义的一些属性user:info:name:tuacyage:27
Environment方式读取配置信息:
@RunWith(SpringRunner.class)@SpringBootTest()publicclassPropertiesTest{privateEnvironmentenvironment;@AutowiredpublicvoidsetEnvironment(Environmentenvironment){this.environment=environment;}@Testpublicvoidtest(){Stringname=environment.getProperty("user.info.name");Integerage=environment.getProperty("user.info.age",Integer.class);System.out.println("name="+name+";age="+age);}}
3.1.2 @Value方式
在@Value的${}中包含的是核心配置文件中的键名就可以得到对应的值.
@RunWith(SpringRunner.class)@SpringBootTest()publicclassPropertiesTest{@Value("${user.info.name}")privateStringname;@Value("${user.info.age}")privateintage;@Testpublicvoidtest(){System.out.println("name="+name+";age="+age);}}
3.1.3 @ConfigurationProperties方式
@ConfigurationProperties使用的时候对应的属性类一定要记得加上@Configuration或者在任何一个配置类(推荐启动类上)通过@EnableConfigurationProperties注解指定自定义的属性类.推荐直接在属性类上添加@Configuration注解.
@Configuration@ConfigurationProperties(prefix="user.info")publicclassUserInfo{privateintage;privateStringname;publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}publicintgetAge(){returnage;}publicvoidsetAge(intage){this.age=age;}}
3.2 读取自定义配置文件信息
3.2.1 @PropertySource + @Value
@PropertySource + @Value使用于读取property根式配置文件的信息.@PropertySource指定配置文件路径和编码格式,@Value指定配置文件里面的key值.
自定义的配置文件 product.properties:
ppid=1000mmid=1ccid=10
对应的读取方式:
@Configuration@PropertySource(value="classpath:product.properties",encoding="utf-8")publicclassProductInfo{@Value("${ppid}")privateintpid;@Value("${mmid}")privateintmid;@Value("${ccid}")privateintcid;publicintgetPid(){returnpid;}publicvoidsetPid(intpid){this.pid=pid;}publicintgetMid(){returnmid;}publicvoidsetMid(intmid){this.mid=mid;}publicintgetCid(){returncid;}publicvoidsetCid(intcid){this.cid=cid;}}
3.2.2 @ConfigurationProperties + @PropertySource + @Value
@ConfigurationProperties + @PropertySource + @Value适用于读取yml格式配置文件信息.@PropertySource指定配置文件路径和编码格式,@ConfigurationProperties和@Value指定配置文件里面的key值.
配置文件:
admin:user:name:tuacyage:25
对应配置文件的读取方式:
@Configuration@PropertySource(value="classpath:role.yml")@ConfigurationProperties(prefix="admin.user")publicclassRoleUserInfo{@Value("${name}")privateStringname;@Value("${age}")privateintage;publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}publicintgetAge(){returnage;}publicvoidsetAge(intage){this.age=age;}}
四 配置文件的加载顺序
优先级由高到底,高优先级的配置会覆盖低优先级的配置,
全部加载配置文件并互补配置.
4.1 项目内部配置文件加载顺序
SpringBoot配置文件可以放置在多种路径下,不同路径下的配置优先级有所不同。可放置目录(优先级从高到低)
当前项目根目录下的config目录下。
当前项目根目录下。
resources目录下的config目录下。
resource目录下。
4.2 项目外部配置文件加载顺序
优先级由高到低:
命令行参数
来自java:comp/env的JNDI属性
Java系统属性(System.getProperties())
操作系统环境变量
RandomValuePropertySource配置的random.*属性值
jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置文件
jar包内部的application-{profile}.properties或application.yml(带spring.profile)配置文件
jar包外部的application.properties或application.yml(不带spring.profile)配置文件
jar包内部的application.properties或application.yml(不带spring.profile)配置文件
@Configuration注解类上的@PropertySource
通过SpringApplication.setDefaultProperties指定的默认属性
“SpringBoot怎么配置文件类型的properties格式与yml格式”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注恰卡编程网网站,小编将为大家输出更多高质量的实用文章!
推荐阅读
-
Spring Boot条件注解怎么用
-
Java properties文件里怎么写"\"
-
Springboot怎么指定获取配置properties文件的值
-
Springboot怎么指定获取出yml文件里的配置值
-
Spring Boot怎么实现请求参数校验
-
如何使用Spring Boot整合Fisco Bcos
-
Java的SpringBoot多模块怎么开发
-
Spring Boot中如何读取配置
SpringBoot中如何读取配置这篇文章主要为大家展示了“Sp...
-
Java Spring Boot框架面试题有哪些
JavaSpringBoot框架面试题有哪些本篇内容介绍了“J...
-
怎么在Spring boot中使用Junit进行单体测试
这篇文章给大家介绍怎么在Springboot中使用Junit进行单体测试,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家...