Spring Boot 入门

栏目: Java · 发布时间: 7年前

内容简介:Spring Boot 入门

Spring Boot 入门

spring Boot是Spring社区较新的一个项目。该项目的目的是帮助开发者更容易的创建基于Spring的应用程序和服务,让更多人的人更快的对Spring进行入门体验,让 Java 开发也能够实现Ruby on Rails那样的生产效率。为Spring生态系统提供了一种固定的、约定优于配置风格的框架。

Spring Boot具有如下特性:

为基于Spring的开发提供更快的入门体验

开箱即用,没有代码生成,也无需XML配置。同时也可以修改默认值来满足特定的需求。

提供了一些大型项目中常见的非功能性特性,如嵌入式服务器、安全、指标,健康检测、外部配置等。

Spring Boot并不是不对Spring功能上的增强,而是提供了一种快速使用Spring的方式。

Spring Boot 系列

Spring Boot 入门

Spring Boot 属性配置和使用

Spring Boot 集成MyBatis

Spring Boot 静态资源处理

Spring Boot - 配置 排序 依赖技巧

Spring Boot - DevTools 介绍

本文根据官方文档深入讲解一段代码

简单例子

Spring Boot建议使用Maven或Gradle,本文以Maven为例。

首先创建一个一般的Maven项目,有一个pom.xml和基本的src/main/java结构。

在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 s/ xsd/maven-4.0.0.xsd">

<groupId>com.github.abel533</groupId>

<artifactId>spring-boot</artifactId>

<version>1.0-SNAPSHOT</version>

<parent>

<groupId>org.springframework.boot</groupId>

<artifactId> spring-boot-starter-parent</artifactId>

<version>1.3.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>

<dependencies>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>springloaded</artifactId>

<version>1.2.5.RELEASE</version>

</dependency>

</dependencies>

</plugin>

</plugins>

</build>

</project>

首先是增加了<parent>

增加父pom比较简单,而且spring-boot-starter-parent包含了大量配置好的依赖管理,在自己项目添加这些依赖的时候不需要写<version>版本号。

使用父pom虽然简单,但是有些情况我们已经有父pom,不能直接增加<parent>时,可以通过如下方式:

<dependencyManagement>

<dependencies>

<dependency>

<!-- Import dependency management from Spring Boot -->

<groupId> org.springframework.boot</groupId>

<artifactId> spring-boot-dependencies </artifactId>

<version>1.2.3.RELEASE</version>

<type>pom</type>

<scope>import</scope>

</dependency>

</dependencies>

</dependencyManagement>

java.version属性

上面pom.xml虽然没有出现这个属性,这里要特别提醒。

Spring默认使用jdk1.6,如果你想使用jdk1.8,你需要在pom.xml的属性里面添加java.version,如下:

<properties>

<java.version>1.8</java.version>

</properties>

添加spring-boot-starter-web依赖

Spring通过添加spring-boot-starter-*这样的依赖就能支持具体的某个功能。

我们这个示例最终是要实现web功能,所以添加的是这个依赖。

更完整的功能列表可以查看:using-boot-starter-poms

添加spring-boot-maven-plugin插件

该插件支持多种功能,常用的有两种,第一种是打包项目为可执行的jar包。

在项目根目录下执行mvn package将会生成一个可执行的jar包,jar包中包含了所有依赖的jar包,只需要这一个jar包就可以运行程序,使用起来很方便。该命令执行后还会保留一个XXX.jar.original的jar包,包含了项目中单独的部分。

生成这个可执行的jar包后,在命令行执行java -jar xxxx.jar即可启动项目。

另外一个命令就是mvn spring-boot:run,可以直接使用tomcat(默认)启动项目。

在我们开发过程中,我们需要经常修改,为了避免重复启动项目,我们可以启用热部署。

Spring-Loaded项目提供了强大的热部署功能,添加/删除/修改 方法/字段/接口/枚举 等代码的时候都可以热部署,速度很快,很方便。

想在Spring Boot中使用该功能非常简单,就是在spring-boot-maven-plugin插件下面添加依赖:

<dependencies>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>springloaded</artifactId>

<version>1.2.5.RELEASE</version>

</dependency>

</dependencies>

添加以后,通过mvn spring-boot:run启动就支持热部署了。

注意:使用热部署的时候,需要IDE编译类后才能生效,你可以打开自动编译功能,这样在你保存修改的时候,类就自动重新加载了。

创建一个应用类

我们创建一个Application类:

@RestController

@EnableAutoConfiguration

@RequestMapping("/")

String home() {

return "Hello World!";

}

@RequestMapping("/now")

String hehe() {

return "现在时间:" + (new Date()).toLocaleString();

}

public static void main (String[] args) {

SpringApplication.run (Example.class, args);

}

}

注意

Spring Boot建议将我们main方法所在的这个主要的配置类配置在根包名下。

