创建POM:
创建一个Maven pom.xml文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
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.0.0</modelVersion>
<groupId>com.zzhblh</groupId>
<artifactId>testspringboot</artifactId>
<version>1.0-SNAPSHOT</version>
<!--不标注packaging的话,默认为jar-->
<packaging>jar</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.0.RELEASE</version>
</parent>
<!-- Spring默认使用jdk1.6,如果你想使用jdk1.8,你需要在pom.xml的属性里面添加java.version -->
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>
如果再次运行mvn dependency:tree,你将看到现在多了一些其他依赖,包括Tomcat web服务器和Spring Boot自身。
写一个Hello World:
创建一个单独的Java文件。Maven默认会编译src/main/java下的源码,所以你需要创建那样的文件结构,并添加一个名为src/main/java/Example.java的文件:
import org.springframework.boot.*;
import org.springframework.boot.autoconfigure.*;
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;
@RestController
@SpringBootApplication
public class Example {
@RequestMapping("/")
String home() {
return "Hello World!";
}
public static void main(String[] args) throws Exception {
SpringApplication.run(Example.class, args);
}
}
- @SpringBootApplication等于@Configuration,@EnableAutoConfiguration,@ComponentScan三个注解的组合。
- @EnableAutoConfiguration表示让Spring Boot根据类路径中的jar包依赖为当前项目进行自动配置。比如,添加了spring-boot-starter-web这个基础依赖,spring boot会自动添加tomcat和Spring MVC的依赖,并且自动对他们进行配置。
- @ComponentScan表示自动bean扫描注入,如果启动类在根包下面,Spring Boot会在根包下面搜索注有@Component, @Service, @Repository,@Controller注解的所有类,并将他们注册为Spring Beans,或根据需要在@ComponentScan注解上定义basePackages或者其他属性。
- spring boot的启动是靠一个名为Application的入口类来实现的,入口类其实就是一个标准的Java静态方法类,使用了一个对象SpringApplication的run方法来启动Spring Boot项目。由于Spring Boot会自动扫描@SpringBootApplication所在类的同级包以及下级包里的所有bean,所以,官方建议入口类放在最外层的包名下。比如:
com.zzhblh/Application.java
- spring boot封装所有配置信息为键值类型,你想改变默认配置,只需要向应用传入这个键值对就可以,比如我们想改变绑定端口为8081,那么你在main方法里传入“—server.port=8081”即可。
SpringApplication.run(SampleController.class, "--server.port=8081");
- spring boot工程的默认web容器是Tomcat,当然也可以根据需要修改,spring boot提供了对应的starters。先在pom文件中排除tomcat的starter
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
增加jetty依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
配置文件:
除了上面传参的方法,更常用的是使用配置文件,src/main/resource/application.properties
#内嵌tomcat配置
server.port=8080
#server.context-path= //如果没有值就不配置,可以使用默认,但不要在这里留空,会有错误
server.tomcat.uri-encoding=UTF-8
启动:
此时在项目根目录下执行mvn spring-boot:run启动应用
在浏览器输入http://localhost:8080/ ,你会看到Hello World!字样,这是一个web应用,使用了嵌入式的tomcat。总结下Spring Boot应用的启动流程:
- spring boot应用打包之后,生成一个fat jar,里面包含了应用依赖的jar包,还有Spring boot loader相关的类。
- Fat jar的启动Main函数是JarLauncher,它负责创建一个LaunchedURLClassLoader来加载/lib下面的jar,并以一个新线程启动应用的Main函数。
创建可执行的jar:
创建可执行的jar,我们需要将spring-boot-maven-plugin添加到pom.xml中,在dependencies节点后面插入spring boot插件:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
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.0.0</modelVersion>
<groupId>com.zzhblh</groupId>
<artifactId>testspringboot</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.0.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
此时在项目根目录下运行mvn package,查看target目录,你应该可以看到testspringboot-0.0.1-SNAPSHOT.jar,该文件大概有10Mb。想查看内部结构,可以运行$ jar tvf target/myproject-0.0.1-SNAPSHOT.jar
。在该目录下,你应该还能看到一个很小的名为testspringboot-0.0.1-SNAPSHOT.jar.original的文件,这是在Spring boot重新打包前,Maven创建的原始jar文件。可以使用java -jar命令运行该应用程序$ java -jar target/testspringboot-0.0.1-SNAPSHOT.jar
。同样在浏览器输入http://localhost:8080/, 你会看到Hello World!字样,这是一个web应用,使用了嵌入式的tomcat。ctrl-c退出。如果你仍然想生成war包(不包含内嵌的容器等),你需要把应用的主类改为继承SpringBootServletInitializer:
@SpringBootApplication
public class Example extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Example.class);
}
public static void main(String[] args) throws Exception {
SpringApplication.run(Example.class, args);
}
}
然后更新你的构建配置pom.xml,将packaging改为war,并将内嵌容器的依赖标记为provided。
<dependencies>
<!-- … -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<!-- … -->
</dependencies>
参考:
https://qbgbook.gitbooks.io/spring-boot-reference-guide-zh/content/II.%20Getting%20started/8.%20Introducing%20Spring%20Boot.html
http://www.jianshu.com/p/5ac18abc91f0