zoukankan      html  css  js  c++  java
  • springboot 两种配置文件,application.properties ,application.yml ,注入值的两种方式,主动@ConfigurationProperties与被动@value,和其他注解Conditional,PropertySource

    两种配置可以互补,yml的优先级高于properties。

    常用的是 prefix,前缀的声明。 @ConfigurationProperties注解里面的。

    在注解中,如果一个类,上面声明了 @ConfigurationProperties(prefix = "studuent"),则在application.properties中,以student开头的字段,会自动注入到本类中

    @ConfigurationProperties,既可以用在配置类上,也可用在bean上。

    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    @ToString
    //@Component
    @ConfigurationProperties(prefix = "user")
    public class User {
    
        private Integer id;
        private String name;
        private String address;
    
    }
    @Configuration
    public class UserConfig {
    
        @Bean
        @ConfigurationProperties(prefix = "user")
        public User user() {
            return new User(1,"xiaoming","beijing" );
        }
    }

     application.properties

    在pom文件中,alt + 反斜线,调出edit starts

    然后选择spring-boot-configuration-processor,可以帮助在配置文件中,出现提示。如输入user,点,会提示id,name等等

    server.port=80
    user.id = 11111
    user.name=xiaoming
    user.user-name = liming // 如果有驼峰,自动改为中杠
    user.hobby=LOL,DNF,GAME //数组
    user.lists=GAME,BOOK,EAT //list 起的名字是lists,非必须是lists
    user.maps.k1=v1 //map
    user.maps.k2=v2
    user.sets=LOL,DNF,LOL,DNF //set
    #user.birth.time = 111111123423434
    user.birth = 2021/2/4 20:28:30 //日期

    另外的一个配置文件 application.yml 

    他的优先级比properties的高,因为是后加载的原因

    如果在更改了配置文件,不起作用的情况下,查看maven的信息,可能爆红,需要更新一下maven

    Execution default-resources of goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources failed. (org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources:default-resources:process-resources)
    
    org.apache.maven.plugin.PluginExecutionException: Execution default-resources of goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources failed.

    注意在冒号后,有空格。如果颜色提示异常,注意检查格式。

    server:
      port: 9999
    user:
      address: xxtt
      hobby:
      - LOZ
      - LO
      - DNF
      birth:
        2020/2/4 22:10:9
      sets:
      - gaoset1
      - gaoset2
      - gaoset1
      lists:
      - list1
      - list2
      maps:
        k1: v1
        k2: v2      //注意冒号后有空格

    支持占位符

    user:
      address: xxtt
      # id: ${random.int}
      id: ${random.int(1,100)}    //可以中括号或者小括号
      hobby:
        - LOZ
        - LO
        - DNF
        - ${user.address}

        - ${a}

    a: aaaaa

     -------------------------------

    主动注入@value,

    在appllication.properties文件中

    server.port=8111
    user.id=555

    在bean中,取消掉主动注入@ConfigurationProperties

    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    @Component
    //@ConfigurationProperties(prefix = "user")
    public class User {
    
        @Value("${user.id}")
        private Integer id;

    也支持random等表达式,但不支持高级属性,如数组,集合,列表等

    如果是驼峰命名,需要用中杠线

     支持el表达式,即以#开头,而不是$开头。

    另外的重要注解

    @PropertySource("classpath:student.properties") ,

    如果properties的名字不是默认名字的情况下,引入配置文件。此例中位置和默认的并排位置,可以加载在类或者启动入口都可以,只要是容器能扫描到的地方都可以。如果互存的情况下,系统默认的要高于自定义的配置文件

    @ImportResource(value={"classpath:beans.xml"})

    用来引入系统中的xml配置文件。位置在启动类,或者被容器创建的类上。不能在原始bean类上。

    @Bean 和 @Qualifier,一起用,@Bean需要指明value,如@Bean("teacher1")

    @Profile(value=“dev”),当存在多个配置文件时,指定哪一个为当前配置文件

    如application-dev.properties

    在 application.properties 中,输入 debug = true  可以查看哪些配置类是否生效

    ---------------------

    Conditional  注解,提示满足什么条件

    如:

    ConditionalOnJava

    ConditionalOnBean(value={xxx.class})

    @ConditionalOnClass

    @ConditionalOnMissingClass

    @ConditionalOnProperty  系统中指定的属性是否有指定的值

    @ConditionalOnWebApplication 

    @ConditionalOnNotWebApplication 

  • 相关阅读:
    运算符的方向--好神奇
    a++ 和 ++a ;
    c语言中!和~的区别
    函数的参数,参数为数组
    反射的理解
    ThreadLocal类
    多线程面试题-sleep()和wait()区别
    话题1-关键字
    实现多线程的另一种方式-Callable
    线程池
  • 原文地址:https://www.cnblogs.com/sdgtxuyong/p/14374838.html
Copyright © 2011-2022 走看看