Deployment of war gagal di tomcat karena tidak dapat menginisialisasi konteks karena sudah ada konteks aplikasi root
Saya telah membenturkan kepala saya ini sejak beberapa hari. Dan saya benar-benar tidak mengerti dari mana kesalahan ini berasal. Saya sudah mengikuti beberapa utas tentang ini di SO, ini dan yang ini
26-Dec-2020 12:48:18.633 SEVERE [main] org.apache.catalina.core.StandardContext.listenerStart Exception sending context initialized event to listener instance of class [org.springframework.web.context.ContextLoaderListener]
java.lang.IllegalStateException: Cannot initialize context because there is already a root application context present - check whether you have multiple ContextLoader* definitions in your web.xml!
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:263)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:103)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4714)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5177)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:717)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:690)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:706)
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:978)
at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1848) at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
Saya telah menulis satu set API dan saya mencoba untuk menyebarkannya ke server kucing jantan. Dan selama penerapan, aplikasi saya mulai tetapi dibatalkan karena beberapa konteks lain sudah ada.
Mengapa aplikasi saya tidak berhasil dimulai? Saya hanya memiliki satu file perang di folder webapps saya dan saya telah menghapus sisanya.
Saya juga tidak mengerti file web.xml mana yang dibicarakannya.
Jawaban
Akhirnya saya menemukan pelakunya. Saya tidak tahu mengapa saya merasa dokumentasi sesi musim semi membutuhkan banyak pekerjaan. Saya bisa saja salah.
Bagaimanapun, saya menggunakan penginisialisasi yang meluas AbstractHttpSessionApplicationInitializer
, seperti yang disebutkan dalam dokumentasi.
public class SessionConfigInitializer extends AbstractHttpSessionApplicationInitializer {
public SessionConfigInitializer() {
super(SessionConfig.class);
}
}
Ketika saya melihat ke AbstractHttpSessionApplicationInitializer
dalamnya melakukan ini servletContext.addListener(new ContextLoaderListener(rootAppContext));
saat startup.
Memposting ini untuk berjaga-jaga jika orang lain jatuh dalam situasi ini dapat membantu mereka.
Anda harus melihat di mana Anda menginstal tomcat Anda dan melihat folder webapp , ada semua aplikasi web di folder ini. misalnya dalam kasus saya: C: \ Program Files \ Apache Software Foundation \ Apache Tomcat 8.0.27 \ webapps
atau lihat C: \ Program Files \ Apache Software Foundation \ Apache Tomcat 8.0.27 \ conf \ Catalina \ localhost jika ada aplikasi web lain di luar folder server tomcat.