2016-04-05 19 views
2

Herhangi bir siparişin, kavanozlardan gelen sınıfların tomcat8'e yüklendiği yeri bilen biri var mı?Tomcat 8'de sınıf yolu ve jar dosyası yükleme sırası

Sunucumuz şu şekildedir: İki tam olarak aynı sunucuya sahibiz (donanım ve işletim sistemi). Her ikisi de java 1.7.65 çalıştırıyor ve 8.0.32 sürümüne yüklenmiş bir tomcat var. Başlatma ve VM parametreleri, uygulamaya özgü ayarların yanı sıra tam olarak aynıdır (ikinci makine sadece yedek bir sistemdir). Tek fark ip adresi ve tabiki hostname.

Tomcat7'den Tomcat8'e (her iki sistemde de) yakın zaman önce yapılan bir yükseltmeden sonra, slf4j'nin uygulama başlangıcında "birden fazla bağlantı ... buldu" mesajını uzun süre görmezden gelmemiz, bizi başka bir duruma getirdi ve bu da uygulamayı engelleyen bir hataya neden oldu. Doğru kayıttan - Sınıflandırmanın sıralanması/sıralanması. Bunun nedeni, bir sistem önce logback-classic-1.0.13.jar yükleniyor ve ikinci sistemde slf4j-log4j12-1.6.6.jar önce yüklenir. Yalnızca bir logback.xml dosyanız var ve log4j.xml dosyası kullanılmıyor ve bu nedenle yüklenen StaticLoggerBinder doğru olmadığı için günlük dosyalarında doğru dosyalar görünmüyor. sistemin-2

SLF4J: Class path contains multiple SLF4J bindings. 
SLF4J: Found binding in [jar:file:/home/backoffice/apache-tomcat-8.0.32/webapps/backoffice/WEB-INF/lib/slf4j-log4j12-1.6.6.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: Found binding in [jar:file:/home/backoffice/apache-tomcat-8.0.32/webapps/backoffice/WEB-INF/lib/logback-classic-1.0.13.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. 
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory] 
log4j:WARN No appenders could be found for logger (org.springframework.web.context.ContextLoader). 

(Evet, maven bağımlılıkları yoluyla bunu düzeltmek için ve ben kesinlikle yinelenen/gereksiz bağımlılıkları kaldırır biliyorum sistem-1

SLF4J: Class path contains multiple SLF4J bindings. 
SLF4J: Found binding in [jar:file:/opt/backoffice/apache-tomcat-8.0.32/webapps/backoffice/WEB-INF/lib/logback-classic-1.0.13.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: Found binding in [jar:file:/opt/backoffice/apache-tomcat-8.0.32/webapps/backoffice/WEB-INF/lib/slf4j-log4j12-1.6.6.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. 
16:50:26,740 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy] 
16:50:26,740 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml] 
16:50:26,741 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:/opt/backoffice/apache-tomcat-8.0.32/webapps/backoffice/WEB-INF/classes/logback.xml] 

Output

Çıktı benim pompamdan ... O :-))

Şimdi benim sorum şu ki, siparişin iki tamamen aynı sistemde farklı olması nasıl mümkün olabilir? Java, sınıfları, sınıf yolunda belirtildikleri sırayla yükler.

cevap

0

Tomcat, diğer Java programlarının yaptığı gibi sınıf yollarını çözmez, örn. CLASSPATH ortam değişkenini veya -classpath komut satırı bayrağını kullanarak. Ayrıca Tomcat'in sınıf yollarını nasıl çözdüğünü ve her büyük sürümle nasıl değiştiğini (bu sayede sorununuz neden olabilir) olabilir.

Geleceğinde Bunun üzerinde çok okuma görmek :) İşte başlayacak bir yer iyidir: Cevabınız için Understanding the Tomcat classpath

+0

teşekkür ederiz. Evet, tomcat ile bir şeyler yapmak zorunda olduğunu zaten biliyorduk çünkü sistemlerimizde yapılan son değişiklikler sadece tomcat versiyonlarının güncellemeleri oldu. Her neyse, yükleme yazılımlarının aynı yazılım sürümlerini çalıştıran iki özdeş sistem arasında nasıl ve neden farklı olabileceğini hala hayal edemiyorum ... Okumaya başlayacağım :) – limepix