SpringBoot-配置文件

前言注解

总结一下注解方式的属性注入,顺便引入一下SpringBoot的注解@ConfigurationProperties

  1. Spring-IOC注解编程一章中了解的@[email protected]注解
user.username=jack
user.password=root
user.hobby[0]=book
user.hobby[1]=music
@Data
@AllArgsConstructor
@NoArgsConstructor
@PropertySource("application.properties")
public class User {
    @Value("${user.username}")
    private String username;
    @Value("${user.password}")
    private String password;
    @Value("${user.hobby[]}")
    private String[] hobby;
    private Address address;
    private List list;
    private Set set;
    private Map map;
    private Properties properties;
}

//这种方式很难注入复杂的引用类型,而且一个个注入太麻烦了
  1. @[email protected]注解
@Data
@Component
//@ConfigurationPropertiesScan
//@ComponentScan(basePackages = "com.ty")
@ConfigurationProperties(prefix = "user")
@ConditionalOnBean(name = "user")

public class User {
    private String username;
    private String password;
    private String[] hobby;
    private Address address;
    private List list;
    private Set set;
    private Map map;
    private Properties properties;
  1. @[email protected]注解
@Data
@ConfigurationProperties(prefix = "user")
@EnableConfigurationProperties(User.class)
public class User {
    private String username;
    private String password;
    private String[] hobby;
    private Address address;
    private List list;
    private Set set;
    private Map map;
    private Properties properties;
}

另外@EnableConfigurationProperties注解不止可以修饰在POJO上,还可以写在应用类上

@SpringBootTest(classes = User.class)
@EnableConfigurationProperties(User.class)
public class TestUser {
    @Autowired
    private User user;

    @Test
    void testUser1() {
        System.out.println(user);
    }
}

ps:如果编写测试程序代码最好跟业务代码相关类的那个包保持相同

​ 比如java下的com.ty.service,测试的时候最后也是建一个相同的包,即:test下的com.ty.service

​ 也可以不相同,这样的话就需要在@SpringBootTest注解上配置上要进行的测试类,而且还需要配置@ComponentScan或者

​ @ConfigurationPropertiesScan注解,用来扫描启动类

再说一下条件装配注解@Conditional,这个注解之前说过是指满足Conditional指定的条件,才会进行组件注入

在SpringBoot对它进行了很多实现

下面就说说配置文件,SpringBoot一共支持2种配置文件,Properties配置和YAML配置,两种配置文件通用,只是展现方式的区别

Properties配置

和以前的properties用法相同,以key = value的方式,不过多赘述!

YAML配置

YAML是“YAML Ain’t Markup Language YAML不是一种标记语言”的外语缩写,但为了强调这种语言以数据做为中心,而不是以置标语言为重点,而用返璞词重新命名。它是一种直观的能够被电脑识别的数据序列化格式,是一个可读性高并且容易被人类阅读,容易和脚本语言交互,用来表达资料序列的编程语言。它是类似于标准通用标记语言的子集XML的数据描述语言,语法比XML简单很多。

基本使用:

  1. 使用key : 空格 value的方式表示

  2. 大小写敏感

  3. 使用缩进表示层级关系

  4. 禁止使用tab缩进,只能使用空格键

  5. 缩进长度没有限制,只要元素对齐就表示这些元素属于一个层级。

  6. 使用#表示注释

  7. 符串可以不用引号标注

  8. 数据格式表示

    • 基本/简单类型:key : value

    • 键值对集合类型:key : {key 1:value1, key 2:value2, key 3:value3}

      • 或者

        key : 
          key 1: value1
          key 2: value2
          key 3: value3
        
    • 数组/集合类型:key: [value1,value2,value3]

      • 或者

        key:
         - value1
         - value2
         - value3
        

举例

首先先导一下依赖,这样配置的时候会有自动提示

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>

<!--打jar包的时候忽略配置提示的相关类-->
<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.springframework.boot</groupId>
                            <artifactId>spring-boot-configuration-processor</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

创建application.yml或者application.yaml

user:
  username: tom
  password: root
  hobby:
    - book
    - "music"
    - 'eat'
  list: [a,b,c,a]
  set:
    - a
    - b
    - c
    - a
  map:
    name:
      james
      tom
    score:
      85
      65
    other: {pet: tomcat,hobby: sing}
  address: [大连,上海,杭州,杭州]
  properties: {book: 西游}

多环境配置

配置文件可以用在多环境配置,实际开发中,同一套代码可能同时部署到开发、测试、生产等多个服务器中,每个环境中诸如数据库密码等这些个性化配置是避免不了的,虽然我们可以通过自动化运维部署的方式使用外部参数在服务启动时临时替换属性值,但这也意味着运维成本增高。

步骤非常简单,直接在resources目录下创建多个配置文件

比如:application-dev.yml、application-test.yml、application-prod.yml、application.yml

然后在其它的配置文件编写对应环境的配置,使用的时候直接在application.yml配置中切换环境

spring:
  profiles:
    active: dev/test/prod
Tags: