使用ujorm访问数据库的程序启动慢,检查发现是执行OrmHandler.loadDatabase时耗时长.
跟踪的调用堆栈如下:
MetaDbService.create(MetaDatabase, Session) line: 135
MetaDatabase.create(Session) line: 385
OrmHandler.loadDatabase(UjoDecorator<UJO>...) line: 264
OrmHandler.loadDatabase(Class<UJO>) line: 211
MetaDbService.java的create方法代码片段:
boolean ddlOnly = false;
switch (ORM2DLL_POLICY.of(db)) {
case CREATE_DDL:
ddlOnly = true;
case CREATE_OR_UPDATE_DDL:
case VALIDATE:
case WARNING:
case INHERITED:
boolean change = isModelChanged(conn, news);///< 检查模型变化.这里耗时比较长
if (change && ddlOnly) {
if (news.getTables().size()<tableTotalCount) {
// This is a case of the PARTIAL DDL
return;
}
}
break;
case DO_NOTHING:
default:
return;
}
数据库结构没有变化时没有必要执行这个步骤。希望走DO_NOTHING路径。
如何设置ORM2DLL_POLICY呢?
http://ujorm.org/javadoc/org/ujorm/orm/metaModel/MetaParams.html#ORM2DLL_POLICY
public static final Key<MetaParams,Orm2ddlPolicy> ORM2DLL_POLICY
A policy to defining the database structure by a DDL. The default value is option: CREATE_OR_UPDATE_DDL.
在数据库配置文件中设置<orm2ddlPolicy>.
<database id="Database">
<orm2ddlPolicy>DO_NOTHING</orm2ddlPolicy> <!-- 默认:CREATE_OR_UPDATE_DDL -->
</database>