通过实现 EnvironmentAware 接口获取配置信息

参考:

实现 EnvironmentAware 接口将配置文件中的属性放置到系统环境变量中

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();
}
}
posted @   Higurashi-kagome  阅读(55)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示