精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

重構(gòu)配置利器!Enum 在 Spring Boot 中的高級(jí)用法全解析

開發(fā) 前端
Spring Boot 提供了豐富的配置能力,而 enum + @ConfigurationProperties 的組合,是一種更安全、更優(yōu)雅、更可維護(hù)的配置模式。

從“配置混亂”走向“結(jié)構(gòu)清晰”的最佳實(shí)踐

在企業(yè)級(jí)開發(fā)中,配置混亂往往是技術(shù)債的起點(diǎn)。尤其當(dāng)業(yè)務(wù)復(fù)雜、配置項(xiàng)眾多,傳統(tǒng)的 application.yml 文本配置方式在類型安全、結(jié)構(gòu)表達(dá)力、可維護(hù)性等方面都暴露出不足。

本篇文章通過實(shí)戰(zhàn)場(chǎng)景,探索如何借助 Java enum 類型 + Spring Boot @ConfigurationProperties 組合,構(gòu)建類型安全、可擴(kuò)展的配置體系。并進(jìn)一步擴(kuò)展到:

  • 枚舉與數(shù)據(jù)庫(kù)字段綁定
  • 緩存優(yōu)化配置項(xiàng)讀取效率
  • 角色權(quán)限控制基于枚舉驅(qū)動(dòng)

打造真正工程級(jí)、實(shí)戰(zhàn)型配置解決方案。

為何不能再裸用字符串配置?

在 application.yml 中直接使用 "admin"、"guest" 等字符串,會(huì)帶來如下問題:

問題

描述

可讀性差

業(yè)務(wù)人員或新成員難以理解 "vip" 與 "1" 分別代表什么

維護(hù)成本高

多處硬編碼配置項(xiàng)修改困難,容易出錯(cuò)

無法類型校驗(yàn)

運(yùn)行前無法檢測(cè)是否輸入了無效配置項(xiàng)

不易擴(kuò)展

缺乏附加信息,如權(quán)限等級(jí)、排序、圖標(biāo)等

這也是為什么我們將 枚舉 enum 作為承載業(yè)務(wù)配置項(xiàng)的首選結(jié)構(gòu)。

Spring Boot 項(xiàng)目中的最佳實(shí)踐設(shè)計(jì)

核心實(shí)現(xiàn)部分

數(shù)據(jù)庫(kù)集成:枚舉持久化與回顯

在實(shí)際業(yè)務(wù)中,用戶角色往往保存在數(shù)據(jù)庫(kù)中。為了做到與枚舉類解耦但保持一致性,我們可以實(shí)現(xiàn):

數(shù)據(jù)庫(kù)表結(jié)構(gòu)

CREATE TABLE sys_user (
  id BIGINT AUTO_INCREMENT PRIMARY KEY,
  username VARCHAR(50),
  user_type VARCHAR(20)
);

user_type_dict 表結(jié)構(gòu)

CREATE TABLE user_type_dict (
  id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主鍵ID',
  enum_code VARCHAR(50) NOT NULL COMMENT '枚舉標(biāo)識(shí)(與 Enum.name() 對(duì)應(yīng))',
  description VARCHAR(100) NOT NULL COMMENT '中文描述',
  level INT DEFAULT 0 COMMENT '權(quán)限等級(jí)(可選)',
  enabled TINYINT(1) DEFAULT 1 COMMENT '是否啟用(1=啟用,0=禁用)',
  UNIQUE KEY uq_enum_code (enum_code)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用戶類型枚舉配置表';

為了避免每次都訪問數(shù)據(jù)庫(kù)或文件系統(tǒng),可以使用 Spring Cache 實(shí)現(xiàn)角色配置的緩存:

添加緩存支持

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-cache</artifactId>
</dependency>

架構(gòu)設(shè)計(jì):Enum + @ConfigurationProperties

UserTypeEnum 定義常量,附帶描述、權(quán)限級(jí)別等操作信息

public enum UserTypeEnum {
    ADMIN("管理員", 10),
    USER("普通用戶", 5),
    GUEST("游客", 1);


    private final String description;
    private final int level;


    UserTypeEnum(String description, int level) {
        this.description = description;
        this.level = level;
    }


    public String getDescription() { return description; }
    public int getLevel() { return level; }
}

application.yml 配置合理的 enum 類型

app:
  user-type:
    admin: ADMIN
    user: USER
    guest: GUEST

數(shù)據(jù)庫(kù)集成:通過 enumCode 匹配

User.java

@Entity
@Table(name = "sys_user")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;


    private String username;


    @Enumerated(EnumType.STRING)
    private UserTypeEnum userType;
}

