【Java开发】之配置文件的读取

目录

  • 一、使用 @Value 读取注入值
    • 1、注入普通值
    • 2、注入 Map
    • 3、注入数组
    • 4、注入 List
    • 5、注意事项
  • 二、使用 @ConfigurationProperties 读取
    • 1、注入普通值
    • 2、注入 Map
    • 3、注入数组和 List
    • 4、注入对象
    • 5、注意事项

一、使用 @Value 读取注入值


1、注入普通值

Yaml 配置文件:

user:
  username: Andy
  password: 123456

Java 代码注入:

@Data
@Component
public class UserProperties {

    @Value("${user.username}")
    private String username;

    @Value("${user.password}")
    private String password;

}

默认值:

如果要注入的配置不存在时,就会报错,这时,我们可以为要注入的配置提供一个默认值:

@Data
@Component
public class UserProperties {

    @Value("${user.password:123456}")
    private String password;

}

默认值的使用方法为:在需要读取的配置名称后面添加 : ,然后紧跟默认值。

2、注入 Map

Yaml 配置文件:

user:
  account: "{username: 'Andy', password: '123456'}"

Java 代码注入:

@Data
@Component
public class UserProperties {

    @Value("#{${user.account}}")
    private Map<String, String> account;

}

注意: Yaml 配置文件中的 map 值需要使用 "" 包裹起来,里面的 value 值如果是字符串可以使用 '' 括起来。

3、注入数组

Yaml 配置文件:

user:
  list: Andy,Bob,Marry

Java 代码注入:

@Data
@Component
public class UserProperties {

    @Value("${user.list}")
    private String[] list;

}

注意: 数组默认自动以 , 分隔值列表。

4、注入 List

Yaml 配置文件:

user:
  list: Andy,Bob,Marry

Java 代码注入:

@Data
@Component
public class UserProperties {

    @Value("${user.list}")
    private List<String> list;

}

注意: List 默认自动以 , 分隔值列表,如果需要使用其他分隔符的话,就需要使用 SPEL 表达式进行注入了:

Yaml 配置文件:

user:
  list: Andy|Bob|Marry

Java 代码注入:

@Data
@Component
public class UserProperties {

    @Value("#{'${user.list}'.split('\\|')}")
    private List<String> list;

}

5、注意事项

  • 1、@Value 修饰的变量不能是 finalstatic 类型;
  • 2、类要交给 Spring 管理,可以使用 @Component 修饰所在的类;
  • 3、使用时,不能通过 new 来构建这个类,需要使用 @Autowired 来注入。

二、使用 @ConfigurationProperties 读取注入值


1、注入普通值

Yaml 配置文件:

user:
  username: Andy
  password: 123456

Java 代码注入:

@Data
@Component
@ConfigurationProperties(prefix = "user")
public class UserProperties {

    private String username;

    private String password;

}

注意: 变量名称需要和配置文件的配置名称对应。

2、注入 Map

Yaml 配置文件:

user:
  map: {username: 'Andy', password: '123456'}

Java 代码注入:

@Data
@Component
@ConfigurationProperties(prefix = "user")
public class UserProperties {

    private Map<String, String> map;

}

注意: 配置文件中的 map 值不能使用 "" 进行包括(可以和 @Value 做对比)。

3、注入数组和 List

Yaml 配置文件:

user:
  list:
    - Andy
    - Bob
    - Marry

Java 代码注入数组:

@Data
@Component
@ConfigurationProperties(prefix = "user")
public class UserProperties {

    private String[] list;

}

注入 List 和注入数组类似,将数组类型更改为 List 类型即可:

@Data
@Component
@ConfigurationProperties(prefix = "user")
public class UserProperties {

    private List<String> list;

}

4、注入对象

Yaml 配置文件:

user:
  username: Andy
  password: 123456
  info:
    age: 18
    sex: man

Java 代码注入:

@Data
@Component
@ConfigurationProperties(prefix = "user")
public class UserProperties {

    private String username;

    private String password;

    @NestedConfigurationProperty
    private Information info;

    @Getter
    @Setter
    public static class Information {

        private Integer age;

        private String sex;

    }

}

注意:

  • 对象的注入只需要变量名称和配置文件中的配置名称对应即可,对象的类名随意;
  • 对象的注入可以使用 @NestedConfigurationProperty 注解表明改属性是内嵌的对象属性,但并不是必须的,可用可无,即使没有可以注入进去。

5、注意事项

  • 想要 @ConfigurationProperties 注解生效,需要在配置类中添加 @Component 注解,将其添加到 SpringBean 容器管理当中,并且属性类需要在 @SpringBootApplication 注解的包扫描路径当中 scanBasePackages = { "xxxx"}
  • 如果不使用 @Component 注解的话,就需要在启动类中添加 @EnableConfigurationProperties 注解,然后将配置类的类名添加进去:@EnableConfigurationProperties({xxx.class})

你可能感兴趣的:(Java,java,spring)