[Ngbatis源码学习] Ngbatis 源码阅读之 NgbatisContextInitializer
Ngbatis源码学习之 NgbatisContextInitializer
NgbatisContextInitializer
方法主要作用是为了初始化一些配置信息。包括 NebulaPoolConfig
连接池初始化、NgbatisConfig
Ngbatis的配置信息初始化、NebulaJdbcProperties
连接配置初始化等。并在初始化时加入了 NgbatisBeanFactoryPostProcessor
前置处理器。
NgbatisContextInitializer
涉及到了 ApplicationContextInitializer
的有关知识,请看上章。
NgbatisContextInitializer
主要执行了 initialize
函数:
@Override
public void initialize(ConfigurableApplicationContext context) {
Env.classLoader = context.getClassLoader();
ConfigurableEnvironment environment = context.getEnvironment();
NebulaPoolConfig nebulaPool = getNebulaPoolConfig(environment);
NgbatisConfig ngbatisConfig = getNebulaNgbatisConfig(environment);
// @author: Szt-1 fix #https://github.com/nebula-contrib/ngbatis/pull/54
if (environment.getProperty("nebula.hosts") != null) {
NebulaJdbcProperties nebulaJdbcProperties =
getNebulaJdbcProperties(environment)
.setPoolConfig(nebulaPool)
.setNgbatis(ngbatisConfig);
ParseCfgProps parseCfgProps = readParseCfgProps(environment);
context.addBeanFactoryPostProcessor(
new NgbatisBeanFactoryPostProcessor(nebulaJdbcProperties, parseCfgProps, context)
);
}
}
涉及到了全局环境配置信息和很多关于配置类,以下逐一讲解。
1. Env
Env
是 Ngbatis
存储框架的全局环境信息的类,包括如下参数:
public class Env {
// 类加载器
public static ClassLoader classLoader;
// 使用 fastjson 安全模式,规避任意代码执行风险
static {
ParserConfig.getGlobalInstance().setSafeMode(true);
}
private Logger log = LoggerFactory.getLogger(Env.class);
// 模板引擎 默认 beetl
private TextResolver textResolver;
// 结果集路由
private ResultResolver resultResolver;
// 参数解析器
private ArgsResolver argsResolver;
// 参数名格式化器
private ArgNameFormatter argNameFormatter;
// 解析的参数配置
private ParseCfgProps cfgProps;
// 应用上下文
private ApplicationContext context;
// 用户名
private String username;
// 密码
private String password;
// 连接是否支持重连
private boolean reconnect = false;
// 图空间
private String space;
// 主键生成器
private PkGenerator pkGenerator;
// 本地会话调度器
private SessionDispatcher dispatcher;
// xml 中标签所声明的信息或方法类
private MapperContext mapperContext;
// ...
}
在 NgbatisContextInitializer
中将 classLoader
赋值给了 Env
中的类加载器,以供之后使用。
关于 Env
的详解将在另外一篇文章中进行详细描述。
2. NebulaPoolConfig
NebulaPoolConfig
是 NebulaGraph
官方提供的连接池配置类,里面包括了很多配置项:
// 连接池中的最小连接数
private int minConnsSize = 0;
// 连接池中的最大连接数
private int maxConnsSize = 10;
// Socket 连接超时时间,单位毫秒
private int timeout = 0;
// 连接空闲时间,单位毫秒。当连接空闲时间超过当前数,将被删除。0 则永不删除。
private int idleTime = 0;
// 检查空闲连接的间隔时间,单位毫秒。-1 表示不检查。
private int intervalIdle = -1;
// 获得空闲连接的等待时间,单位毫秒。
private int waitTime = 0;
// 能正常运行的健康服务器在所有服务器中的最小比率。如果是 1 表示所有服务器都健康才能进行初始化。
private double minClusterHealthRate = 1;
// 设置为 true 设置 ssl 加密流量。
private boolean enableSsl = false;
// 如果启用 SSL,需要用到的 SSL 参数。
private SSLParam sslParam = null;
相对应的都可以在 Ngbatis
的 properties
配置中进行配置:
nebula.pool-config.min-conns-size=0
nebula.pool-config.max-conns-size=10
nebula.pool-config.timeout=0
nebula.pool-config.idle-time=0
nebula.pool-config.interval-idle=-1
nebula.pool-config.wait-time=0
3. NgbatisConfig
NgbatisConfig
是对 Ngbatis
进行了一些简单的配置:
/**
* yml 配置文件对应ngbatis属性的模型类
*/
public class NgbatisConfig {
/**
* session存活有效期
*/
public Long sessionLifeLength;
/**
* session健康检测间隔
*/
public Long checkFixedRate;
/**
* 是否使用 nebula-java 的 session pool 会话池
*/
public Boolean useSessionPool;
// ...
}
同样相对应的可以在 Ngbatis
的 properties
配置中进行配置:
nebula.ngbatis.session-life-length=100
ebula.ngbatis.check-fixed-rate=100
nebula.ngbatis.use-session-pool=false
4. NebulaJdbcProperties
NebulaJdbcProperties
主要配置 Ngbatis
有关于 NebulaGraph
的库信息配置数据:
/**
* Nebula 地址。由 hosts 切割而来
*/
private List<HostAddress> hostAddresses;
/**
* Nebula 多个库的地址。格式:ip:port, ip:port, ip:port, ....
*/
private String hosts;
/**
* Nebula 连接配置
*/
private NebulaPoolConfig poolConfig;
/**
* ngbatis 自定义配置
*/
private NgbatisConfig ngbatis;
/**
* 数据库用户名
*/
private String username;
/**
* 数据库密码
*/
private String password;
/**
* 当前所有的数据库空间
*/
private String space;
相对应的可在 Ngbatis
的 properties
配置中进行配置:
nebula.hosts=127.0.0.1
nebula.username=knqiufan
nebula.password=knqiufan
nebula.space=test
5. ParseCfgProps
将在其他文章中详细说明。
本文来自博客园,作者:knqiufan,转载请注明原文链接:https://www.cnblogs.com/knqiufan/p/18088865