java组织。阿帕奇。卡塔琳娜。果心标准语境。startInternal一个或多个侦听器无法启动
我在一个Java/Spring/ Apache Cxf
网络应用程序上工作,突然,当我做出一些明显幼稚的改变时,我发现了错误
25-Aug-2017 11:48:43.036 INFO [RMI TCP Connection(2)-127.0.0.1] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
log4j:WARN No appenders could be found for logger (org.apache.cxf.common.logging.LogUtils).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
25-Aug-2017 11:48:43.540 SEVERE [RMI TCP Connection(2)-127.0.0.1] org.apache.catalina.core.StandardContext.startInternal One or more listeners failed to start. Full details will be found in the appropriate container log file
25-Aug-2017 11:48:43.554 SEVERE [RMI TCP Connection(2)-127.0.0.1] org.apache.catalina.core.StandardContext.startInternal Context [] startup failed due to previous errors
[2017-08-25 11:48:43,586] Artifact jaxrs-tutorials:war exploded: Error during artifact deployment. See server log for details.
25-Aug-2017 11:48:49.258 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/Applications/Tomcat-8.5.16/webapps/manager]
25-Aug-2017 11:48:49.310 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/Applications/Tomcat-8.5.16/webapps/manager] has finished in [51] ms
我猜这是错误的主要原因
25-Aug-2017 11:48:43.540 SEVERE [RMI TCP Connection(2)-127.0.0.1] org.apache.catalina.core.StandardContext.startInternal One or more listeners failed to start. Full details will be found in the appropriate container log file
25-Aug-2017 11:48:43.554 SEVERE [RMI TCP Connection(2)-127.0.0.1] org.apache.catalina.core.StandardContext.startInternal Context [] startup failed due to previous errors
提供了项目结构
config
目录用于Java annotation based config
,下面提供了代码
AppConfig
文件
@Configuration
@ComponentScan(AppConfig.SERVICE_PACKAGE)
public class AppConfig {
public static final String BASE_PACKAGE = "mobi.puut";
public static final String SERVICE_PACKAGE = BASE_PACKAGE + ".services";
private static final String RESOURCES_PACKAGE = BASE_PACKAGE + ".rest";
private static final String PROVIDER_PACKAGE = BASE_PACKAGE + ".rest.provider";
public static final String API_BASE = "/api/*";
@ApplicationPath("/")
public class JaxRsApiApplication extends Application {
}
@Bean(destroyMethod = "shutdown")
public SpringBus cxf() {
return new SpringBus();
}
@Bean
@DependsOn("cxf")
public Server jaxRsServer(ApplicationContext appContext) {
JAXRSServerFactoryBean factory = RuntimeDelegate.getInstance().createEndpoint(jaxRsApiApplication(), JAXRSServerFactoryBean.class);
factory.setServiceBeans(restServiceList(appContext));
factory.setAddress("/" + factory.getAddress());
factory.setProviders(restProviderList(appContext, jsonProvider()));
return factory.create();
}
@Bean
public JaxRsApiApplication jaxRsApiApplication() {
return new JaxRsApiApplication();
}
@Bean
public JacksonJsonProvider jsonProvider() {
return new JacksonJsonProvider();
}
private List<Object> restServiceList(ApplicationContext appContext) {
return RestServiceBeanScanner.scan(appContext, AppConfig.RESOURCES_PACKAGE);
}
private List<Object> restProviderList(final ApplicationContext appContext,
final JacksonJsonProvider jsonProvider) {
final List<Object> providers = RestProviderBeanScanner.scan(appContext, PROVIDER_PACKAGE);
providers.add(jsonProvider);
return providers;
}
}
提供了WebInitializer
public class WebAppInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
servletContext.addListener(new ContextLoaderListener(createWebAppContext()));
addApacheCxfServlet(servletContext);
}
private void addApacheCxfServlet(ServletContext servletContext) {
CXFServlet cxfServlet = new CXFServlet();
ServletRegistration.Dynamic appServlet = servletContext.addServlet("CXFServlet", cxfServlet);
appServlet.setLoadOnStartup(1);
Set<String> mappingConflicts = appServlet.addMapping(AppConfig.API_BASE);
}
private WebApplicationContext createWebAppContext() {
AnnotationConfigWebApplicationContext appContext = new AnnotationConfigWebApplicationContext();
appContext.register(AppConfig.class);
return appContext;
}
}
我在平台上看到过类似的问题,但这些问题对我没有帮助,我几乎没有什么信息可以解决这个问题
我如何使用logger
获取更多信息,以及应该在哪里使用它们?此外,任何关于解决问题的见解都会有所帮助。我已经用mvn clean install
和mvn idea:idea
命令更新了JAR
文件
UPDATE
Tomcat Localhost Log
Tomcat Catalina Log
# 1 楼答案
我想写一个关于这个问题的详细答案,以及我为解决这个问题所采取的步骤
答:没有足够的日志信息。我查了一下
POM
发现了这个我为了
SLF4J
而排除了日志记录,我刚刚删除了排除XML标记以获取更多日志记录信息。所以变成这样B.现在,我得到了日志信息。我有这样的错误信息
您可以通过
ConflictingBeanDefinitionException
创建同名bean。虽然我对Spring
有一些经验,但我需要用Apache Cxf
创建一个项目,因此,为了这个目的,我需要克隆一个演示项目。它们有一个相同的实体User
和相同的definition - interface
和相同的implementation
。虽然我对项目中的所有类都有refactored
,而且似乎没有明显的错误,但我仍然有一个问题——我在接口的两个实现中保持了相同的bean名称"userService
实体中的
User2
类实体中的
User
类services
目录中的接口在
services
目录中接口的实现还有
error
,我用相同的bean名"userService"
注释了两个类。我不得不这样改变它,给豆子起一个不同的名字然后,这个错误就消失了。简而言之,错误
ConflictingBeanDefinitionException
是由于两个bean的名称相同,我只需要提供一个不同的名称C.我还有事情要解决。之后,当我运行程序时,我得到
这里的错误是
UnsatisfiedDependencyException
,并表示无法创建名为userService
的bean。好的,这是我的代码,并集成到项目中。未满足的依赖关系通过字段表示,即userDao
userDao
是IUserDao
接口的实例,它是@autowired
这样的下面是对代码的更多了解
我在
database
目录中有一个接口,并为用户实现了该接口。接口名为IUserDao
,看起来还有,实施
错误消息的后续部分是
NoSuchBeanDefinitionException
,应用程序找不到IUserDao
类型(类)的合格bean。在IUserDao
的实现中,我有所有的HQL
查询,代码以前工作得很好我必须花点时间思考,最后,我有一个直觉,可能是
database
层NOT
集成到了应用程序中。这是我用的configuration
显然,no数据库代码集成在
WebInitializer
中。我写了一个新类,提供了database connection
和hibernate integration
的所有信息,看起来然后,最后集成到}中用于{}配置的代码
WebInitializer
。这是我之前在{用
最后,一切正常。所以
config
目录看起来像SUMMERY
我必须通过三个错误来解决这个问题
ConflictingBeanDefinitionException
->;两个同名的豆子UnsatisfiedDependencyException
->;在类中有一个不正确使用的bean(= "userDao")
NoSuchBeanDefinitionException
->;代码是正确的,但需要在congig中添加datbase层,以便Spring IoC
找到bean我真诚地希望这将帮助一些人