IIB v10.0.0.18中JavaCompute节点读取文件路径问题咨询
解决IIB v10 JavaCompute节点读取文件找不到的问题
嘿,我来帮你搞定这个FileNotFound的问题~在IIB v10里,JavaCompute节点的文件读取路径逻辑和普通Java程序不太一样,下面给你几个靠谱的解决方案,按推荐程度排序:
1. 放在项目的Resources文件夹(最推荐,随项目部署)
这是最稳妥的方式,文件会跟着你的项目一起打包到BAR文件里,部署到任何环境都不用单独拷贝:
- 先在IIB Toolkit里给你的项目创建一个
Resources文件夹(右键项目 → New → Folder,命名为Resources) - 把
schema.json直接拖到这个文件夹里 - 别再用
File类读取了!因为打包后资源会被嵌入到BAR里的类路径中,用类加载器读取才对,代码改成这样:// 用类加载器获取输入流 InputStream schemaStream = getClass().getClassLoader().getResourceAsStream("schema.json"); // 如果需要转成File对象,可以临时写入本地临时文件,或者直接用流处理 // 比如用Jackson的话,直接从流读:ObjectMapper mapper = new ObjectMapper(); JsonNode schema = mapper.readTree(schemaStream);
2. 放在Integration Server的工作目录
如果一定要用new File("schema.json")这种相对路径写法,得把文件放到Integration Server的默认工作目录:
- 找到你的Integration Server的work目录:
- Windows默认路径:
C:\ProgramData\IBM\MQSI\components\<你的集成服务器名称>\work - Linux默认路径:
/var/mqsi/components/<你的集成服务器名称>/work - 也可以用命令查:
mqsireportproperties <集成服务器名称> -o ComIbmServerManager -n workingDirectory
- Windows默认路径:
- 把
schema.json放到这个目录里,你的原代码File schemaFile = new File("schema.json");就能正常找到文件了
3. 使用绝对路径(不推荐,灵活性差)
如果上面两种方式都不适合,直接写绝对路径也行,但换环境就得改代码,不太方便:
- 代码改成:
// Windows示例 File schemaFile = new File("C:/IIB_Resources/schema.json"); // Linux示例 File schemaFile = new File("/opt/iib_resources/schema.json"); - 注意:运行IIB的用户(比如mqm用户)必须有这个路径的读权限,否则还是会报错
测试时的小提示
在IIB Toolkit里调试消息流时,默认工作目录是Toolkit的临时工作区,比如Windows下可能是C:\Users\<你的用户名>\IBM\IntegrationToolkit10\workspace\.metadata\.plugins\com.ibm.etools.mft.server\server\<集成服务器名称>\work,如果想在调试时用相对路径,把文件放到这个临时目录也行,但还是推荐用Resources文件夹的方式,调试和部署一致。
内容的提问来源于stack exchange,提问作者Kingo Mostafa
相关产品推荐
相关产品推荐

