Springboot自定义配置类

1. 简介

在开发过程中需要将一些可配置的东西抽出来放到配置文件中统一管理,即方便开发也方便统一管理,抽取到配置文件中的配置内容是需要读取出来在程序中使用的,下面介绍几种获取配置的方式。

2. @Value方式获取参数

在Spring程序中是可以通过@Value注解来获取配置文件中的参数的。

@Value("${my.config.name}")
private String name;
@Value("${my.config.age}")
private Integer age;

还可以指定默认值,如果配置项没有在配置文件中配置时,就会使用默认值。

@Value("${my.config.name:张三}")
private String name;

3. 自定义配置类

当一组有关系的配置项或者数据在一起时,或者配置数据很多时,使用@Value的方式会比较麻烦,每一个需要的地方都需要重复的使用@Value进行读取配置。所以这时我们需要使用自定义配置类来将一组数据封装到一个实体类中。

3.1 定义一个配置类

@Data
@Slf4j
@Configuration
@ConfigurationProperties(prefix = "my.config")
public class MyConfigProperties {
    private String name;
    private String address;
    private Integer age;
    private List<String> interest;
    private Map<String, Integer> exam;
    private List<Role> roles;

    @Data
    public static class Role {
        private Integer roleId;
        private String roleName;
    }
}

以上配置类配置了字符串类型、整型、集合、Map、对象多种类型的配置。考虑到了常用的几种情况

3.2 yml配置文件定义属性

根据配置类在配置文件中配置属性

my.config:
  name: "张三2"
  address: "北京"
  age: 18
  interest:
    - 打球
    - 旅游
  exam:
    "期中": 100
    "期末": 100
  roles:
    - roleId: 1
      roleName: 子女
    - roleId: 2
      roleName: 学生

3.3 properties配置文件定义属性

如果是properties配置文件,则配置方式如下:

my.config.name="张三1"
my.config.address="北京"
my.config.age=18
my.config.interest[0]="打球"
my.config.interest[1]="旅游"

my.config.roles[0].roleId=1
my.config.roles[0].roleName="学生"

my.config.exam["期中"]=100
my.config.exam["期末"]=100

3.4 使用配置类

在需要使用配置类的地方,直接注入即可。

@Autowired
private MyConfigProperties myConfigProperties;

4. 配置文件编码问题

springboot在读取.properties配置文件时会出现乱码的问题,读取application.properties文件时,编码默认是ISO-8859-1,所以直接配置中文一定会乱码。而yml配置文件则是以UTF-8加载,则不会出现乱码的问题。
所以如果想解决乱码的问题可以直接使用yml配置文件进行配置,或者使用自定义的properties配置文件,同时在配置类上使用@PropertySource注解指定读取的配置文件以及编码类型加载。

@Data
@Slf4j
@Configuration
@PropertySource(value = "classpath:application-config.properties", encoding = "UTF-8")
@ConfigurationProperties(prefix = "my.config")
public class MyConfigProperties {
    private String name;
    private String address;
    private Integer age;
    private List<String> interest;
    private Map<String, Integer> exam;
    private List<Role> roles;

    @Data
    public static class Role {
        private Integer roleId;
        private String roleName;
    }
}

或者对乱码的数据进行编解码重读,例如name字段数据乱码了,则可以通过以下方式重新读取name的UTF-8的值:

System.out.println(new String(name.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8));

5. 总结

在开发时使用自动配置类是非常方便的一种手段,可以方便的将数据进行统一注入。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot是一个用于构建独立的、生产级别的Spring应用程序的框架。它提供了许多便捷的功能和特性,其中包括自定义注解配置。 在Spring Boot中,我们可以通过自定义注解来实现一些特定的配置。下面是一个简单的示例来介绍如何自定义注解配置: 1. 首先,创建一个自定义注解,使用`@interface`关键字来定义注解。例如,我们创建一个名为`@CustomAnnotation`的注解: ```java import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) public @interface CustomAnnotation { String value() default ""; } ``` 2. 在需要使用该注解的上添加注解。例如,我们创建一个名为`CustomClass`的,并在上添加`@CustomAnnotation`注解: ```java @CustomAnnotation("customValue") public class CustomClass { // 的具体实现 } ``` 3. 在Spring Boot配置中,使用`@ComponentScan`注解来扫描带有自定义注解的,并进行相应的配置。例如: ```java @SpringBootApplication @ComponentScan(basePackages = "com.example") public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` 4. 在需要使用自定义注解的地方,可以通过反射获取注解的值,并进行相应的处理。例如,在某个Service中使用自定义注解: ```java @Service public class CustomService { @Autowired private ApplicationContext applicationContext; public void processCustomAnnotation() { Map<String, Object> customBeans = applicationContext.getBeansWithAnnotation(CustomAnnotation.class); for (Object bean : customBeans.values()) { CustomAnnotation customAnnotation = bean.getClass().getAnnotation(CustomAnnotation.class); String value = customAnnotation.value(); // 处理自定义注解的逻辑 } } } ``` 这样,我们就可以通过自定义注解来实现一些特定的配置。在上述示例中,我们通过自定义注解`@CustomAnnotation`来标记需要进行特定处理的,并在`CustomService`中通过反射获取带有该注解的,并进行相应的处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值