UserRepository.java

public interface UserRepository extends JpaRepository<User, Long> {}

UserTypeDict.java 數(shù)據(jù)庫(kù)枚舉配置表

@Entity
@Table(name = "user_type_dict")
public class UserTypeDict {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;


    private String enumCode;
    private String description;
    private Integer level;
    private Boolean enabled;
}

UserTypeDictRepository.java

public interface UserTypeDictRepository extends JpaRepository<UserTypeDict, Long> {
    Optional<UserTypeDict> findByEnumCode(String enumCode);
}

Enum 動(dòng)態(tài)讀取 DB 實(shí)現(xiàn)

UserTypeEnumConverter.java

@Component
@RequiredArgsConstructor
public class UserTypeEnumConverter {
    private final UserTypeDictRepository repository;


    public UserTypeEnum convert(String enumCode) {
        return Arrays.stream(UserTypeEnum.values())
                .filter(e -> e.name().equalsIgnoreCase(enumCode))
                .findFirst()
                .orElseThrow(() -> new IllegalArgumentException("Invalid UserType: " + enumCode));
    }


    public String getDescription(UserTypeEnum typeEnum) {
        return repository.findByEnumCode(typeEnum.name())
                .map(UserTypeDict::getDescription)
                .orElse(typeEnum.getDescription());
    }


    public int getLevel(UserTypeEnum typeEnum) {
        return repository.findByEnumCode(typeEnum.name())
                .map(UserTypeDict::getLevel)
                .orElse(typeEnum.getLevel());
    }
}

UserTypeService.java

@Service
@RequiredArgsConstructor
public class UserTypeService {
    private final AppConfig appConfig;
    private final UserTypeEnumConverter converter;


    public String getAdminDescription() {
        return converter.getDescription(appConfig.getUserType().getAdmin());
    }


    public int getAdminLevel() {
        return converter.getLevel(appConfig.getUserType().getAdmin());
    }


    // USER / GUEST 同理
}

權(quán)限系統(tǒng)集成

public class CustomUserDetails implements UserDetails {
    private final User user;


    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        return List.of(new SimpleGrantedAuthority("ROLE_" + user.getUserType().name()));
    }
}
@GetMapping("/admin-only")
@PreAuthorize("hasRole('ADMIN')")
public String adminPage() {
    return "admin";
}

在實(shí)際企業(yè)應(yīng)用中,枚舉配置類往往不僅僅承擔(dān)“配置常量”的職責(zé)。我們可以繼續(xù)增強(qiáng)其功能:

拓展方向

示例

權(quán)限等級(jí)

ADMIN:10,USER:5,GUEST:1

國(guó)際化支持

添加 getI18nKey() 與 MessageSource 配合

圖標(biāo)或樣式ID

每個(gè)用戶類型對(duì)應(yīng) UI 中的圖標(biāo)、顏色

數(shù)據(jù)權(quán)限控制

每種用戶類型綁定可見模塊或資源

例如:

publicenumUserTypeEnum {
    ADMIN("管理員", 10),
    USER("普通用戶", 5),
    GUEST("游客", 1);

    privatefinalStringdescription;
    privatefinalintlevel;

    // 構(gòu)造函數(shù) + getter 省略
}

總結(jié):配置就是系統(tǒng)結(jié)構(gòu)的抽象表達(dá)

Spring Boot 提供了豐富的配置能力,而 enum + @ConfigurationProperties 的組合,是一種更安全、更優(yōu)雅、更可維護(hù)的配置模式。它在開發(fā)中起到了以下作用:

  • 強(qiáng)類型保證,減少運(yùn)行時(shí)出錯(cuò);
  • 可讀性高,避免魔法值;
  • 易于與數(shù)據(jù)庫(kù)、緩存、權(quán)限系統(tǒng)集成;
  • 支持多維度擴(kuò)展,為大型系統(tǒng)預(yù)留空間。

配置不是一個(gè)文件那么簡(jiǎn)單,它是整個(gè)系統(tǒng)設(shè)計(jì)能力的縮影。用好 enum 和配置映射,能讓你的系統(tǒng)更加健壯且自解釋。

責(zé)任編輯:武曉燕 來源: 路條編程
相關(guān)推薦

2018-05-30 15:10:24

Spring BootList類型

2025-01-15 08:19:12

SpringBootRedis開源

