我使用Spring的Gradle啓動插件(org.springframework.boot
),生成「一個」罐子一個罐子。它運行良好,當我運行java -jar app.jar
- 確實如預期的那樣。但是,此應用程序應該通過JNI使用Apache Commons Daemon作爲守護進程運行。此應用的以前版本建立在自制框架之上,我在守護進程配置中可以指定的主類中有start
和shutdown
方法。如何JNI掛鉤添加到由彈簧引導
我看到Main-Class變爲org.springframework.boot.loader.JarLauncher
,它沒有在其中的任何位置實現的start
和shutdown
方法或它的superclasses。有一個launch
方法,但我認爲這隻能用於運行與java -jar
罐子。
這裏是清單文件(絕密)通過反編譯一個罐子的gradle這個插件和內容生成:
Manifest-Version: 1.0
Start-Class: com.company.myapp.Application
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib/
Spring-Boot-Version: 1.5.6.RELEASE
Main-Class: org.springframework.boot.loader.JarLauncher
那麼我的問題是:我可以配置此gradle這個插件添加JNI掛鉤方法,以便他們正確運行我的應用程序的主類?我知道有一個Gradle的Shadow插件可以製作「超級」jar,我也可以放棄創建「超級」jar並分發到lib/
目錄(這是一個桌面應用程序)。但是,如果Spring Boot開發人員想到了這一點,並且有辦法做到這一點,我寧願使用它。
謝謝你的回覆@SlaterCodes。我還沒有嘗試這個解決方案。但是,正確關閉應用程序對我們也很重要。我們的解決方案是一個帶有'lib /'文件夾的小jar。以這種方式管理鉤子比較容易,因爲我們可以直接訪問它們,而不需要在超級罐子中使用Spring的JarLauncher。 –
@SergePoele感謝您的注意,我可能會這樣做,當我回到這個時候,讓它更多的生產準備就緒。我只是想答覆,如果有人想讓它至少起作用 – SlaterCodes