惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Visual Studio Blog
Microsoft Azure Blog
Microsoft Azure Blog
Jina AI
Jina AI
Recent Announcements
Recent Announcements
WordPress大学
WordPress大学
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Microsoft Security Blog
Microsoft Security Blog
J
Java Code Geeks
罗磊的独立博客
小众软件
小众软件
N
Netflix TechBlog - Medium
I
InfoQ
Apple Machine Learning Research
Apple Machine Learning Research
D
DataBreaches.Net
博客园 - Franky
Vercel News
Vercel News
博客园 - 聂微东
G
Google Developers Blog
C
Check Point Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
腾讯CDC
云风的 BLOG
云风的 BLOG
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
美团技术团队

李锋镝的博客

LiteLLM 本地代理搭建 Claude-HUD 使用文档 Kratos+ —— Kratos 主题二次开发记录 译文:如何将单体应用拆解为微服务 codebase-memory-mcp 极简完整使用指南 Claude Haiku 4.5、Claude Sonnet 4.6、Claude Opus 4.7 区别以及各自的新特性 SchedulingConfigurer详解 踩坑60+次后,我终于搞懂 Claude Skill 怎么写才会真的触发 Everything Claude Code 详细使用文档 配置Jackson使用字段而不是getter/setter来序列化和反序列化 这个域名注册整整十年了,十年时间,真快啊 Claude Code全维度实战指南:从入门到精通,解锁AI编程新范式 Apollo配置中心中的protalDB的作用是什么 org.apache.ibatis.plugin.Interceptor类详细介绍及使用 岁末 Excel2016右键新建工作表,打开时提示“因为文件格式或文件扩展名无效。请确定文件未损坏,并且文件扩展名与文件的格式匹配。”的解决办法 wordpress增加说说功能 Java 为什么有这么多 “O”? 别再背线程池的七大参数了,现在面试官都这么问 2024年11月1号 农历十月初一 我的第一个WordPress插件:Dylan Custom Plugin上线了 推荐一款比较养眼的Xshell配色方案 hnswlib installation failed 开工啦~ 阳了... MybatisCodeHelperPro激活 @Async注解的坑 新买的笔记本发货啦…… 这个中秋节感觉过的好累啊 IDEA下载源码报:Cannot connect to the Maven process. Try again later.
属性名称闹的一场乌龙事件
李锋镝 · 2025-06-25 · via 李锋镝的博客

最近有一个需求,系统要根据启动参数加载不同权限的数据源,代码就位之后,开启了自测。

刚开始测的是默认场景下数据源加载情况,这个时候一切正常。

后来开始测试特定场景下的case,这个时候出现问题了,发现数据源并没有按照我想要的情况加载。第一时间就想到了是不是启动参数读取的问题。

排查了下发现还真是启动参数读取有问题,没有按照指定的启动参数注入。

启动参数:-Ddb.privilege=r -Denv=dev ……

其中db.privilege是这次新加的,看了配置类,感觉一切正常。
配置类代码:

public interface ISysDbConfig {
    String getGlobalJdbcDriverClassName();

    String getGlobalJdbcUrl();

    String getGlobalJdbcUsername();

    String getGlobalJdbcPassword();

    String getGlobalPublicKey();

    String getJdbcDriverClassName();

    String getGlobalJdbcMaxWait();

    String getGlobalJdbcMaxIdle();

    String getGlobalJdbcMaxActive();

    String getGlobalJdbcMinIdle();

    String getGlobalJdbcInitialSize();

    String getDbPrivilege();
}

@Data
@ConfigurationProperties(prefix = PropertiesNameConstant.DB, ignoreInvalidFields = true)
@Component
public class DbConfigBean implements ISysDbConfig {
    @Value("${global.jdbc.url:#{null}}")
    private String globalJdbcUrl;
    @Value("${global.jdbc.username:#{null}}")
    private String globalJdbcUsername;
    @Value("${global.jdbc.password:#{null}}")
    private String globalJdbcPassword;
    @Value("${global.publicKey:#{null}}")
    private String globalPublicKey;
    @Value("${global.jdbc.driverClassName:#{null}}")
    private String globalJdbcDriverClassName;
    ……
    @Value("${privilege:rw}")
    private String dbPrivilege;
}

顿时有些纳闷,什么情况?

后来尝试把代码改成:

    @Value("${db.privilege:rw}")
    private String dbPrivilege;

注入成功。

俗话说当局者迷,旁观者清。决定求助于同事。

同事说你ConfigurationProperties注解混用了,默认值应该直接改成:private String dbPrivilege = "rw";

一句惊醒梦中人。

在我上面的代码中,ConfigurationProperties注解是根据指定的前缀+属性名称进行注入的,Value注解是根据指定的参数名进行注入的,正常情况下二者取其一即可。

而在我最原始的代码中,两个都不搭边,所以就没有注入进去……很尴尬。

修改后的代码为:

@Data
@ConfigurationProperties(prefix = PropertiesNameConstant.DB, ignoreInvalidFields = true)
@Component
public class DbConfigBean implements ISysDbConfig {
    ......
    private String privilege = "rw";
}

重新启动项目,一切正常。

就很粗心。

嗯,知道错了,下次还犯。

除非注明,否则均为李锋镝的博客原创文章,转载必须以链接形式标明本文链接

本文链接:https://www.lifengdi.com/dai-ma-ren-sheng/4472