精品欧美一区二区三区在线观看 _久久久久国色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二区视频| 日韩一卡二卡在线观看| 三级在线观看视频| 91免费版在线| 国产欧美va欧美va香蕉在线| 日韩激情综合网| 丁香五月缴情综合网| 欧美性猛交xxxx富婆| 日韩理论片在线观看| 国产男男gay网站| 香蕉久久夜色精品国产| www亚洲欧美| 成人精品在线观看视频| 青娱乐极品盛宴一区二区| 亚洲国产精品一区二区www | 天天色综合久久| 男男成人高潮片免费网站| 久久久久久国产免费 | 一区二区三区精品在线观看| 色999五月色| 欧美一级片免费| 久久91精品久久久久久秒播| 2019国产精品自在线拍国产不卡| 日本二区三区视频| 亚洲动漫精品| 亚洲国产精久久久久久| 超碰成人在线播放| 日韩国产激情| 精品久久久香蕉免费精品视频| 最新欧美日韩亚洲| 久久电影中文字幕| 成人国产精品免费观看视频| 成人网在线视频| 欧美激情一区二区三区免费观看| 日韩午夜精品| 欧美黑人一级爽快片淫片高清| 欧美日韩国产黄色| 九九久久电影| 精品一区电影国产| 精品一区二区三区四区五区六区| 久久伊人影院| 91精品国产综合久久精品麻豆 | 日韩福利在线观看| 在线一区二区三区四区| 女人天堂av手机在线| 日本三级在线观看网站| 一区二区三区在线视频观看| 亚洲天堂av免费在线观看| aaa日本高清在线播放免费观看| 91美女福利视频| 久久99精品久久久久子伦| 亚洲精品视频网| 国产精品一二三四| 亚洲影视九九影院在线观看| 国产精品久久久久久久免费| 美女任你摸久久| 国产精品网红福利| 在线观看毛片av| 激情伊人五月天久久综合| 国产热re99久久6国产精品| 亚洲视屏在线观看| 久久99这里只有精品| 成人xvideos免费视频| 一级久久久久久久| 国内国产精品久久| 不卡视频一区二区三区| 六月丁香色婷婷| 久久伊99综合婷婷久久伊| 欧美色欧美亚洲另类七区| 二区在线观看| 亚洲欧洲av另类| 69精品丰满人妻无码视频a片| 色呦呦呦在线观看| 午夜精品福利一区二区蜜股av| 91av资源网| 日本在线中文字幕一区二区三区| 欧美日韩免费观看一区二区三区| 亚洲制服中文字幕| 丁香五月缴情综合网| 日韩精品免费视频| 国产传媒视频在线| 欧美日本二区| 欧洲成人免费视频| 亚洲综合五月天婷婷丁香| 国产精品中文有码| 久久狠狠久久综合桃花| 一级毛片视频在线观看| 一区二区三区四区视频精品免费| 草草久久久无码国产专区| 亚洲mmav| 欧美成人综合网站| 久久久久亚洲av成人无码电影| 天天综合网网欲色| 992tv成人免费视频| 糖心vlog精品一区二区| 国产成人无遮挡在线视频| 国产乱码精品一区二区三区日韩精品| 韩国中文免费在线视频| 亚洲乱码精品一二三四区日韩在线| 激情深爱综合网| 免费视频观看成人| 亚洲成人动漫在线播放| 成人18视频免费69| 99视频精品免费观看| 国产日韩欧美黄色| 五月激情婷婷综合| 一区二区中文字幕在线| av黄色在线网站| 成人精品视频在线观看| 亚洲欧美日韩天堂一区二区| 乱h高h女3p含苞待放| 久久久精品五月天| 国产精品区二区三区日本| 三级外国片在线观看视频| 狠狠色狠色综合曰曰| 91蝌蚪视频在线| 成人精品亚洲| 欧美一级视频免费在线观看| 性一交一乱一色一视频麻豆| 中文字幕乱码日本亚洲一区二区 | 欧美一区二区三区成人久久片| 中文字幕伦理免费在线视频| 欧美网站一区二区| 国产又爽又黄无码无遮挡在线观看| 91精品推荐| 国产精品高潮呻吟久久av无限| 天天操天天操天天操| 亚洲免费资源在线播放| 日本久久久久久久久久久久| 无码少妇一区二区三区| 久久久久久久91| www.国产黄色| 亚洲靠逼com| 久久精品一卡二卡| 天天射—综合中文网| 国产欧美精品日韩精品| 久蕉依人在线视频| 色一情一乱一乱一91av| av网站免费在线播放| 欧美激情91| 99中文视频在线| 国产成人l区| 91精品久久久久久蜜臀| 特黄一区二区三区| 激情综合色综合久久| 国产麻豆电影在线观看| 欧美片网站免费| 久久综合亚洲社区| 国产男男gay体育生网站| 日韩理论片中文av| 亚洲无在线观看| 99久久久久国产精品| 亚洲va码欧洲m码| 超碰个人在线| 精品国产百合女同互慰| 日韩免费一级片| av中文字幕在线不卡| 亚洲中文字幕无码专区| 女人丝袜激情亚洲| 国产精品手机播放| 国产一二区在线| 日韩欧美亚洲国产另类| 国产无遮挡免费视频| 日韩a级大片| 97视频免费在线观看| 污污的视频网站在线观看| 亚洲1区2区3区4区| 国产黄色网址在线观看| 蜜桃av一区二区| 在线观看18视频网站| 97品白浆高清久久久久久| 97精品久久久中文字幕免费| 黄色片在线看| 欧美日韩国产不卡| 麻豆成人在线视频| 99久久亚洲一区二区三区青草| 国产亚洲天堂网| 成人3d动漫在线观看| 亚洲xxx大片| 九色porny自拍视频在线观看| 亚洲天堂影视av| 国产片在线播放| 婷婷夜色潮精品综合在线| 久久美女免费视频| 国产一区高清在线| www.好吊操| 国产aⅴ精品一区二区三区久久| 91精品国产综合久久香蕉| 草美女在线观看| 亚洲一区999| 国产高清不卡视频| 欧美视频精品一区| 蜜桃视频最新网址| 不卡的av电影在线观看| 日本不卡一区二区在线观看| 日韩亚洲国产欧美| 中日韩在线视频| 日韩人体视频| 91在线播放国产| 日韩av中字| 久久久久国产视频| 1769在线观看| 日韩精品高清在线| 国产探花精品一区二区| 日本韩国欧美在线| 欧美精品入口蜜桃| 中文字幕高清不卡| 三级电影在线看| 国产一区二区美女| 久久综合久久色| 亚洲国产mv| 黄色一级视频播放| 久久99国产成人小视频| 国产精品区一区| 日本午夜精品久久久久| 日本不卡高字幕在线2019| 日本三级在线观看网站| 日日狠狠久久偷偷四色综合免费| 台湾av在线二三区观看| 日韩一级免费观看| 91资源在线视频| 欧美最猛性xxxxx直播| 国产精品黄色网| 一区二区日韩电影| 亚洲色偷偷综合亚洲av伊人| 国产丝袜在线精品| 菠萝菠萝蜜网站| www.欧美.com| 91传媒理伦片在线观看| 国产乱码精品一区二区三| 色乱码一区二区三区在线| 欧美一级久久| 国产精品免费入口| 亚洲国产激情| 黄色成人在线看| 欧美午夜a级限制福利片| 伊人网在线免费| 911精品美国片911久久久 | 国产区视频在线播放| 国产视频精品久久久| 日韩一区二区三区中文字幕| 亚洲精品美女在线观看播放| 人人妻人人玩人人澡人人爽| 欧美xxxxxxxxx| 亚洲国产视频一区二区三区| 日韩三级中文字幕| 亚洲av无码片一区二区三区| 欧美不卡激情三级在线观看| 亚洲毛片欧洲毛片国产一品色| 日韩欧美第一区| 免费看黄色一级视频| 精品国产亚洲一区二区三区在线观看| www.午夜激情| 精品欧美乱码久久久久久| 免费观看毛片网站| 亚洲国产精彩中文乱码av在线播放| 人妻少妇精品无码专区| 日韩精品免费综合视频在线播放| 亚洲日本国产精品| 亚洲欧美综合区自拍另类| 精品成人一区二区三区免费视频| 国产一区二区成人| 色的视频在线免费看| 欧美成人全部免费| 91福利区在线观看| 欧美在线欧美在线| 福利视频一区| 91在线观看免费观看| 国产在线播放精品| 欧洲久久久久久| 国产精品二区不卡| 亚洲色成人www永久在线观看| 国产日韩欧美一区| 天天影视综合色| 国产一区二区美女诱惑| 熟妇高潮精品一区二区三区| 国产视频一区在线观看| 希岛爱理中文字幕| 性久久久久久久久久久久| 中文字幕精品视频在线观看| 欧美精品久久天天躁| 韩国av在线免费观看| 亚洲老司机av| 国产激情小视频在线| 91av在线不卡| 日韩精品一页| 精品国产乱码久久久久软件| 狠狠做六月爱婷婷综合aⅴ| 国产奶头好大揉着好爽视频| 国产日韩精品视频一区二区三区 | 久久精品人人做人人综合| 免费黄色激情视频| 欧美日韩中文字幕在线视频| 在线观看中文字幕码| 亚洲国产精品免费| 欧美性天天影视| 欧美一级黄色网| 天堂av一区| 亚洲精品一区二| 国产亚洲福利| 中文字幕在线视频一区二区| 久久午夜国产精品| 久久久久久久久毛片| 欧美午夜电影网| 色呦呦免费观看| 另类天堂视频在线观看| 亚洲同志男男gay1069网站| 亚洲自拍偷拍视频| 欧美系列电影免费观看| 国产日韩欧美精品在线观看| 激情综合网av| www..com.cn蕾丝视频在线观看免费版| 一级日本不卡的影视| 中文字幕人妻互换av久久| 亚洲精品福利在线| 污污网站在线观看| 国产日产亚洲精品| 国产成人短视频在线观看| 亚洲不卡中文字幕无码| 国产精品综合久久| 国产第一页精品| 日本韩国一区二区| 日本一区二区三区在线观看视频| 久久99久国产精品黄毛片入口| 国产欧美自拍| 日韩欧美一区二区视频在线播放 | 真实乱偷全部视频| 国产精品沙发午睡系列990531| 你懂的国产在线| 亚洲精品国产精品国自产观看浪潮 | 国产精品99久久久久久久女警| 战狼4完整免费观看在线播放版| 91久久精品一区二区三| 亚洲日本在线播放| 91av在线不卡| 婷婷成人在线| 国产资源在线视频| 成人av在线看| 日本在线小视频| 精品卡一卡二卡三卡四在线| 日本三级在线观看网站| 99九九电视剧免费观看| 欧美女人交a| 农村末发育av片一区二区 | 视频在线观看99| 欧美少妇激情| 自拍视频一区二区三区| 国产在线精品一区二区| 日本一级片免费| 91精品久久久久久久91蜜桃| 97caopron在线视频| 91热福利电影| 欧美精品黄色| 四虎精品一区二区| 精品成人在线视频| 你懂的在线看| 国产精品视频久| 亚洲九九在线| 美女扒开腿免费视频| 五月天亚洲精品| 国产中文字幕在线观看| 国产精品女主播视频| 天天做天天爱天天综合网| 久久aaaa片一区二区| 亚洲第一福利视频在线| 色中色在线视频| 国产精品啪视频| 亚洲国产一区二区在线观看| 亚洲成a人无码| 一本色道久久综合狠狠躁的推荐| 91社区在线观看| 69堂成人精品视频免费| 一本一本久久| 中文字幕黄色网址| 日韩欧美一区二区三区在线| 黑森林国产精品av| 亚洲欧美日产图| 国产精品一区在线观看你懂的| 日本三级片在线观看| 亚洲欧美一区二区精品久久久| 激情欧美一区二区三区黑长吊| 黄色网zhan| 26uuu欧美| av中文字幕播放| 欧美一区二区三区……| 99精品视频在线| 水蜜桃av无码| 欧美另类久久久品| 蜜桃视频www网站在线观看| 色噜噜狠狠一区二区三区| 国产福利一区在线| 国产污视频网站| 欧美国产视频一区二区| 精品国产一区二区三区久久久樱花 | 国产精品18久久久久久久网站| 青青视频在线免费观看| 久99九色视频在线观看| 欧美日中文字幕| 看全色黄大色黄女片18| 欧美日韩国产另类不卡|