日誌已由此應用程式開啟
常見問題 > 錯誤 > 例外 > 日誌已由此應用程式開啟
錯誤
您會看到類似這樣的訊息
java.io.IOException: Journal is already opened by this application.
at org.apache.activeio.journal.active.ControlFile.lock(ControlFile.java:71)
at org.apache.activeio.journal.active.LogFileManager.initialize(LogFileManager.java:120)
at org.apache.activeio.journal.active.LogFileManager.<init>(LogFileManager.java:101)
at org.apache.activeio.journal.active.JournalImpl.<init>(JournalImpl.java:99)
at org.apache.activemq.store.DefaultPersistenceAdapterFactory.createJournal(DefaultPersistenceAdapterFactory.java:198)
at org.apache.activemq.store.DefaultPersistenceAdapterFactory.getJournal(DefaultPersistenceAdapterFactory.java:134)
描述
每個訊息代理程式都需要有自己的目錄來儲存其日誌檔案等。此錯誤表示您有 2 個訊息代理程式共用相同檔案。
此例外常見的原因是您在同一部機器上使用相同的設定檔,指向相同目錄的方式執行兩個訊息代理程式。因此,一個解決方法是透過 Spring 的屬性語法參數化目錄名稱 - 或僅建立另一個設定檔,使第二個訊息代理程式使用不同的目錄。
此問題的另一個原因是,您在 JMS 用戶端中使用 vm://127.0.0.1 樣式的傳輸,且 JMS 連線在您初始化訊息代理程式之前就開始了。如果您建立 vm 傳輸連線,如果沒有訊息代理程式正在執行,它會自動建立一個;因此您可能會不小心建立 2 個訊息代理程式。解決方法是確保您使用的 JMS 連線工廠依賴於您正在設定的訊息代理程式(例如,在 Spring 中,在連線工廠上使用 depends-on 屬性使其依賴於訊息代理程式)。這將確保訊息代理程式在連線工廠之前初始化。
請小心訊息代理程式名稱和 URI
請確保不要在訊息代理程式的名稱中使用任何奇怪的字元,因為它們會被轉換為 URI,其中不允許使用底線之類的字元等等。
此問題也可能是由不佳的作業系統和 JVM 組合引起的