Spring Boot怎么配置文件类型的properties格式与yml格式

Spring Boot怎么配置文件类型的properties格式与yml格式

本篇内容介绍了“SpringBoot怎么配置文件类型的properties格式与yml格式”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

Spring

    一 配置文件类型

    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格式”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注恰卡编程网网站,小编将为大家输出更多高质量的实用文章!

    发布于 2022-05-19 10:35:57
    收藏
    分享
    海报
    0 条评论
    23
    上一篇:Django项目怎么配置连接多个数据库 下一篇:C++怎么实现softmax函数
    目录

      0 条评论

      本站已关闭游客评论,请登录或者注册后再评论吧~

      忘记密码?

      图形验证码