2025-02-13 07:45:26

APISpringHTTP

2024-10-10 14:43:54

LambdaSpring編程

2024-03-27 08:47:10

Python多線程Threading

2025-05-30 07:10:19

2025-02-08 10:02:03

2021-04-19 07:57:23

Spring 源碼GetBean

2025-04-16 10:03:40

開發(fā)Spring應(yīng)用程序

2025-09-08 01:00:00

SpringRestClient架構(gòu)

2023-09-22 10:12:57

2025-02-26 13:00:00

SpringBootJava開發(fā)

2025-08-15 07:39:11

2025-10-11 07:13:04

2025-03-27 08:10:19

Spring開發(fā)架構(gòu)

2025-04-29 07:44:26

配置校驗(yàn)機(jī)制

2024-09-29 10:39:48

RSocketWebSocket通信

2009-06-18 15:28:08

Glassfish JSpring

2025-01-13 12:46:31

SpringBootJacksonJSON

2024-06-18 18:36:03

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

好看的中文字幕在线播放| 99国产精品久久久久久久成人| 成人线上视频| 国产夜色精品一区二区av| 国内精品一区二区三区四区| 精品无码在线视频| 日韩一级二级| 一区二区三区日本| 欧美日韩高清在线一区| av中文在线播放| 日韩欧美不卡| 亚洲高清不卡av| 在线观看的毛片| 久久电影网站| 国产精品久久久久影院色老大| 国产成人午夜视频网址| 久久精品视频免费在线观看| 制服丝袜日韩| 日韩免费看网站| 日韩视频免费在线播放| 91豆花视频在线播放| 欧美国产精品一区二区三区| 国产99久久精品一区二区| www深夜成人a√在线| 奇米777国产一区国产二区| 婷婷成人激情在线网| 久久久久久艹| 精品久久久久久亚洲综合网站 | 欧美日韩高清影院| 日本手机在线视频| 在线中文字幕电影| 亚洲欧洲99久久| 日本一区不卡| 一区二区不卡视频在线观看| 免费在线成人| 国内成人精品视频| 男女性高潮免费网站| 欧美亚洲国产精品久久| 日韩黄色av网站| 91精品啪在线观看国产| 成人污污视频| 欧美久久久久久久久| 日本熟妇人妻中出| fc2ppv国产精品久久| 中文字幕成人在线观看| 欧美精品123| 人妻中文字幕一区| 国产99久久久国产精品潘金| 成人免费在线视频网站| 久草国产精品视频| 国内精品久久久久久久影视蜜臀| 亚洲男人天堂视频| 91精品小视频| 久久久久97| 亚洲精品www久久久久久广东| 北条麻妃视频在线| 久久毛片亚洲| 欧美三级欧美成人高清www| 免费无码毛片一区二三区| 波多野结衣在线播放| 亚洲成在线观看| 日韩黄色片在线| 99爱在线观看| 图片区小说区区亚洲影院| 亚洲欧美成人一区| 亚洲搞黄视频| 亚洲女同一区二区| 成人av在线播放观看| h片视频在线观看| 欧美日韩国产一中文字不卡 | 九色porny自拍| tube8在线hd| 欧美日韩黄色大片| 北条麻妃av高潮尖叫在线观看| www.综合网.com| 亚洲动漫第一页| 香蕉视频在线网址| caoprom在线| 欧美香蕉大胸在线视频观看| 日本免费观看网站| 一区二区三区| 亚洲大胆人体在线| 国产精品久久久久无码av色戒| 一区二区三区国产好| 日韩黄色av网站| 无码人妻一区二区三区在线| 亚洲动漫精品| 日韩中文在线中文网在线观看| 99久久人妻精品免费二区| 偷拍自拍一区| www国产91| 久久精品国产亚洲av麻豆色欲 | 99久久精品费精品国产一区二区| 91影视免费在线观看| 黄色av小说在线观看| 国产日韩欧美电影| 麻豆传媒网站在线观看| 欧美私密网站| 91精品国产综合久久婷婷香蕉| 久久午夜夜伦鲁鲁一区二区| 日韩激情欧美| 亚洲人成网在线播放| 日日噜噜夜夜狠狠久久波多野| 色狮一区二区三区四区视频| 欧美国产欧美亚洲国产日韩mv天天看完整| 国产精品视频看看| 欧美成人直播| 91精品91久久久久久| 伊人免费在线观看| 久久er精品视频| 成人精品视频99在线观看免费| 又骚又黄的视频| 久久99九九99精品| 精品乱码一区| 在线xxxx| 欧美日韩国产首页| 搡老熟女老女人一区二区| 日本欧美高清| 欧美另类69精品久久久久9999| 久久久久久久久久久久国产| 秋霞午夜av一区二区三区| 国产精品免费一区二区三区在线观看 | 婷婷久久综合九色国产成人| 日韩av.com| 中文字幕亚洲影视| 国产做受69高潮| 国产av一区二区三区精品| 欧美激情中文字幕| 国产xxxxx在线观看| 国产 日韩 欧美 综合 一区| 久久成人亚洲精品| 国产亚洲久一区二区| 2022国产精品视频| 91看片淫黄大片91| 精品中文在线| 亚洲激情小视频| 免费又黄又爽又色的视频| 国产日韩一区| 国产欧美日韩一区二区三区| 呦呦在线视频| 91精品国产欧美一区二区| 一本色道久久88| 日韩1区2区3区| 麻豆成人av| 涩涩视频在线免费看| 亚洲黄色片网站| 国产福利拍拍拍| 99久久er热在这里只有精品66| 日韩免费中文专区| 亚洲免费福利| 国产一区二区三区免费视频| 黄色片中文字幕| 粉嫩高潮美女一区二区三区| 日韩成人av网站| 久久久一本精品| 亚洲天堂av在线免费| 久久精品五月天| 丰满亚洲少妇av| 亚洲欧洲在线一区| 99视频这里有精品| 久久99精品久久久久久噜噜| 朝桐光av在线一区二区三区| 国产欧美一区二区精品久导航| 国产a级片网站| 麻豆一区二区麻豆免费观看| 欧美怡春院一区二区三区| 男人的天堂在线视频| 欧洲精品在线观看| 永久免费看片视频教学| 国产精品正在播放| 男人添女人下部高潮视频在观看| 日韩欧美激情| 欧美丰满少妇xxxxx| 亚洲视频一区在线播放| 久久久.com| 永久免费的av网站| 好看的日韩av电影| 欧美h视频在线| 91麻豆精品| 国语自产精品视频在线看一大j8| 99久久精品无免国产免费| 亚洲自拍偷拍九九九| 亚洲精品女人久久久| 亚洲高清在线| 日韩videos| 亚洲国产欧美在线观看| 欧美在线亚洲一区| 老司机福利在线视频| 精品国产污网站| 免费三片在线播放| 国产午夜精品在线观看| 国产日韩一区二区在线| 日本a级不卡| 波多野结衣精品久久| 日韩性xxx| 亚洲美女www午夜| 136福利视频导航| 五月综合激情婷婷六月色窝| wwwww黄色| 成人午夜在线播放| 欧美一级片免费播放| 日本电影一区二区| 国产精品一区二区久久久久| 菠萝蜜视频在线观看www入口| 亚洲第一国产精品| 姑娘第5集在线观看免费好剧| 欧美激情一区二区三区全黄| 一区二区三区四区影院| 日本aⅴ亚洲精品中文乱码| www.日本三级| 日本午夜精品| 97人人模人人爽视频一区二区| 精灵使的剑舞无删减版在线观看| 亚洲精品一区二区三区蜜桃下载| 日本中文字幕网| 国产精品国产三级国产a| aaaaaav| 国产91丝袜在线播放九色| 国产人妻777人伦精品hd| 亚洲国产不卡| 亚洲一区二区三区四区中文| 成人黄色91| 国产精品第二页| 欧美巨大丰满猛性社交| 国内精品久久久久久久久| 国产cdts系列另类在线观看| 最新中文字幕亚洲| 黄色美女网站在线观看| 亚洲男人天堂2023| 日本啊v在线| 亚洲激情成人网| 少妇一区二区三区四区| 日韩欧美国产一区二区三区| 国产熟女一区二区三区四区| 欧美日韩精品免费| 特级西西444www大胆免费看| 色综合天天天天做夜夜夜夜做| 中文国语毛片高清视频| 国产欧美一区二区精品性| 红桃视频一区二区三区免费| 另类欧美日韩国产在线| 久久婷五月综合| 久久精品国产一区二区| 僵尸世界大战2 在线播放| 欧美色综合网| 天堂8在线天堂资源bt| 欧美日韩第一| 亚欧精品在线| 日韩欧美一区免费| 一区二区视频在线免费| 国产精品国产一区| 可以免费看的黄色网址| 欧美大片专区| 91成人综合网| 99精品久久| 久久精品香蕉视频| 天堂午夜影视日韩欧美一区二区| 女人床在线观看| 精品高清久久| 亚洲欧洲精品在线| 久久成人高清| 色姑娘综合av| 久久久久美女| 女人被男人躁得好爽免费视频| 超碰成人久久| 国产日本欧美在线| 欧美丝袜激情| 一区二区三区四区欧美| 免费成人av| 国产九色精品| 色婷婷综合久久久久久| 日产精品一线二线三线芒果| 97精品97| 国产玉足脚交久久欧美| 久久99伊人| 五月花丁香婷婷| 福利一区二区在线观看| 在线免费观看日韩av| 不卡视频一二三四| 日本黄色网址大全| 国产精品不卡在线观看| 久草国产在线视频| 日本精品视频一区二区| 国产精品人妻一区二区三区| 精品电影一区二区| av中文天堂在线| 欧美日韩第一页| 青青在线视频| 欧美激情精品久久久久久黑人 | 国产视频一区二区在线| 国产真实乱在线更新| 最新国产成人在线观看| 亚洲a∨无码无在线观看| 一区二区高清视频在线观看| 久久久久久不卡| 日韩一卡二卡三卡| 国产资源在线播放| 欧美国产高跟鞋裸体秀xxxhd| 国产精品一区二区三区视频网站| 色偷偷888欧美精品久久久| yjizz视频网站在线播放| 欧美激情图片区| 成人精品国产亚洲| 成人xxxxx| 中文有码一区| 色播亚洲婷婷| 91精品国产福利在线观看麻豆| 青青草原网站在线观看| 久久99伊人| 久久精品无码专区| 亚洲欧洲精品一区二区三区不卡| 久久国产精品国语对白| 一本大道久久a久久综合婷婷| 91黑人精品一区二区三区| 欧美成人精品1314www| 日韩免费啪啪| 日韩av免费在线播放| 国产精品丝袜在线播放| 二级片在线观看| 美女性感视频久久| 国产精品天天干| 欧美日韩国产在线播放| 欧美视频久久久| 欧美精品一区三区| 99国内精品久久久久| 精品国产一区二区三区四区精华 | 日韩精品极品在线观看| 尤物yw193can在线观看| 国产日韩中文字幕在线| 综合激情久久| 超碰10000| 国产精品一区二区久久不卡| 国产麻豆a毛片| 欧美日韩精品二区第二页| 成人爽a毛片一区二区| 久久在线免费视频| 免费成人高清在线视频| 亚洲巨乳在线观看| 日韩1区2区日韩1区2区| 亚洲ⅴ国产v天堂a无码二区| 日本高清不卡视频| 成人在线播放视频| 国产精品影院在线观看| 久久裸体网站| 夜夜夜夜夜夜操| 亚洲欧美日韩久久| 日日夜夜综合网| 国产视频精品va久久久久久| 松下纱荣子在线观看| 亚洲www视频| 欧美99久久| 蜜桃视频无码区在线观看| 欧美国产视频在线| 国产天堂第一区| 亚洲第一男人天堂| 国产在线看片免费视频在线观看| 成人欧美一区二区三区在线湿哒哒| 激情亚洲另类图片区小说区| 男人添女人下部高潮视频在观看| 精品一二三四在线| 欧美国产日韩在线观看成人| 欧美电视剧在线看免费| sese一区| 成人精品一区二区三区电影免费 | 欧美一区二区三区思思人| 久蕉在线视频| 国产一区在线播放| 欧美日韩ab| 国产艳俗歌舞表演hd| 在线观看视频91| 在线xxxx| 明星裸体视频一区二区| 蜜臀av性久久久久蜜臀aⅴ流畅| 国产精品久久无码| 亚洲成av人片一区二区| 欧美日韩免费做爰大片| 国产视频999| 欧美日韩1区| 亚洲av无码一区二区三区人 | 激情五月婷婷六月| heyzo一本久久综合| 中文字幕天堂在线| 欧美成人第一页| 亚洲素人在线| 亚洲欧美aaa| 欧美日韩激情美女| 免费黄色在线网站| 国内精品二区| 韩国精品在线观看| 欧美h在线观看| 久久综合电影一区| 免费av一区| 性生交大片免费看l| 色域天天综合网| 新版中文在线官网| 四虎影院一区二区三区 | 日本美女视频网站| 日本大香伊一区二区三区| 黄色影院在线看| 亚洲精品在线免费看|