我正在研究从数据库读取的 spring 批处理示例,然后在处理器中进行一些处理,然后写入文件。
这是我的读者:
const body = {
data: {
school: 'yaba',
age: 'tolu',
message: {
content: 'now',
details: {
lastGreeting: true,
},
},
area: [
{
NY: true,
BG: true,
},
],
},
time: 'UTC',
class: 'Finals',
};
const spath1 = 'data/message';
const spath2 = 'data/message/details/lastGreeting';
const spath3 = 'data/area/NY';
const spath4 = 'data/area/NY/Test';
console.log(`${spath1}: `, isPathExists(body, spath1.split('/'), 0));
console.log(`${spath2}: `, isPathExists(body, spath2.split('/'), 0));
console.log(`${spath3}: `, isPathExists(body, spath3.split('/'), 0));
console.log(`${spath4}: `, isPathExists(body, spath4.split('/'), 0));
function isPathExists(data, pathArr, i) {
const key = pathArr[i];
if (Array.isArray(data)) {
for (let value of data) {
if (isObject(value)) return isPathExists(value, pathArr, i);
}
} else if (data.hasOwnProperty(key)) {
if (key === pathArr[pathArr.length - 1]) return true;
return isPathExists(data[key], pathArr, i + 1);
} else return false;
return true;
}
function isObject(a) {
return !!a && a.constructor === Object;
}
在“ reader.setSql(query(ClassApp))”中,我调用了一个字符串类型的函数“query”,该函数对我应该放入 reader.setSql 的 sql 查询进行更改。这是功能:
public JdbcCursorItemReader<FichierEclate> readerDB(){
JdbcCursorItemReader<FichierEclate> reader = new JdbcCursorItemReader<FichierEclate>();
reader.setDataSource(ds);
reader.setSql(query(ClassApp));
reader.setRowMapper(new FichierEclateRowMapper());
return reader;
}
此函数将一个字符串变量作为输入,并对其进行拆分以在 sql 查询中使用其部分,如代码所示。
我的问题: 当静态声明变量“ClassApp”和“country”时,意思是,当我给它们值只是为了测试批处理作业时,一切正常,我得到了我想要的结果。 一旦我将它们更改为环境变量,我就会收到此错误
public String query(String ClassApp) {
if (ClassApp != null && !ClassApp.trim().equals(""))
{ String[] token = ClassApp.split(".");
String tableName="TF01_TRANSFERT_"+Country;
String QUERY_FIND_FILES =
"SELECT TF01TFID, TF01APPCLS, TF01APPLI, TF01NCPTE, TF01NLOT, FROM" +tableName+ "WHERE TF01APPCLS='"+ token[0] +"' AND TF01APPLI='"+ token[1] +"' AND TF01STID=3 ";
return QUERY_FIND_FILES; }
else return result;
}
这些变量应该是环境变量,我按照截图所示制作了这个 enter image description here
然后我使用:
java.lang.arrayindexoutofboundsexception 0
所以大家能帮我解决这个问题吗? 当这些变量从静态获取值时,一切都正常吗?但是当更改为 ENV.VAR 时,我遇到了这个错误 java.lang.arrayindexoutofboundsexception ????
答案 0 :(得分:-1)
为了解决这个问题,我只需要创建代表点的正则表达式。要做到这一点,我们需要转义 .. 有几种方法可以做到这一点,但最简单的方法可能是使用 \ (在 String 中需要写为“\”,因为 \ 在那里也很特殊,需要另一个 \ 被转义).
所以我的问题的解决方案是:
String[] token = ClassApp.split("\\.");