Unix环境下部署Spring Boot Jar包启动失败求助
Hey there, let's work through this issue together—your Spring Boot app built with Maven is failing to start on a new Unix environment, and the error points to a CommandLineRunner execution failure. Here's how to dig into the root cause:
1. Enable Debug Mode for Detailed Auto-Configuration Reports
The error message explicitly mentions re-running with debug enabled—this is your first stop. Run your jar with the debug flag to get a full breakdown of what's happening during auto-configuration:
java -jar your-application.jar --debug
This report will show you which auto-configurations were applied, which were skipped, and why. It often reveals missing dependencies, misconfigured beans, or environment-specific issues that aren't visible in standard logs.
2. Pinpoint the Root Cause of the CommandLineRunner Failure
The stack trace shows the app is failing when executing a CommandLineRunner bean. The top-level IllegalStateException is just a wrapper—you need to look for the Caused by: section in your full logs (it might be further down than what you shared). This will tell you the actual error:
- Did your runner try to access a file that doesn't exist on the Unix environment (e.g., hardcoded Windows paths like
C:\data\file.txtinstead of Unix paths/opt/data/file.txt)? - Is there a database connection failure because the target environment's DB credentials/URL are different?
- Does the app lack permissions to read/write a directory or file on the Unix server?
3. Check Environment Differences
Unix environments can differ from your development setup in critical ways:
- JDK Version: Ensure the target Unix server has a JDK version compatible with your Spring Boot version. For example, Spring Boot 1.x typically requires JDK 8, while newer versions support JDK 11+. Run
java -versionon the target server to verify. - File Permissions: Make sure the user running the app has read access to the jar file itself, and any external files/directories your app relies on. Use
ls -lto check permissions andchmodif needed. - Environment Variables: If your app uses environment variables (e.g.,
${DB_PASSWORD}inapplication.properties), confirm these are set on the Unix server. You can print them withecho $VAR_NAME.
4. Validate Configuration Files
Double-check your application.properties or application.yml for environment-specific values:
- Are database URLs, file paths, or API endpoints hardcoded for your local environment instead of using environment-specific placeholders?
- Did you forget to copy a required configuration file (like
application-prod.properties) to the deployment directory?
5. Re-Build the Jar in a Unix Environment (Optional)
If you built the jar on a Windows machine, there's a tiny chance of line-ending issues in configuration files or scripts. Try running mvn clean package directly on the Unix server to build the jar locally, then test starting it.
Once you find the specific Caused by error, you can address it directly—whether it's fixing a path, setting permissions, or updating configuration values.
内容的提问来源于stack exchange,提问作者user9193174