类似如下结构:

com

+- example

+- myproject

+- Application.java

|

+- domain

| +- Customer.java

| +- CustomerRepository.java

|

+- service

| +- CustomerService.java

|

+- web

+- CustomerController.java

在Application.java中有main方法。

因为默认和包有关的注解,默认包名都是当前类所在的包,例如@ComponentScan, @EntityScan, @SpringBootApplication注解。

@RestController

因为我们例子是写一个web应用,因此写的这个注解,这个注解相当于同时添加@Controller和@ResponseBody注解。

@EnableAutoConfiguration

Spring Boot建议只有一个带有该注解的类。

@EnableAutoConfiguration作用:Spring Boot会自动根据你jar包的依赖来自动配置项目。例如当你项目下面有HSQLDB的依赖时,Spring Boot会创建默认的内存数据库的数据源DataSource,如果你自己创建了DataSource,Spring Boot就不会创建默认的DataSource。

如果你不想让Spring Boot自动创建,你可以配置注解的exclude属性,例如:

@Configuration

@EnableAutoConfiguration (exclude= {DataSourceAutoConfiguration.class})

public class MyConfiguration {

}

@SpringBootApplication

由于大量项目都会在主要的配置类上添加@Configuration ,@EnableAutoConfiguration, @ComponentScan三个注解。

因此Spring Boot提供了@SpringBootApplication注解,该注解可以替代上面三个注解(使用Spring注解继承实现)。

home等方法

@RequestMapping("/")

String home() {

return "Hello World!";

@RequestMapping("/now")

String hehe() {

return "现在时间:" + (new Date()).toLocaleString();

}

这些方法都添加了@RequestMapping("xxx"),这个注解起到路由的作用。

启动项目SpringApplication.run

启动Spring Boot项目最简单的方法就是执行下面的方法:

SpringApplication.run(Application.class, args);

该方法返回一个ApplicationContext对象,使用注解的时候返回的具体类型是AnnotationConfigApplicationContext或AnnotationConfigEmbeddedWebApplicationContext,当支持web的时候是第二个。

除了上面这种方法外,还可以用下面的方法:

SpringApplication applicatio = new SpringApplication ( Application.class);

application.run(args);

SpringApplication包含了一些其他可以配置的方法,如果你想做一些配置,可以用这种方式。

除了上面这种直接的方法外,还可以使用SpringApplicationBuilder:

new SpringApplicationBuilder()

.showBanner(false)

.sources(Application.class)

.run(args);

当使用SpringMVC的时候由于需要使用子容器,就需要用到SpringApplicationBuilder,该类有一个child(xxx...)方法可以添加子容器。

运行

在IDE中直接直接执行main方法,然后访问http://localhost:8080即可。

另外还可以用上面提到的mvn,可以打包为可执行jar包,然后执行java -jar xxx.jar。

或者执行mvn spring-boot:run运行项目。

项目启动后输出如下日志:

[INFO] Attaching agents: [F:\.m2\repository\org\springframework \springloaded\1.2.5.RELEASE \springloaded-1.2.5.RELEASE.jar]

. ____ _ __ _ _

/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \

( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \

\\/ ___)| |_)| | | | | || (_| | ) ) ) )

' |____| .__|_| |_|_| |_\__, | / / / /

=========|_|==============|___/=/_/_/_/

:: Spring Boot :: (v1.2.3.RELEASE)

2015-12-12 22:26:35.298 INFO 9844 --- [ main] c.github.abel533.springboot.Application : Starting Application on liuzh-PC with PID 9844 (F:\Liu\IDEA\SpringBoot \spring-boot \target\classes started by liuzh_3nofxnp in F:\Liu\IDEA\SpringBoot \spring-boot)

2015-12-12 22:26:35.332 INFO 9844 --- [ main] ationConfigEmbedded WebApplicationContext : Refreshing org.springframework.boot.context .embedded.Annotation ConfigEmbedded WebApplicationContext @a38d7a3: startup date [Sat Dec 12 22:26:35 CST 2015]; root of context hierarchy

2015-12-12 22:26:35.734 INFO 9844 --- [ main] o.s.b.f.s.DefaultListableBeanFactory : Overriding bean definition for bean 'beanNameViewResolver': replacin g [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName =org.springframework.boot.autoconfigure.web .ErrorMvcAutoConfiguration $WhitelabelErrorViewConfiguration; factoryMethodName =beanNameViewResolver; initMethodName=null; destroyMethodName =(inferred); defined in class path resource [org/springframework/boot/autoconfigure/web/ ErrorMvcAutoConfiguration $ WhitelabelErrorViewConfiguration.class]] with [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3 ; dependencyCheck=0; autowireCandidate =true; primary=false; factoryBeanName =org.springframework.boot.autoconfigure.web .WebMvcAutoConfiguration $WebMvcAuto ConfigurationAdapter; factoryMethodName =beanNameViewResolver; initMethodName=null; destroyMethodName =(inferred); defined in class path resource [org/springframework/boot/ autoconfigure/web/ WebMvcAutoConfiguration $ WebMvcAuto ConfigurationAdapter.class]]

