【问题标题】:java.lang.arrayindexoutofboundsexception with environment variables [duplicate]带有环境变量的 java.lang.arrayindexoutofboundsexception [重复]
【发布时间】:2021-05-02 19:56:13
【问题描述】:

我正在研究从 db 读取然后在处理器中进行一些处理然后写入文件的 spring 批处理示例。

这是我的读者:

public JdbcCursorItemReader<FichierEclate> readerDB(){

         JdbcCursorItemReader<FichierEclate> reader = new JdbcCursorItemReader<FichierEclate>();

         reader.setDataSource(ds);

         reader.setSql(query(ClassApp));

         reader.setRowMapper(new FichierEclateRowMapper());

         return reader;

       }

在“reader.setSql(query(ClassApp))”中,我调用了一个字符串类型的函数“query”,它对我应该放入 reader.setSql 的 sql 查询进行更改。这是函数:

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;

       }

此函数将字符串变量作为输入,并对其进行拆分以在 sql 查询中使用其部分,如代码所示。

我的问题: 当变量“ClassApp”和“country”被静态声明时,意思是,当我为它们提供值只是为了测试批处理作业时,一切正常,我得到了我想要的结果。 一旦我将它们更改为环境变量,我就会收到此错误

java.lang.arrayindexoutofboundsexception 0

这些变量应该是 env 变量,我做了这个,如屏幕截图所示 enter image description here

然后我用 :

给他们打电话
private  String ClassApp=System.getenv("ClassApp");

   private  String Country=System.getenv("Country");

任何人都可以帮我解决这个问题吗? 当这些变量以静态方式获取值时,一切都正常吗?但是当更改为 ENV.VAR 时,我得到了这个错误 java.lang.arrayindexoutofboundsexception ????

【问题讨论】:

  • 请集中你的问题!您的 arrayindexoutofboundsexception 是 ClassApp 具有意外值的结果。只需发布您对ClassApp 的期望值并删除对您的阅读器、sql 以及坦率地说第二个代码块的引用。一旦你输入了错误的值query,就已经太迟了。
  • 感谢您的评论,我附上了屏幕截图,只需单击此“在此处输入图像描述”,您将看到我如何添加这些变量及其值
  • 问题已解决dd!!非常感谢你的帮助:)

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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2015-06-27
    • 1970-01-01
    • 1970-01-01
    • 2021-11-03
    • 2013-06-02
    • 2019-01-17
    • 1970-01-01
    • 2021-09-17
    • 1970-01-01
    相关资源
    最近更新 更多