【发布时间】: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