最近寫了一個數據庫同步的程序,見之前的博客,沒有用到spring框架來集成,用的時純Java代碼。然后,項目經理要我把程序合到spring boot框架中,因為涉及到多數據源,時間又比較緊,同意我直接將純Java代碼合進去。
用的jenkins進行部署,當部署成功后,發現出現一個錯誤:
定位到代碼處:
1 String resource = "com/huifu/newhl/nobel/config/mybatis-configuration.xml"; 2 InputStream inputStream = null; 3 try { 4 inputStream = Resources.getResourceAsStream(resource); 5 } catch (IOException e) { 6 e.printStackTrace(); 7 } 8 SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream, dataName); 9 SqlSession session = sessionFactory.openSession();
在第8行,報了nullPointer。那就奇怪了,明明在純Java代碼環境,可以正常運行,怎么通過spring boot打包發布到jboss上運行就不行了。百思不得其解,只好去問項目經理,項目經理還是有經驗,首先不要慌!仔細分析問題原因,建議到百度搜索JBOSS Resources.getResourceAsStream null,然后大概定位出問題,是因為我的xml文件放在src/main/java路徑下,當打包成war包的時候,並沒有生成相應的文件,導致查詢不到,我解壓了war包,到下面一看,果然沒有config目錄!
那當然找不到xml文件,自然報null錯誤,項目經理說要把xml文件放在src/main/resouces目錄下面,相同的路徑。至此,問題基本已經解決,即src/main/java和src/main/resouces的區別,可以參考這篇博客:https://blog.csdn.net/jsflzhong/article/details/52077075,maven打包的時候,認為src/main/java就是源代碼的文件,xml文件不會被打包進如jar或者war包。