美文网首页我爱编程
Spring Boot/Hello World!

Spring Boot/Hello World!

作者: 米刀灵 | 来源:发表于2016-09-27 13:42 被阅读259次

    创建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

    相关文章

      网友评论

        本文标题:Spring Boot/Hello World!

        本文链接:https://www.haomeiwen.com/subject/dmyfyttx.html