2015-12-12 22:26:36.302 INFO 9844 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8080 (http)

2015-12-12 22:26:36.456 INFO 9844 --- [ main] o.apache.catalina.core.StandardService : Starting service Tomcat

2015-12-12 22:26:36.457 INFO 9844 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/8.0.20

2015-12-12 22:26:36.537 INFO 9844 --- [ost-startStop-1] o.a.c.c.C.[Tomcat] .[localhost].[/] : Initializing Spring embedded WebApplicationContext

2015-12-12 22:26:36.537 INFO 9844 --- [ost-startStop-1] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 1207 ms

2015-12-12 22:26:36.941 INFO 9844 --- [ost-startStop-1] o.s.b.c.e.ServletRegistrationBean : Mapping servlet: 'dispatcherServlet' to [/]

2015-12-12 22:26:36.944 INFO 9844 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean : Mapping filter: 'characterEncodingFilter' to: [/*]

2015-12-12 22:26:36.945 INFO 9844 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean : Mapping filter : 'hiddenHttpMethodFilter' to: [/*]

2015-12-12 22:26:37.111 INFO 9844 --- [ main] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice : org.springframework.boot.context .embedded.AnnotationConfigEmbedded WebApplicationContext @a38d7a3: startup date [Sat Dec 12 22:26:35 CST 2015]; root of context hierarchy

2015-12-12 22:26:37.152 INFO 9844 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/],methods=[],params=[], headers=[], consumes=[],produces=[] ,custom=[]}" onto java.lang.String com.github.abel533.springboot .Application.home()

2015-12-12 22:26:37.152 INFO 9844 --- [ main] s.w.s.m.m.a .RequestMappingHandlerMapping : Mapped "{[/now], methods=[], params=[],headers=[], consumes=[], produces=[],custom=[]}" onto java.lang.String com.github .abel533.springboot .Application.hehe()

2015-12-12 22:26:37.156 INFO 9844 --- [ main] s.w.s.m.m.a .RequestMappingHandlerMapping : Mapped "{[/error],methods=[] ,params=[],headers=[] ,consumes=[] ,produces=[] ,custom=[]}" 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)

2015-12-12 22:26:37.156 INFO 9844 --- [ main] s.w.s.m.m.a.RequestMapping HandlerMapping : Mapped " {[/error],methods=[],params=[], headers=[],consumes=[], produces=[text/html], custom=[]}" onto public org.springframework .web.servlet.ModelAndView org.springframework.boot .autoconfigure.web.BasicErrorController .errorHtml (javax.servlet.http.HttpServletRequest)

2015-12-12 22:26:37.175 INFO 9844 --- [ main] o.s.w.s.handler .SimpleUrlHandlerMapping : Mapped URL path [/webjars/**] onto handler of type [class org.springframework .web.servlet.resource .ResourceHttpRequestHandler]

2015-12-12 22:26:37.175 INFO 9844 --- [ main] o.s.w.s.handler. SimpleUrlHandlerMapping : Mapped URL path [/**] onto handler of type [class org.springframework.web .servlet.resource .ResourceHttpRequestHandler]

2015-12-12 22:26:37.195 INFO 9844 --- [ main] o.s.w.s.handler .SimpleUrlHandlerMapping : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web .servlet.resource .ResourceHttpRequestHandler]

2015-12-12 22:26:37.237 INFO 9844 --- [ main] o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposure on startup

2015-12-12 22:26:37.279 INFO 9844 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s) : 8080 (http)

2015-12-12 22:26:37.280 INFO 9844 --- [ main] c.github.abel533.springboot .Application : Started Application in 2.181 seconds (JVM running for 2.607)

最后

以上是Spring Boot基础的内容,有些不全面的地方或者读者有更多疑问,可以查看Spring Boot完整文档。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

深入理解C#(第3版)

深入理解C#(第3版)

斯基特 (Jon Skeet) / 姚琪琳 / 人民邮电出版社 / 2014-4-1 / 99.00元

本书是世界顶级技术专家“十年磨一剑”的经典之作,在C#和.NET领域享有盛誉。与其他泛泛介绍C#的书籍不同,本书深度探究C#的特性,并结合技术发展,引领读者深入C#的时空。作者从语言设计的动机出发,介绍支持这些特性的核心概念。作者将新的语言特性放在C#语言发展的背景之上,用极富实际意义的示例,向读者展示编写代码和设计解决方案的最佳方式。同时作者将多年的C#开发经验与读者分享,读者可咀其精华、免走弯......一起来看看 《深入理解C#(第3版)》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具