Spring通过注解读取外部配置文件
一、使用注解@PropertySource
指定路径
使用 @PropertySource 指定配置文件路径,支持 properties 和 XML 的配置文件,但不支持 yml。
属性赋值
可以用注解 @Value 对属性直接赋值、${}获取配置文件的值、SPEL表达式#{}。
- 直接赋值:@Value("name jack")
- 读取配置文件:@Value("${user.age}")
- 指定默认值:@Value("${user.desc:default desc}") 表示如果没有user.desc的配置,则赋值为default desc
- SPEL表达式:@Value("#{'${user.username}'?.toUpperCase()}") 表示将从配置文件读取的值转为大写,?可以不填,表示如果没有user.username的配置,则忽略
例子
config.properties内容
ps.datasource.driverClassName=com.mysql.jdbc.Driver ps.datasource.jdbcUrl=jdbc:mysql://localhost:3306/spring?useTimezone=true&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&useUnicode=true&characterEncoding=utf-8&tcpRcvBuf=1024000&useOldAliasMetadataBehavior=true&useSSL=false&rewriteBatchedStatements=true&useAffectedRows=true ps.datasource.username=root ps.datasource.password=root ps.datasource.minIdle=1 ps.datasource.maxPoolSize=10 ps.datasource.connectionTimeout=3000 ps.datasource.idleTimeout=300000
配置类
/** * 使用@PropertySource指定具体的配置文件,用@Value设置具体的属性值, 不支持yml */ @Component @PropertySource("classpath:config.properties") public class DbProperties { @Value("${ps.datasource.driverClassName}") private String driverClassName; @Value("${ps.datasource.jdbcUrl}") private String jdbcUrl; @Value("${ps.datasource.username}") private String username; @Value("${ps.datasource.password}") private String password; @Value("${ps.datasource.minIdle}") private int minIdle; @Value("${ps.datasource.maxPoolSize}") private int maxPoolSize; @Value("${ps.datasource.connectionTimeout}") private int connectionTimeout; @Value("${ps.datasource.idleTimeout}") private int idleTimeout; public String getDriverClassName() { return driverClassName; } public void setDriverClassName(String driverClassName) { this.driverClassName = driverClassName; } public String getJdbcUrl() { return jdbcUrl; } public void setJdbcUrl(String jdbcUrl) { this.jdbcUrl = jdbcUrl; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public int getMinIdle() { return minIdle; } public void setMinIdle(int minIdle) { this.minIdle = minIdle; } public int getMaxPoolSize() { return maxPoolSize; } public void setMaxPoolSize(int maxPoolSize) { this.maxPoolSize = maxPoolSize; } public int getConnectionTimeout() { return connectionTimeout; } public void setConnectionTimeout(int connectionTimeout) { this.connectionTimeout = connectionTimeout; } public int getIdleTimeout() { return idleTimeout; } public void setIdleTimeout(int idleTimeout) { this.idleTimeout = idleTimeout; } @Override public String toString() { return "DbProperties{" + "driverClassName='" + driverClassName + '\'' + ", jdbcUrl='" + jdbcUrl + '\'' + ", username='" + username + '\'' + ", password='" + password + '\'' + ", minIdle=" + minIdle + ", maxPoolSize=" + maxPoolSize + ", connectionTimeout=" + connectionTimeout + ", idleTimeout=" + idleTimeout + '}'; } }
二、使用Environment
/** * Environment可以获取classpath下配置的属性值,无需指定具体的配置文件。 不支持yml */ @Component public class UserProperties { @Autowired private Environment env; public String getUserName() { return env.getProperty("user.name"); } public String getPassword() { return env.getProperty("user.password"); } }
三、使用PropertiesLoaderUtils
try { Properties properties = PropertiesLoaderUtils.loadAllProperties("config.properties"); System.out.println(properties.getProperty("user.name")); } catch (IOException e) { e.printStackTrace(); }
时刻与技术进步,每天一点滴,日久一大步!!!
本博客只为记录,用于学习,如有冒犯,请私信于我。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 字符编码:从基础到乱码解决