将应用程序yml文件中的配置映射到枚举类型

时间:2017-09-21 09:44:22

标签: java spring spring-boot enums properties

#Reports
reports:
    PnLReport:
        reportId: 10
        path: \\\\pathto\\PnLreport\\

    BalanceSheetReport:
            reportId: 11
            path: \\\\pathto\\balancesheet\\    

schedule-10:
    description: Deliver pnl reports
    report: 10
    format: PDF, XLS

我在application.yml应用程序的Spring Boot文件中定义了上述属性。

  1. 如何为每种报告类型将repordIdpath属性映射到enum。例如:

    public enum ReportType{
    PNL(...)
    BALANCE(...);
    
    private final String reportId;
    private final String path;
    
    private ReportType(String reportId, String path) {
        this.identifier = identifier;
    }
    
  2. 接下来,我想在report: 10属性下的schedule-10reportId之间进行映射,以便在FileService类中导出路径,以便我可以查看文件是否存在于路径中。我该怎么做这个映射?

  3. 这是我能够考虑我的要求的唯一方法,有没有更好的方法呢?

2 个答案:

答案 0 :(得分:0)

您可以使用@Value注释从配置文件中读取属性,如下所示:

CREATE  external table spectrum.LINEITEM_PART_PARQ ( 
 L_ORDERKEY BIGINT,
 L_PARTKEY BIGINT,
 L_SUPPKEY BIGINT,
 L_LINENUMBER INT,
 L_QUANTITY DECIMAL(12,2),
 L_EXTENDEDPRICE DECIMAL(12,2),
 L_DISCOUNT DECIMAL(12,2),
 L_TAX DECIMAL(12,2),
 L_RETURNFLAG VARCHAR(128),
 L_LINESTATUS VARCHAR(128),
 L_COMMITDATE VARCHAR(128),
 L_RECEIPTDATE VARCHAR(128),
 L_SHIPINSTRUCT VARCHAR(128),
 L_SHIPMODE VARCHAR(128),
 L_COMMENT VARCHAR(128))
partitioned by (L_SHIPDATE VARCHAR(128))
stored as PARQUET
location 's3://<your-bucket>/<xyz>/lineitem_partition/

答案 1 :(得分:0)

我不确定我是否会建议使用枚举,因为您正在寻找的更像是可配置的属性实例。也许考虑使用一个简单的类来读取它的两个实例?

public class ReportType {

    private Integer reportId;

    private String path;

    public String getPath() {
        return path;
    }

    public void setPath(String path) {
        this.path = path;
    }

    public void getReportId() {
        return reportId;
    }

    public Integer setReportId(Integer reportId) {
        this.reportId = reportId;
    }
}

@Component
@ConfigurationProperties(prefix = "reports")
public class ReportTypes {
    public ReportType PlnReport;
    public ReportType BalanceSheetReport;
}