又是Tomcat的問題。我試圖在Tomcat上運行一個Spring專案,構建階段沒有問題,但我一直收到這個部署錯誤。組態檔的內容如下。 MySpringMvcDispatcherServletInitializer.java
。package com.luv2code.springdemo.config。
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
public class MySpringMvcDispatcherServletInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
// TODO 自動生成的方法存根。
return null。
}
@Override; }
protected Class<?>[] getServletConfigClasses() {
return new Class[ ] { DemoAppConfig.class };
}
@Override
protected String[] getServletMappings() {
return new String[] { "/"/span> };
}
}
DemoAppConfig.java
package com.luv2code.springdemo.config。
import java.beans.PropertyVetoException;
import java.util.Properties。
import java.util.logging.Logger;
import javax.sql.DataSource;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean。
import org.springframework.context.annotation.ComponentScan。
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource。
import org.springframework.core.env.Environment;
import org.springframework.orm.hibernate5.HibernateTransactionManager;
import org.springframework.orm.hibernate5.LocalSessionFactoryBean;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer。
import org.springframework.web.servlet.view.InternalResourceViewResolver;
import com.mchange.v2.c3p0.ComboPooledDataSource;
@Configuration
@EnableWebMvc
@EnableTransactionManagement
@ComponentScan("com.luv2code.springdemo")
@PropertySource({ "classpath:persistence-mysql.properties" })
public class DemoAppConfig implements WebMvcConfigurer {
@Autowired[/span
private 環境 env;
private Logger logger = Logger.getLogger(getClass().getName())。
//為ViewResolver定義一個bean。
@Bean
public DataSource myDataSource() {
//>創建連接池
ComboPooledDataSource myDataSource = new ComboPooledDataSource() 。
//設定jdbc驅動。
try {
myDataSource.setDriverClass("com.mysql.jdbc.Driver"/span>)。
}
catch (PropertyVetoException exc) {
throw new RuntimeException(ex)。
}
//為理智起見,讓我們記錄url和用戶...以確保我們正在讀取資料。
logger.info("jdbc.url=" env.getProperty("jdbc.url") )。)
logger.info("jdbc.user=" env.getProperty("jdbc.user") )。)
//設定資料庫連接道具。
myDataSource.setJdbcUrl(env.getProperty("jdbc.url"))。
myDataSource.setUser(env.getProperty("jdbc.user") )。
myDataSource.setPassword(env.getProperty("jdbc.password") )。
//設定連接池的道具。
myDataSource.setInitialPoolSize(getIntProperty("connection.pool.initialPoolSize"))。
myDataSource.setMinPoolSize(getIntProperty("connection.pool.minPoolSize") )。
myDataSource.setMaxPoolSize(getIntProperty("connection.pool.maxPoolSize"))。
myDataSource.setMaxIdleTime(getIntProperty("connection.pool.maxIdleTime"))。
return myDataSource。
}
private Properties getHibernateProperties() {
//set hibernate properties
Properties props = new Properties()。
props.setProperty("hibernate.dialect", env.getProperty("hibernate.dialect"))。)
props.setProperty("hibernate.show_sql", env.getProperty("hibernate.show_sql") )。)
return props;
}
//需要一個輔助方法。
///讀取環境屬性并轉換為int。
private int getIntProperty(String propName) {
String propVal = env.getProperty(propName)。
//現在轉換為int。
int intPropVal = Integer.parseInt(propVal)。
return intPropVal;
}
@Bean
public LocalSessionFactoryBean sessionFactory(){
//>創建會話因子
LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean()。
//設定屬性 LocalSessionFactoryBean()
sessionFactory.setDataSource(myDataSource())。
sessionFactory.setPackagesToScan(env.getProperty("hibernate.packagesToScan"/span>))。
sessionFactory.setHibernateProperties(getHibernateProperties())。
return sessionFactory。
}
@Bean[/span
@Autowired[/span
public HibernateTransactionManager transactionManager(SessionFactory sessionFactory) {
//在會話工廠的基礎上設定事務管理器
HibernateTransactionManager txManager = new HibernateTransactionManager() 。
txManager.setSessionFactory(sessionFactory)。
return txManager。
}
Tomcat日志
26-2021 23: 26: 05. 372 SEVERE [371] org.apache.catalina.startup.HostConfig.deployDescriptor 在部署描述符[C:Program FilesTomcatconfCatalinalocalhostweb-customer-rest-demo.xml]時出錯。
java.lang.IllegalStateException。啟動兒童時出錯
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:729)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:698)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:696)
at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:690)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:538)
at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1690)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.tomcat.util.moder.BaseModelMBean.invoke(BaseModelMBean.java:293)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
at org.apache.catalina.manager.ManagerServlet.check(ManagerServlet.java:1614)
at org.apache.catalina.manager.ManagerServlet.deploy(ManagerServlet.java:1026)
at org.apache.catalina.manager.ManagerServlet.doGet(ManagerServlet.java:357)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:655)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:764)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.apache.catalina.filters.HttpHeaderSecurityFilter.doFilter(HttpHeaderSecurityFilter.java:126)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:667)
at org.apache.catalina.valts.RequestFilterValve.process(RequestFilterValve.java:378)
at org.apache.catalina.values.RemoteAddrValve.invoke(RemoteAddrValve.java:56)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135)
at org.apache.catalina.valts.ErrorReportValve.invoke(ErrorReportValve.java:92)
at org.apache.catalina.valls.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1726)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
原因是:org.apache.catalina.LifecycleException。啟動組件[StandardEngine[Catalina].StandardHost[localhost].StandardContext[/web-customer-rest-demo]]失敗。
at org.apache.catalina.util.LifecycleBase.handleSubClassException(LifecycleBase.java:440)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:198)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:726)
... 44 more
原因是: java.lang.NoClassDefFoundError: org/springframework/core/metrics/ApplicationStartup
at org.springframework.context.support.AbstractApplicationContext.<init>(AbstractApplicationContext.java:229)
at org.springframework.context.support.AbstractRefreshableApplicationContext.<init>(AbstractRefreshableApplicationContext.java:81)
at org.springframework.context.support.AbstractRefreshableConfigApplicationContext.<init>(AbstractRefreshableConfigApplicationContext.java:51)
at org.springframework.web.context.support.AbstractRefreshableWebApplicationContext.<init>(AbstractRefreshableWebApplicationContext.java:101)
at org.springframework.web.context.support.AnnotationConfigWebApplicationContext.<init>(AnnotationConfigWebApplicationContext.java:84)
at org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer.createServletApplicationContext(AbstractAnnotationConfigDispatcherServletInitializer.java:74)
at org.springframework.web.servlet.support.AbstractDispatcherServletInitializer.registerDispatcherServlet(AbstractDispatcherServletInitializer.java:81)
at org.springframework.web.servlet.support.AbstractDispatcherServletInitializer.onStartup(AbstractDispatcherServletInitializer.java:63)
at org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:172)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5219)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
... 45 more
原因是:java.lang.ClassNotFoundException: org.springframework.core.metrics.ApplicationStartup
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1407)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1215)
... 56 more
26-2021 23:26:05. 377 INFO [371] org.apache. catalina.startup.HostConfig.deployDescriptor部署描述符[C:Program FilesTomcatconfCatalinalocalhostweb-customer-rest-demo.xml]已在[11 332] ms完成部署。
web-customer-rest-demo.xml
<?xml version="1.0" encoding="UTF-8"?>
<Context docBase="C:UsersЕгорDocumentsNetBeansProjectsweb-customer-rest-demo argetspring-crm-rest"path="/web-customer-rest-demo"/>
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0"/span> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.00</modelVersion>
<groupId>com.luv2code.springdemo</groupId>
<artifactId>web-customer-rest-demo</artifactId>
<版本>1.0.0</version>
<packaging>war</packaging>
<屬性>
<springframework.version>5.0.6.RELEASE</springframework.version>
<hibernate.version>5.4.1.Final</hibernate.version>
<mysql.connector.version>5.1.45</mysql.connector.version>
<c3po.version>0.9.5.2</c3po.version>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<依賴性>
<!-- Spring -->
<依賴性>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<版本>${springframework.version}</version>
</dependency>
<依賴性>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<版本>${springframework.version}</version>
</dependency>
<依賴性>
<groupId>org.springframework</groupId>
<artifactId> spring-orm</artifactId>
<版本>${springframework.version}</version>
</dependency>
<!-- 添加Jackson for JSON converters -->
<依賴性>
<groupId>com.speedxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<版本>2.9.5</version>
</dependency>
<! -- Hibernate -->
<依賴性>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<版本>${hibernate.version}</version>
</dependency>
<!-- MySQL -->
<依賴性>
<groupId> mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<版本>${mysql.connector.version}</version>
</dependency>
<!--C3PO-->
<依賴性>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<版本>${c3po.version}</version>
</dependency>
<!-- Servlet JSP JSTL-->
<依賴性>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<版本>3.1.0</version>
</dependency>
<依賴性>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<版本>2.3.1</version>
</dependency>
<依賴性>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<版本>1.2</version>
</dependency>
<!--以彌補java 9不包括jaxb -->
<依賴性>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<版本>2.3.0</version>
</dependency>
<依賴性>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<版本>5.3.9</version>
<type>jar</type>
</dependency>
</dependencies>
<build>
<finalName>spring-crm-rest</finalName>
<plugins>
<!-- 構建一個Web應用程式Archive (WAR)檔案,從專案輸出的
和它的依賴性。-->
<插件>
<!-- 添加Maven 坐標 (GAV) for: maven-war-plugin -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<版本>3.2.0</version>
</plugin>
</plugins>
</build>
<name>web-customer-rest-demo</name>
</project>
"看起來你的帖子主要是代碼,請增加一些細節。" 我想知道這是誰編出來的?
uj5u.com熱心網友回復:
缺少的類org.springframework.core.metrics.ApplicationStartup屬于spring-core,出現在5.3版本中。
從你的pom.xml來看,你的spring-context版本為5.3.9,它對同一版本的spring-core有依賴性。然而,Maven必須選擇版本5.0.6.RELEASE,這是你的其他Spring依賴項的依賴。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/319426.html
標籤:
