阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

加载配置文件

33次阅读
没有评论

共计 1730 个字符,预计需要花费 5 分钟才能阅读完成。

加载配置文件可以直接使用注解@Value,例如,我们定义了一个最大允许上传的文件大小配置:

storage:
  local:
    max-size: 102400

在某个 FileUploader 里,需要获取该配置,可使用 @Value 注入:

@Component
public class FileUploader {@Value("${storage.local.max-size:102400}")
    int maxSize;

    ...
}

在另一个 UploadFilter 中,因为要检查文件的 MD5,同时也要检查输入流的大小,因此,也需要该配置:

@Component
public class UploadFilter implements Filter {@Value("${storage.local.max-size:100000}")
    int maxSize;

    ...
}

多次引用同一个 @Value 不但麻烦,而且 @Value 使用字符串,缺少编译器检查,容易造成多处引用不一致(例如,UploadFilter把缺省值误写为100000)。

为了更好地管理配置,Spring Boot 允许创建一个 Bean,持有一组配置,并由 Spring Boot 自动注入。

假设我们在 application.yml 中添加了如下配置:

storage:
  local:
    # 文件存储根目录:
    root-dir: ${STORAGE_LOCAL_ROOT:/var/storage}
    # 最大文件大小,默认 100K:
    max-size: ${STORAGE_LOCAL_MAX_SIZE:102400}
    # 是否允许空文件:
    allow-empty: false
    # 允许的文件类型:
    allow-types: jpg, png, gif

可以首先定义一个 Java Bean,持有该组配置:

public class StorageConfiguration {private String rootDir;
    private int maxSize;
    private boolean allowEmpty;
    private List<String> allowTypes;

    // TODO: getters and setters
}

保证 Java Bean 的属性名称与配置一致即可。然后,我们添加两个注解:

@Configuration
@ConfigurationProperties("storage.local")
public class StorageConfiguration {...}

注意到 @ConfigurationProperties("storage.local") 表示将从配置项 storage.local 读取该项的所有子项配置,并且,@Configuration表示 StorageConfiguration 也是一个 Spring 管理的 Bean,可直接注入到其他 Bean 中:

@Component
public class StorageService {final Logger logger = LoggerFactory.getLogger(getClass());

    @Autowired
    StorageConfiguration storageConfig;

    @PostConstruct
    public void init() {logger.info("Load configuration: root-dir = {}", storageConfig.getRootDir());
        logger.info("Load configuration: max-size = {}", storageConfig.getMaxSize());
        logger.info("Load configuration: allowed-types = {}", storageConfig.getAllowTypes());
    }
}

这样一来,引入 storage.local 的相关配置就很容易了,因为只需要注入 StorageConfiguration 这个 Bean,这样可以由编译器检查类型,无需编写重复的 @Value 注解。

练习

用 Spring Boot 加载配置文件。

下载练习

小结

Spring Boot 提供了 @ConfigurationProperties 注解,可以非常方便地把一段配置加载到一个 Bean 中。

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-08-05发表,共计1730字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中