これは現在不可能であることがわかりました。OGNL は事実上、構成プロパティにアクセスできません。
回避策として、mybatis メーリング リストのこの投稿で提案されているように、構成パラメーターを読み取ってクエリ パラメーター マップに追加する単純なインターセプターを作成しました。正確にはきれいではありませんが、機能します。
インターセプター コード:
@Intercepts({
@Signature(type = Executor.class,
method = "query",
args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class})})
public class ConfigPropInterceptor implements Interceptor {
private final Map<String, Object> properties = new HashMap<String, Object>();
@Override
public Object intercept(Invocation invocation) throws Throwable {
Object param = invocation.getArgs()[1];
if (param instanceof Map) {
((Map<String, Object>)param).putAll(properties);
}
return invocation.proceed();
}
@Override
public Object plugin(Object target) {
return Plugin.wrap(target, this);
}
@Override
public void setProperties(Properties properties) {
for (String p : properties.stringPropertyNames()) {
this.properties.put(p, properties.getProperty(p));
}
}
}
構成 .xml での使用例:
<plugins>
<plugin interceptor="...ConfigPropInterceptor">
<property name="_issuerLocation" value="${issuer.location}"/>
</plugin>
</plugins>
この設定により、_issuerLocation
他のすべてと同様に OGNL 式で変数をテストできました。