Traditional spring projects may be mostly deployed to web containers, such as Tomcat. Spring Boot provides a super simple deployment method, which is to directly combine the application into a jar package, and only needs to execute java -jar in production to run.
This article describes how to create an executable jar package, and how to deploy, run, and stop.
In the first step, we need to add spring-boot-maven-plugin to pom.xml, and add it in the dependencies section below:
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins></build>
The second step is to save the pom.xml and run the mvn package command to package:
localhost:spring-boot-tutorial-executable majunwei$ mvn package -Dmaven.test.skip=true[INFO] Scanning for projects...[WARNING] [WARNING] Some problems were encountered while building the effective model for com.majunwei:spring-boot-tutorial-executable:jar:0.0.1-SNAPSHOT[WARNING] 'parent.relativePath' of POM com.majunwei:spring-boot-tutorial-executable:0.0.1-SNAPSHOT (/Users/majunwei/Documents/work/spring-boot-tutorial/spring-boot-tutorial-executable/pom.xml) points at com.majunwei:spring-boot-tutorial instead of org.springframework.boot:spring-boot-starter-parent, please verify your project structure @ line 6, column 10[WARNING] [WARNING] It is highly recommended to fix these problems because they threaten the stability of your building.[WARNING] [WARNING] For this reason, future Maven versions might no longer support building such malformed projects.[WARNING] [INFO] [INFO] -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- /Users/majunwei/Documents/work/spring-boot-tutorial/spring-boot-tutorial-executable/src/main/resources[INFO] skip non existing resourceDirectory /Users/majunwei/Documents/work/spring-boot-tutorial/spring-boot-tutorial-executable/src/main/resources[INFO] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ spring-boot-tutorial-executable ---[INFO] Nothing to compile - all classes are up to date[INFO] [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ spring-boot-tutorial-executable ---[INFO] Not copying test resources[INFO] [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ spring-boot-tutorial-executable ---[INFO] Not compiling test sources[INFO] [INFO] --- maven-surefire-plugin:2.18.1:test (default-test) @ spring-boot-tutorial-executable ---[INFO] Tests are skipped.[INFO] [INFO] --- maven-jar-plugin:2.6:jar (default-jar) @ spring-boot-tutorial-executable ---[INFO] [INFO] --- spring-boot-maven-plugin:1.5.6.RELEASE:repackage (default) @ spring-boot-tutorial-executable ---[INFO] --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
This completes the packaging operation and saves the big packages in the target directory. It should be around 10MB.
localhost:target majunwei$ ls -lhtotal 28232drwxr-xr-x 4 majunwei staff 136B 8 4 11:12 classesdrwxr-xr-x 3 majunwei staff 102B 8 4 11:14 generated-sourcesdrwxr-xr-x 3 majunwei staff 102B 8 4 11:14 maven-archiverdrwxr-xr-x 3 majunwei staff 102B 8 4 11:14 maven-status-rw-r--- 1 majunwei staff 14M 8 4 11:14 spring-boot-tutorial-executable-0.0.1-SNAPSHOT.jar-rw-r--- 1 majunwei staff 3.2K 8 4 11:14 spring-boot-tutorial-executable-0.0.1-SNAPSHOT.jar.originaldrwxr-xr-x 3 majunwei staff 102B 8 4 11:12 test-classes
This package contains dependent jar packages, classes and other information. If you want to carefully view the contents of this jar package, you can use the jar tvf command or unzip it to read:
$ jar tvf spring-boot-tutorial-executable-0.0.1-SNAPSHOT.jar
There is also a very small file for myproject-0.0.1-SNAPSHOT.jar.original in the target directory. This is the original jar file created by Maven before Spring Boot is packaged.
The third step is to use the java -jar command to run the application:
localhost:target majunwei$ java -jar spring-boot-tutorial-executable-0.0.1-SNAPSHOT.jar . ____ __ _ /// / ___'_ __ _ _(_)_ __ __ _ / / / / / ( ( )/___ | '_ | '_ | '_ // _` | / / / / / / / / / / / / / | | | | | | | | | | | | | | | | | | | (_| | ) ) ) ) ' |____| .__| |_| |_| | =============|_|==========================____/=/_/_/ :: Spring Boot :: (v1.5.6.RELEASE) 2017-08-04 12:05:58.917 INFO 909 --- [ main] osbtutorial.executable.Application : Starting Application v0.0.1-SNAPSHOT on localhost with PID 909 (/Users/majunwei/Documents/work/spring-boot-tutorial/spring-boot-tutorial-executable/target/spring-boot-tutorial-executable-0.0.1-SNAPSHOT.jar started by majunwei in /Users/majunwei/Documents/work/spring-boot-tutorial/spring-boot-tutorial-executable/target)2017-08-04 12:05:58.926 INFO 909 --- [ main] osbtutorial.executable.Application : No active profile set, falling back to default profiles: default2017-08-04 12:05:59.039 INFO 909 --- [ main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@27f8302d: startup date [Fri Aug 04 12:05:59 CST 2017]; root of context hierarchy2017-08-04 12:06:01.030 INFO 909 --- [ main] sbcetTomcatEmbeddedServletContainer: Tomcat initialized with port(s): 8080 (http)2017-08-04 12:06:01.050 INFO 909 --- [ main] o.apache.catalina.core.StandardService: Starting service [Tomcat]2017-08-04 12:06:01.053 INFO 909 --- [ main] org.apache.catalina.core.StandardEngine: Starting Servlet Engine: Apache Tomcat/8.5.162017-08-04 12:06:01.224 INFO 909 --- [ost-startStop-1] occC[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext2017-08-04 12:06:01.225 INFO 909 --- [ost-startStop-1] ostweb.context.ContextLoader : Root WebApplicationContext: initialization completed in 2199 ms2017-08-04 12:06:01.430 INFO 909 --- [ost-startStop-1] osbwservlet.ServletRegistrationBean : Mapping servlet: 'dispatcherServlet' to [/]2017-08-04 12:06:01.437 INFO 909 --- [ost-startStop-1] osbwservlet.FilterRegistrationBean : Mapping filter: 'characterEncodingFilter' to: [/*]2017-08-04 12:06:01.437 INFO 909 --- [ost-startStop-1] osbwservlet.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]2017-08-04 12:06:01.438 INFO 909 --- [ost-startStop-1] osbwservlet.FilterRegistrationBean : Mapping filter: 'httpPutFormContentFilter' to: [/*]2017-08-04 12:06:01.439 INFO 909 --- [ost-startStop-1] osbwservlet.FilterRegistrationBean : Mapping filter: 'requestContextFilter' to: [/*]2017-08-04 12:06:01.439 INFO 909 --- [ost-startStop-1] osbwservlet.FilterRegistrationBean : Mapping filter: 'requestContextFilter' to: [/*]2017-08-04 12:06:01.890 INFO 909 --- [ main] swsmmaRequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@27f8302d: startup date [Fri Aug 04 12:05:59 CST 2017]; root of context hierarchy2017-08-04 12:06:02.019 INFO 909 --- [ main] swsmmaRequestMappingHandlerMapping : Mapped "{[/]}" onto java.lang.String org.spring.boot.tutorial.executable.Application.home()2017-08-04 12:06:02.024 INFO 909 --- [ main] swsmmaRequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest)2017-08-04 12:06:02.024 INFO 909 --- [ main] swsmmaRequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)2017-08-04 12:06:02.062 INFO 909 --- [ main] oswshandler.SimpleUrlHandlerMapping : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]2017-08-04 12:06:02.062 INFO 909 --- [ main] oswshandler.SimpleUrlHandlerMapping : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]2017-08-04 12:06:02.129 INFO 909 --- [ main] oswshandler.SimpleUrlHandlerMapping : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]2017-08-04 12:06:02.344 INFO 909 --- [ main] osjeaAnnotationMBeanExporter : Registering beans for JMX exposure on startup2017-08-04 12:06:02.448 INFO 909 --- [ main] sbcetTomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)2017-08-04 12:06:02.458 INFO 909 --- [ main] osbtutorial.executable.Application : Started Application in 4.054 seconds (JVM running for 4.622)Step 4: Just like before, if you want to exit the application, press ctrl-c.
Download the source code of this tutorial
The above is all the content of this article. I hope it will be helpful to everyone's learning and I hope everyone will support Wulin.com more.