解決springboot項目打成jar包後運行時碰到的小坑
項目打成jar包後運行時的坑
問題
我的springboot項目中有用的一段代碼是往static目錄下添加文件獲取路徑的代碼如下
String path=ResourceUtils.getURL("classpath:static/task").getPath().replace("%20"," ");
部署阿裡雲的服務器上,通過運行jar包的形式運行的時候,發現運行到這部分代碼的時候,獲取到staic/task路徑後通過路徑創建文件的時候會出現問題
- windows系統會報異常
- linux系統會在跟jar同級目錄下創建獲取的目錄及文件夾)
顯然這些都不是我們想要的
解決辦法
保持原來的項目結構,將jar包解壓後通過運行springboot啟動類來啟動項目
解壓jar命令:
jar xvf 文件名.jar 解壓到當前目錄
運行class命令可參考
nohup java -cp .:/opt/homework/BOOT-INF/lib/* lemon.homework.HomeworkApplication >/opt/homework/temp.txt
後臺運行class且加入依賴的jar包並將日志文件輸出至temp.txt:
打jar包後運行提示找不到界面
用的thymeleaf模版,把html文件放在resources的templates目錄下面。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>
控制層代碼為:
@RequestMapping("login") public String login(String code, HttpServletResponse response, HashMap<String, Object> map) { logger.debug("code:" + code); return "/login"; }
在eclipse訪問是沒有問題的,可以正常訪問到界面。
但是打jar包後,java -jar運行時,提示找不到login模版。
去掉視圖名稱中的"/"就好瞭。
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- springboot框架的全局異常處理方案詳解
- SpringBoot整合log4j日志與HashMap的底層原理解析
- JAVA SpringBoot統一日志處理原理詳解
- 實戰SpringBoot集成JWT實現token驗證
- springboot集成swagger3與knife4j的詳細代碼