`
liujiekasini0312
  • 浏览: 147482 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Spring Boot 官方文档学习(一)入门及使用

 
阅读更多

官方文档:http://docs.spring.io/spring-boot/docs/1.4.0.RELEASE/reference/htmlsingle/

个人说明:本文内容都是从为知笔记上复制过来的,样式难免走样,以后再修改吧。另外,本文可以看作官方文档的选择性的翻译(大部分),以及个人使用经验及问题。
其他说明:如果对Spring Boot没有概念,请先移步上一篇文章Spring Boot 学习。本篇原本是为了深入了解下Spring Boot而出现的。
一、内置Servlet Container:
此外,你仍然可以部署Spring Boot项目到任何兼容Servlet3.0+的容器。
二、使用Spring Boot。
你可以像使用标准的Java库文件一样使用Spring Boot。简单的将需要的spring-boot-*.jar添加到classpath即可。
Spring Boot不要求任何特殊的工具集成,所以可以使用任何IDE,甚至文本编辑器。
只是,仍然建议使用build工具:Maven 或 Gradle。
Spring Boot依赖 使用org.springframework.bootgroupId
通常,让你的Maven POM文件继承spring-boot-starter-parent,并声明一个或多个 Starter POMs依赖即可。Spring Boot也提供了一个可选的 Maven Plugin来创建可执行的jars。 如下:
需要注意的是,spring-boot-starter-parent是一个非常好的方法,但并不适用于所有情况。有时你需要继承其他的POM,或者你不喜欢默认的设置。-- 办法见后面。
三、安装Spring Boot CLI。
这是一个命令行工具,可以执行Groove脚本。是执行一个Spring Boot的最快途径。
-- 好吧,Linux下无敌,Win下还是休息吧。
四、开发一个简单的Spring Boot应用--使用最原始的方式。
务必注意:前提是maven + jdk。
1、创建一个文件夹。SpringBootSample01
2、新建一个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.example</groupId>
    <artifactId>myproject</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.4.0.RELEASE</version>
    </parent>
    <!-- Additional lines to be added here... -->
</project>
复制代码
3、上面没有添加任何依赖,但仍然可以build。命令行:mvn package。注意,是当前路径下 //SpringBootSample01/ 。
当然,你也可以使用IDE,不过使用文本编辑器会让我们对它更理解。
4、现在需要添加依赖 -- 其实就是把依赖的jar添加到buildpath。
由于我们已经继承了spring-boot-starter-parent,而spring-boot-starter-parent又提供了dependency-management,所以我们可以忽略被选中依赖的版本。
在添加依赖之前,我们先看一下现在已有什么:mvn dependency:tree。该命令会打印一个当前项目的依赖树。
结果表明,当前没有任何依赖。
  
OK,现在我们添加一个Starter 模块。
复制代码
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>
复制代码
   
现在再次查看一下依赖树。
  
可以看出,spring-boot-starter-web 包含了很多内容,spring-webmvc、spring-web、jackson、validation、tomcat、starter。
5、现在就可以开始写代码了。
由于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
@EnableAutoConfiguration
public class Example {
    @RequestMapping("/")
    String home() {
        return "Hello World!";
    }
    public static void main(String[] args) throws Exception {
        SpringApplication.run(Example.class, args);
    }
}
复制代码
这里我们只需要关心@EnableAutoConfiguration 即可。这个注解是让Spring Boot猜测你想怎么配置Spring,但实际上,它是根据你添加到classpath中的依赖来判断的。
注意,自动配置 可以配合 Starter POMs 一起工作,但二者不是捆绑到一起的。你仍然可以将Starter POMs中的依赖单独拣出使用,Spring Boot还是会自动配置。
6、启动项目。由于我们使用了spring-boot-starter-parentPOM,所以可以使用 mvn spring-boot:run来启动项目(根路径)。
启动之后就可以访问了,默认地址:http://localhost:8080/
7、打包。executable jars 又称 fat jars,是可以直接在生产环境中运行的,包含所有编译生成的class文件以及依赖包。
注意,Spring Boot的这种打包方式需要使用Spring Boot提供的spring-boot-maven-plugin。
复制代码
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>
复制代码
注意,spring-boot-starter-parentPOM中包含了<executions>的配置信息,绑定了repackagegoal (maven)。如果你不使用parent POM,你需要自己来声明这个配置信息。
现在,可以打包了: mvn package 。
现在,你可以在/target目录下看到myproject-0.0.1-SNAPSHOT.jar ,大约10 Mb左右。可以通过 jar tvf target/myproject-0.0.1-SNAPSHOT.jar来查看其中的内容。
此外,在/target目录下,还可以看到 myproject-0.0.1-SNAPSHOT.jar.original,这是Maven打包出来的---在Spring Boot repackage 之前。
8、执行。正常的jar执行:java -jar target/myproject-0.0.1-SNAPSHOT.jar ,启动信息如下:
执行 ctrl+c,退出。
五、Dependency Management
每个版本的Spring Boot都提供了一个依赖列表。这个列表包含了你可能通过Spring Boot用到的所有的Spring模块以及第三方库。该列表可以以BOM(Bills of Material)的形式支持Maven。 ---怎么理解BOM和Starter?什么区别??
1、继承 spring-boot-starter-parent :
spring-boot-starter-parent project
默认是 Java 1.6。 Resource filtering。exec plugin、surefire、Git commit ID、shade。
Resource filtering for application.properties 和application.yml,以及,profile-specific file,如application-foo.properties 或application-foo.yml。
-- 注意Maven filtering使用@..@占位符,你可以在Maven property中覆盖:resource.delimiter。
如果不想使用Spring Boot中的默认版本,可以在<properties>覆盖相应的版本,如,想使用不同版本的Spring Data,具体如下:
<properties>
    <spring-data-releasetrain.version>Fowler-SR2</spring-data-releasetrain.version>
</properties>
想使用不同版本的JDK
<!-- 使用 java 1.8 -->
<java.version>1.8</java.version>
2、不继承spring-boot-starter-parent :
这种情况下,仍然可以使用dependency management,但不能使用plugin management啦。方式如下:
复制代码
<dependencyManagement>
     <dependencies>
        <dependency>
            <!-- Import dependency management from Spring Boot -->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>1.4.0.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
复制代码
注意,scope是import。而且,这种情况下,不再允许在<properties>覆盖相应的版本。如果要使用其他版本,需要在上面的前面添加一个完整的dependency。如下:
复制代码
<dependencyManagement>
    <dependencies>
        <!-- Override Spring Data release train provided by Spring Boot -->
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-releasetrain</artifactId>
            <version>Fowler-SR2</version>
            <scope>import</scope>
            <type>pom</type>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>1.4.0.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
复制代码

另外,Spring Boot还提供了一个Maven Plugin:spring-boot-maven-plugin,用于将项目打包成fat jar(executable jar)。
继承时只需要声明一下即可使用:
复制代码
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>
复制代码

六、Starters
可以创建自己的Starter,但名字格式不能是 spring-boot-starter-*,而是 *-spring-boot-starter。类似Maven插件的规则。
七、自动配置
@Import 和 @ComponentScan 类似;
@EnableAutoConfiguration 和 @SpringBootApplication 类似;---注意,只能使用一次,建议用在primary @Configuration class上。
注意,自动配置永远是第二位的,一旦你配置自己的东西,那自动配置的就会被覆盖。
查看自动配置都配置了什么,以及为什么,启动应用的时候加上 --debug即可。
禁用特定的自动配置:
复制代码
import org.springframework.boot.autoconfigure.*;
import org.springframework.boot.autoconfigure.jdbc.*;
import org.springframework.context.annotation.*;
@Configuration
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
public class MyConfiguration {
}
复制代码
如果class不在classpath中,可以使用excludeName,然后使用全路径即可。
八、Spring Beans 和 依赖注入。
九、@SpringBootApplication
@SpringBootApplication等同于默认的属性的@Configuration,@EnableAutoConfigurationand@ComponentScan
-- 注意,@ComponentScan不能凭空使用。
十、从IDE中运行
需要导入现有Maven项目。
如果不小心运行了两次,出现端口占用问题,STS(Spring Tools Suite)使用Relaunch即可。
十一、运行fat jar(executable jar)
java -jar target/xxxx.jar 注意,是在项目路径下执行。
开启远程调试支持
java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=8000,suspend=n -jar target/myproject-0.0.1-SNAPSHOT.jar

十二、使用Maven Plugin
  1. mvn spring-boot:run
十三、Hot swapping 热部署???好像不是,是热加载。
因为Spring Boot应用都是简单的Java应用,所以JVM Hot-swapping可以直接使用。但是,JVM Hot-swapping对于能够替换的字节码有些限制,所以建议使用JRebel或者Spring Loaded??
spring-boot-devtools 模块同样包含了快速重启应用的支持。
另外,貌似JVM Hot-swapping 只能在debug期间修改方法体??
十四、Developer tools
Spring Boot包含一组附加的开发期工具。
复制代码
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <optional>true</optional>
    </dependency>
</dependencies>
复制代码
注意,生产环境下(java -jar或者通过特定的类加载器启动),这些开发工具自动被禁止。
上面的<optional>true</optional>是一个最佳实践,可以有效阻止用于其他模块。
如果想确保生产Build中不包含devtools,可以使用excludeDevtools build property。
十五、Property defaults
一些Spring Boot支持的库使用了cache增进性能。但是cache,在开发过程中可能会是一个阻碍。例如你无法立即更新一个模板(thymeleaf的)。
cache设置通常在application.properties中。但是,比起手动设置这些,spring-boot-devtools模块会自动应用这些开发期的设置。
十六、自动重启
使用spring-boot-devtools模块的应用,当classpath中的文件有改变时,会自动重启! -- 就是说,默认会监视classpath入口。
静态资源和视图模板不需要重启!
注意,不同的IDE有不同的表现,例如Eclipse中只要改变了文件并保存,那就会导致classpath中的内容改变。而Intellij IDEA则需要 Build #Make Project。
可以通过build plugin启动应用,只要开启了forking支持,因为Devtools需要一个隔离的classloader才能运行正常。Maven下要这样开启:
复制代码
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <fork>true</fork>
            </configuration>
        </plugin>
    </plugins>
</build>
复制代码
注意:在使用LiveReload(热加载)时,自动重启仍然可以正常工作。如果你使用了JRebel,自动重启会被禁用以支持动态类加载。此时,devtools其他方面仍然可以使用。
注意:DevTools在重启过程中依赖应用上下文的shutdown hook来关掉它(应用)。所以如果禁用了shutdown hook,它就无法正常工作了:SpringApplication.setRegisterShutdownHook(false)。
Spring Boot使用的重启技术,实际上是使用了两个类加载器:不变的base类加载器、可变的restart类加载器。前者加载第三方jar之类的。后者加载项目代码。重启的时候,只是丢弃可变的restart类加载器,然后重新创建一个,所以速度比较快。
如果你觉得这样仍然不够快,或者遇到了类加载器问题,那你可以考虑JRebel之类的重加载技术。(重写了类??)
Spring Loaded项目提供了另一个选择,但是支持的框架不够多,且没有商业支持。
一些特定的资源改变时没有必要引起重启。有一些不会引起重启,但是会重加载。如果你想自定义的设置一下,可以使用spring.devtools.restart.exclude属性。如下:
spring.devtools.restart.exclude=static/**,public/**
如果想在默认的设置之外再添加新的排除选项,可以使用spring.devtools.restart.additional-exclude属性。
如果想在修改classpath之外的文件时也让应用重启,可以使用spring.devtools.restart.additional-paths属性。还可以配合上面提到的spring.devtools.restart.exclude属性,来控制是重启还是重加载。
如果不想使用自动重启功能,可以使用spring.devtools.restart.enabled属性。多数情况下,可以在application.properties中设置,这样仍然会创建一个restart类加载器,但不再监视改变。
如果想完全禁止自动重启,需要在调用SpringApplication.run(..)之前设置一个System属性。如下:
public static void main(String[] args) {
    System.setProperty("spring.devtools.restart.enabled", "false");
    SpringApplication.run(MyApp.class, args);
}
如果你的IDE会随改随编译,你可能会倾向于只在特定时刻引发重启(否则会很烦人,而且性能下降)。这时,你可以使用“trigger file”,就是一个特定的文件,只有修改这个文件时才会触发重启。使用spring.devtools.restart.trigger-file属性即可。(还可以设置为全局属性,这样所有的项目都可以使用了!见十八。)
自定义restart类加载器。
如果有一个多模块项目,只有部分导入到你的IDE中,你可能需要自定义一下。首先创建一个文件:META-INF/spring-devtools.properties。该文件中,可以有以前缀restart.exclude.restart.include.开头的属性。前者会被放入base类加载器,后者则被放入restart类加载器。
该属性的value,是正则表达式。例如:
restart.include.companycommonlibs=/mycorp-common-[\\w-]+\.jar
restart.include.projectcommon=/mycorp-myproj-[\\w-]+\.jar
注意,key只要是前缀restart.exclude.和restart.include.开头即可,后缀任意
已知限制:
自动重启,在使用ObjectInputStream反序列化时,会出问题。如果你想使用反序列化,应该使用Spring的ConfigurableObjectInputStream配合Thread.currentThread().getContextClassLoader()使用。
可惜的是,一些第三方jars中没有考虑到这个问题,无解。
十七、热加载 LiveReload
spring-boot-devtools模块内置了一个 LiveReload Server,可以保证在改变资源时 浏览的刷新。LiveReload的浏览器扩展,免费支持Chrome、Firefox、Safari。
如果想禁用:spring.devtools.livereload.enabled=false
注意:只能运行一个LiveReload Server。如果同时开启多个项目,那只有第一个。
十八、全局设置(前面有提到)
$HOME文件夹下添加一个文件.spring-boot-devtools.properties,该文件中的内容会被作用于所有的Spring Boot项目。例如设置触发文件
spring.devtools.reload.trigger-file=.reloadtrigger
十九、远程应用
Spring Boot 的developer tools也可以在远程使用(应该是使用一部分)。需要开启支持。例如:
spring.devtools.remote.secret=mysecret
问题:值是什么意思?
注意:不要在生产环境下开启!!
远程devtools支持是成对出现的。服务器端+客户端。当设置了上面的属性时,服务器端会自动开启。
运行远程客户端应用:
运行org.springframework.boot.devtools.RemoteSpringApplication,需要使用和远程项目相同的classpath!
传递给应用的non-option参数应该是你要连接到的URL。(问题,什么是non-option参数?
例如,你在使用Eclipse或者STS,有一个项目 my-app ,部署到了Cloud Foundry,那你需要进行如下操作:
  1. Select Run -> Run Configurations...
  2. Create a new Java Application "launch configuration"
  3. Browse for the my-app project
  4. Use org.springframework.boot.devtools.RemoteSpringApplication as the main class.
  5. Add https://myapp.cfapps.io to the Program arguments (or whatever your remote URL is).
代理访问远程的设置方法(略)。p47(60/346)
远程方式下,客户端的任何更新都会被push到服务器端,并按设置触发restart。比较快。
二十、远程调试
并不总是能开启Java远程调试功能。(直接翻译的,略拗口。其实就是有时候能开启,有时候不能)
为了改进这些限制,devtools支持Http协议的远程调试通道。远程客户端提供了一个本地服务器(默认8000端口,可修改),用于绑定远程调试器。当一个连接被创建时,debug信息就会通过HTTP发送到远程应用。
修改默认端口:spring.devtools.remote.debug.local-port
但是,首先,你需要确认远程应用以远程调试方式启动。通常,配置JAVA_OPTS即可达到目的。例如,在Cloud Foundry上,你可以在manifest.yml中添加如下信息:
---
  env:
    JAVA_OPTS: "-Xdebug -Xrunjdwp:server=y,transport=dt_socket,suspend=n"
注意,通过网络进行远程调试,可能很慢,所以你需要增加超时时间。Eclipse中:Java -> Debug -> Debugger timeout (ms),设成60000很不错。

二十一、生产打包
Executable jars可以直接在生产环境下使用。
其他的生产就绪功能,例如监控等,可以考虑spring-boot-actuator。后面会有介绍。
分享到:
评论

相关推荐

    Spring Boot 官方文档1.4.0.M3

    文档是学习和掌握Spring Boot不可或缺的资源,文档中的各个部分详细介绍了如何从零开始安装、配置和使用Spring Boot,以及如何进行项目开发、打包、测试和部署。文档中还包含了常见问题的解答,帮助开发者快速上手和...

    spring boot官方文档

    Spring Boot是近年来非常流行的一个开源Java框架,主要用于快速开发独立的、生产级别的Spring基础应用程序。...对于希望深入学习Spring Boot的开发者来说,这份文档无疑是一份非常好的入门指南和参考资料。

    Spring boot 官方文档

    总之,Spring Boot官方文档是Spring Boot开发人员不可或缺的参考资料,它详细记录了如何开始使用Spring Boot,如何构建一个基本的Spring Boot应用,并向开发人员提供关于如何将应用部署到生产环境的指导。...

    spring-boot中文教程

    描述:Spring Boot中文文档是Spring Boot官方文档的中文翻译版,它包含了Spring Boot的基本介绍、快速入门、核心特性、高级特性等内容,可以帮助用户快速了解和掌握Spring Boot的使用方法和技巧。 Spring Boot是一款...

    spring-boot官方学习文档

    综上所述,Spring Boot官方学习文档通过逐步引导的方式,提供了从基础入门到高级应用的全方位学习路径,帮助开发者高效地使用Spring Boot框架开发企业级应用,并最终将应用部署到生产环境。对于希望通过Spring Boot...

    2023最新《Spring Boot基础教程》

    Spring Boot 2.x基础教程:使用Swagger2构建强大的API文档 Spring Boot 2.x基础教程:JSR-303实现请求参数校验 Spring Boot 2.x基础教程:Swagger接口分类与各元素排序问题详解 Spring Boot 2.x基础教程:Swagger...

    spring boot官方文档1.5.13

    ### Spring Boot 1.5.13 官方文档知识点概览 #### 一、Spring Boot 文档概览 **1. 关于文档** - **版本:** 本文档为 Spring Boot 1.5.13 版本的官方文档。 - **贡献者:** Phillip Webb、Dave Syer、Josh Long 等...

    Spring boot 官方介绍文档

    首先,文档目录部分提到了几个关键章节,包括关于文档的介绍、获取帮助的方法、初步步骤、与Spring Boot的工作、学习Spring Boot特性、向生产环境迁移以及高级主题。这些章节是入门Spring Boot的重要指引,它们将...

    Spring Boot官方文档pdf

    ### Spring Boot 官方文档知识点总结 #### 一、Spring Boot 概览 - **Spring Boot** 是一种基于 Java 的框架,它简化了基于 Spring 的应用程序的开发过程。 - **版本**: 此文档对应的版本为 **2.1.4.RELEASE**。 -...

    Spring boot的学习文档。入门,详细整理

    通过本文档,我们可以了解到如何使用 IntelliJ IDEA 创建和运行 Spring Boot 项目,以及如何集成 Mybatis 实现数据库操作。无论是初学者还是经验丰富的开发者,Spring Boot 都能提供高效、简洁的开发体验。

    spring-boot中文API文档

    1. **快速入门**:介绍如何通过最小化配置快速启动一个新的Spring Boot应用,包括使用`spring-boot-starter`起步依赖和`main`方法创建可执行的JAR。 2. **核心特性**:详细解释Spring Boot的核心特性,如自动配置、...

    sprig boot官方文档 pdf版

    Spring Boot官方文档是学习Spring Boot框架的权威资料,文档涵盖从基础入门到高级主题的广泛内容。文档的PDF版方便了用户离线阅读和查阅,适合那些希望深入了解Spring Boot内部机制和应用开发流程的开发者。 ### ...

    spring boot 参考文档v1.4.1

    在"Getting started"章节中,文档开始介绍如何入门Spring Boot,包括了解Spring Boot、系统需求、安装Spring Boot、使用Spring Boot CLI、从早期版本升级以及开发你的第一个Spring Boot应用程序。在安装Spring Boot...

    spring boot 英文文档

    文档建议开发者查看Spring Boot Reference Guide,它能为入门级开发者提供清晰表达的知识点和进一步学习的途径。 在使用Spring Boot方面,官方文档介绍了构建系统,包括依赖管理,其中详细讲解了如何使用Maven和...

    spring boot 参考文档

    #### 一、Spring Boot 文档概览与入门 - **关于文档**:此部分介绍了文档的目的及其结构。它旨在帮助开发者更好地理解和使用 Spring Boot,无论是新手还是有经验的开发者都能从中受益。 - **获取帮助**:这部分...

    SpringBoot官方文档(中文)

    1. **快速入门**:介绍如何创建第一个Spring Boot应用,包括使用Spring Initializr创建项目。 2. **核心特性**:详细讲解Spring Boot的自动配置原理,以及如何自定义和覆盖默认配置。 3. **使用Spring Boot开发应用*...

    springboot官方文档

    SpringBoot是由Pivotal团队提供的全新框架,其设计目的是简化新Spring应用的初始搭建...不过,由于文档长度限制,这里只是对SpringBoot官方文档的一个简要介绍,想要深入学习还需要详细阅读并实践官方文档中的内容。

    spring-boot-reference

    在这份文档中,首先提到了Spring Boot的文档结构,分为几个部分:Spring Boot文档的介绍、获取帮助的途径、入门、了解Spring Boot的特性、迁移到生产环境、高级话题。每个部分都围绕着Spring Boot的不同方面,帮助...

    十分钟上手spring boot

    ##### 一、Spring Boot文档概述 **1. 关于本文档** 本文档旨在帮助初学者快速掌握Spring Boot的基本操作与核心概念,适合那些希望迅速上手Spring Boot项目的新手。 **2. 获取帮助** 对于学习过程中遇到的问题,...

    Spring Boot Reference Guide 中文文档

    Spring Boot Reference Guide中文文档是对Spring Boot官方文档的翻译,它为中文用户提供了学习和使用Spring Boot的指南。 文档中主要涵盖了以下知识点: 1. 文档结构:文档包含多个章节,从基础的入门指导到高级...

Global site tag (gtag.js) - Google Analytics