Spring Boot Legacy集成H2 Console部署Tomcat5.5启动报错求助
Let's break down the issue you're facing and walk through practical fixes step by step. That generic "Error starting ApplicationContext" message is just a top-level warning—we need to dig into the actual root cause hiding beneath it.
First: Get the Full Error Details
The message mentions enabling debug mode to view the auto-configuration report. Here's how to do that for your Tomcat deployment:
- Add
debug=trueto yourapplication.properties - Check Tomcat's
catalina.outlog file (or localhost-specific logs) for the complete stack trace and auto-configuration failure details. This will tell us exactly which bean or configuration is breaking things.
Common Root Causes & Targeted Fixes
1. H2 Version Compatibility with Legacy Tomcat
Tomcat 5.5 is a very old container (released in 2007) built for JDK 1.5+/Servlet 2.4. H2 1.4.196 requires JDK 1.6+, but newer H2 versions often drop support for legacy environments. Try rolling back to a more compatible H2 version:
<!-- Replace your current H2 dependency in pom.xml --> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <version>1.3.176</version> <scope>runtime</scope> </dependency>
The 1.3.x branch of H2 is explicitly built to support older JDKs and containers, which should play much nicer with Tomcat 5.5.
2. Resolve Servlet API Conflicts
Spring Boot Legacy brings in its own Servlet API dependencies, but Tomcat 5.5 has a built-in Servlet 2.4 implementation. Classpath conflicts here are a common culprit for application context failures. Fix this by excluding the conflicting dependency:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> </exclusion> </exclusions> </dependency>
This forces your app to use Tomcat's native Servlet API instead of the one bundled with Spring Boot.
3. Disable Problematic Auto-Configurations
Spring Boot's auto-configuration might be trying to set up beans that aren't compatible with Tomcat 5.5. Try disabling specific auto-config classes related to data sources or H2:
Add this to your application.properties:
# Disable conflicting auto-configurations spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,org.springframework.boot.autoconfigure.h2.H2ConsoleAutoConfiguration
Then manually configure your DataSource in a custom @Configuration class:
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.jdbc.datasource.DriverManagerDataSource; import javax.sql.DataSource; @Configuration public class LegacyDataSourceConfig { @Bean public DataSource dataSource() { DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setDriverClassName("org.h2.Driver"); dataSource.setUrl("jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE"); dataSource.setUsername("sa"); dataSource.setPassword(""); return dataSource; } }
For the H2 console, since auto-configuration is disabled, register the servlet manually in your web.xml:
<servlet> <servlet-name>H2Console</servlet-name> <servlet-class>org.h2.server.web.WebServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>H2Console</servlet-name> <url-pattern>/h2-console/*</url-pattern> </servlet-mapping>
4. Verify JDK Version
Ensure your Tomcat 5.5 is running on JDK 1.6 or higher. H2 1.4.x won't work on JDK 1.5, and even 1.3.x might have stability issues. Check your Tomcat startup script to confirm the JDK path and version.
Final Deployment Steps
After applying any of these fixes:
- Clean your build (
mvn clean installfor Maven) - Clear Tomcat's
webappsandworkdirectories to remove old artifacts - Redeploy and check the logs again for specific errors
内容的提问来源于stack exchange,提问作者Simo Elmou

