带有环境变量的 java.lang.arrayindexoutofboundsexception

时间:2021-05-02 19:56:13

标签: java arrays spring spring-batch batch-processing

我正在研究从数据库读取的 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 ????

1 个答案:

答案 0 :(得分:-1)

为了解决这个问题,我只需要创建代表点的正则表达式。要做到这一点,我们需要转义 .. 有几种方法可以做到这一点,但最简单的方法可能是使用 \ (在 String 中需要写为“\”,因为 \ 在那里也很特殊,需要另一个 \ 被转义).

所以我的问题的解决方案是:

String[] token = ClassApp.split("\\.");

相关问题