通过实现 EnvironmentAware 接口获取配置信息
参考:
EnvironmentAware 接口定义:
public interface EnvironmentAware extends Aware { void setEnvironment(Environment environment); }
- 所有的配置信息,都会加载到 Environment 实体中,因此我们可以通过这个对象来获取系统的配置;
- 凡是被 Spring 管理的类,实现接口 EnvironmentAware 接口重写 setEnvironment 方法,该方法中可以在工程启动时,获取到 Environment。
比如 SpringBoot 整合 MyBatis
application.properties 文件配置:
datasource.driverClassName=com.mysql.jdbc.Driver datasource.url=jdbc:mysql://localhost:3306/my-project?characterEncoding=utf8&serverTimezone=UTC datasource.username=root datasource.password=123456
配置类:
@Configuration public class MyBatisConfig implements EnvironmentAware { private Environment environment; @Override public void setEnvironment(final Environment environment) { this.environment = environment; } /** * 创建数据源(数据源的名称:方法名取为 XXXDataSource() 则 XXX 为数据库名称,该名称也就是数据源的名称) */ @Bean public DataSource druidDataSource() throws Exception { Properties props = new Properties(); props.put("driverClassName", environment.getProperty("datasource.driverClassName")); props.put("url", environment.getProperty("datasource.url")); props.put("username", environment.getProperty("datasource.username")); props.put("password", environment.getProperty("datasource.password")); return DruidDataSourceFactory.createDataSource(props); } /** * 根据数据源创建 SqlSessionFactory */ @Bean public SqlSessionFactory sqlSessionFactory() throws Exception { PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); SqlSessionFactoryBean fb = new SqlSessionFactoryBean(); // 指定数据源 fb.setDataSource(druidDataSource()); fb.setTypeAliasesPackage("com.project.domain"); // 指定 mapper 文件 fb.setMapperLocations(resolver.getResources("classpath:mapper/*.xml")); return fb.getObject(); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构