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 

posted @ 2021-02-04 20:32  琴声清幽  阅读(410)  评论(0编辑  收藏  举报