随着动态语言的流行(Ruby,Groovy,Scala,Node.js),Java的开发显得格外的笨重;繁多的配置,低下的开发效率,复杂的部署流程以及第三方技术集成难度大.

在上述环境 下,Spring Boot应运而生.它使用"习惯优于配置"(项目中存在大量的配置,此外还内置一个习惯性的配置,让你无须手段进行配置)的理念让你的项目快速运行起来.

使用Spring Boot很容易创建一个独立运行(运行jar,内嵌Servlet容器),准生产级别的基于Spring框架的项目,使用Spring Boot你可以不用或者只需要很少的Spring配置.

Spring Boot的优缺点

优点 :

(1) 快速构建项目;

(2) 对主流开发框架的无配置集成;

(3) 项目可独立运行,无须外部依赖 Servlet容器;

(4) 提供运行时的应用监控;

(5) 极大地提高了开发,部署效率;

(6) 与云计算的天然集成.

缺点 :

(1) 书籍文档少且不够深入;

(2) 如果你不认同Spring框架,这也许是它的缺点,但建议你一定要使用Spring框架.

快速入门

设置Spring boot的parent

<parent>

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

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

<version>1.5.2.RELEASE</version>

</parent>

说明 : Spring Boot的项目必须要将parent设置为Spring boot的parent, 该parent包含了大量的默认的配置,大大简化了我们的开发.

导入Spring Boot的web支持

<dependency>

<groupId>org.springframework.book</groupId>

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

</dependency>

添加Spring Boot的插件

<plugin>

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

<artifactId>spring-boot-maven-plugin</artifactId>

</plugin>

编写第一个Spring Boot的应用

@Controller

@SpringBootApplication

@Configuration

public class HelloApplication {

@RequestMapping("hello")

@ResponseBody

public String hello() {

return "hello world!";

}

public static void main(String[] args) {

SpringApplication.run(HelloApplication.class, args);

}

}

代码说明 :

1 : @SpringBootApplication : Spring Boot项目的核心注解, 主要目的是开启自动配置;

2 : @Configuration : 这是一个配置Spring的配置类;

3 : @Controller : 标明这是一个SpringMVC的Controller控制器;

4 : main方法 : 在main方法中启动一个应用,既 : 这个应用的入口;

启动应用

在Spring Boot项目中,启动的方式有两种,一种是直接run Java Application另外一种是通过Spring Boot的Maven插件运行.

Spring Boot的核心

入口类和@SpringBootApplication

Spring Boot的项目一般都会有*Application的入口类,入口类中会有main方法,这是一个标准的Java应用程序的入口方法.

@SpringBootApplication注解是Spring Boot的核心注解,它其实是一个组合注解;

@Target(ElementType.TYPE)

@Retention(RetentionPolicy.RUNTIME)

@Documented

@Inherited

@SpringBootConfiguration

@EnableAutoConfiguration

@ConmpnentScan(excludeFilters = {

@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),

@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class)

})

public @interface SpringBootApplication {}

该注解主要组合了以下注解 :

1 : @SpringBootConfiguration : 这是Spring Boot项目的配置注解,这也是一个组合注解 :

@Target(ElementType.TYPE)

@Retention(RetentionPolicy.RUNTIME)

@Documented

@Configuration

public @interface SpringBootConfiguration{}

在Spring Boot项目中推荐使用@SpringBootConfiguration替代@Configuration

2 : @EnableAutoConfiguration : 启用自动配置,该注解会使Spring Boot根据项目中依赖的jar包自动配置项目的配置项 :

a) 如 : 我们添加了Spring-boot-starter-web的依赖,项目中也就会引入SpringMVC的依赖,Spring Boot就会自动配置tomcat和SpringMVC

spring-boot-starter-web : 1.5.2.RELEASE[compile]

spring-boot-starter : 1.5.2.RELEASE[compile]

spring-boot-starter-tomcat : 1.5.2.RELEASE[compile]

tomcat-embed-core : 8.5.11[compile]

tomcat-embed-el : 8.5.11[compile]

tomcat-embed-websocked : 8.5.11[compile]

tomcat-embed-core : 8.5.11(omitted for conflict with 8.5.11)[compile]

hibernate-vaildator : 5.3.4.Final[compile]

jackson-databind : 2.8.7[compile]

spring-web : 4.3.7.RELEASE(omitted for confilct with 4.3.7.RELEASE)[compile]

spring-webmvc : 4.3.7.RELEASE(omitted for confilct with 4.3.7.RELEASE)[compile]

3 : @ComponentScan : 默认扫描@SpringBootApplication所在类的同级目录以及它的子目录.

关闭自动配置

Spring Boot会根据项目中的jar包依赖,自动做出配置,Spring Boot支持的自动配置(非常多);

比如 : 我们不想自动配置Redis,想手动配置.

@SpringBootApplication(exclude = {RedisAutoConfiguration.class})

public class HelloApplication {

}

如果不想看到banner,可以将其关闭 :

public static void main(Stirng[] args) {

SpringApplication app = new SpringApplication(HelloApplication.class, args);

app.setBannerMode(Banner.Mode.OFF); //关闭banner

app.run-正在西部数码(www.west.cn)进行交易(args);

}

Spring Boot项目使用一个全局的配置文件application.properties或者是application.yml,在resources目录下或者类路径下的/config下,一般我们放到resources下。

1、 修改tomcat的端口为8088(server.port=8088)

2、 修改进入DispatcherServlet的规则为:*.html(server.servlet.path=*.html)

Xml配置文件

Spring Boot提倡零配置,既无xml配置,但是在实际项目中,可能有一些特殊要求你 必须使用 xml配置,这时我们可以通过Spring提供的@ImportResource来加载xml配置,

例如 :

@ImportResource({"classpath:some-context.xml","classpath:another-context.xml"})

日志

Spring Boot对各种日志框架都支持,通过配置修改默认的日志的配置 :

#设置日志级别

logging.level.org.springframework=DEBUG

格式 :

logging.level.*= # log levels serverity. For instance 'logging.level.org.springframework=DEBUG'

Spring Boot的自动配置的原理

Spring Boot在进行SpringApplication对象实例化时会加载META-INF/spring.factories文件,将该配置文件中的配置载入到Spring容器.

进入规则为 /

如果进入SpringMVC的规则为/时,Spring Boot的默认静态资源的路径为:

spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/

进入规则为*.xxx 或者 不指定静态文件路径时

将静态资源放置到webapp下的static目录中即可通过地址访问:

自定义SpringMVC的配置

有些时候我们需要自已配置SpringMVC而不是采用默认,比如说增加一个拦截器,这个时候就得通过继承WebMvcConfigurerAdapter然后重写父类中的方法进行扩展。

在Spring Boot中推荐使用@Transaction注解来申明事务.

首先需要导入依赖 :

<dependency>

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

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

</dependency>

当引入jdbc依赖之后,Spring Boot会自动默认分别注入DataSourceTransactionManager或JpaTransactionManager,所以我们不需要任何额外配置就可以用@Transactional

注解进行事务使用.

例如 :

在service中添加@Transactional注解 :

发布到独立的tomcat中运行

在开发阶段我们推荐使用内嵌的tomcat进行开发,因为这样会方便很多,但是到生成环境,我们在独立的tomcat容器中运行,因为我们需要对tomcat做额外的优化,这时我们

需要将工程打成war包进行发布到外部的tomcat里面.

工程的打包方式为war

<parent>

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

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

<version>1.5.2.RELEASE</version>

<parent>

<groupId>com.taotao.cart</groupId>

<artifactId>taotao-cart-springboot</artifactId>

<version>1.0.0-SNAPSHOT</versio>

<packageing>war</packageing>

将spring-boot-starter-tomcat的范围设置为provided

设置为provided是打包时会将该包排除,因为要放到独立的tomcat中运行,是不需要的.

<dependency>

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

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

<scope>provided</scope>

</dependency>

修改代码,设置启动配置

需要集成SpringBootServletInitializer,然后重写configure,将Spring Boot的入口类设置进去.

需要启动类继承需要集成SpringBootServletInitializer

@Configuration

@PropertySource(value = {"classpath:jdbc.properties", "classpath:env.properties", "classpath:httpclient.properties"})

@ComponentScan(basePackages = "con.taotao")

@ImportResource(value = "classpath:dubbo/dubbo-consumer.xml") // dubbo的配置文件,将dubbo整合到spring容器中

@SpringBootApplication

public class TaobaoApplication extends SpringBootServletInitializer {

@Override

protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {

// 设置启动类,用于独立tomcat运行的入口

return builder.sources(TaotaoApplication.class);

}

}

maven命令 : clean package // 把项目打包成war包.

把打包成war的项目放到tomcat的webapps的ROOT里面,并解压.

在配置Mybatis时使用java配置

@Configuration

@AutoConfiureAfter(MyBatisConfig.class) // 保证在MyBatisConfig实例化之后再实例化该类

public class MapperScannerConfig {

// mapper接口的扫描器

@Bean

public MapperScannerConfigurer mapperScannerConfigurer() {

MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();

mapperScannerConfigurer.setBasePackage("com.taotao.cart.mapper");

return mapperScannerConfigurer;

}

}

全局捕获异常

1. 新建一个Class,这里取名为GlobalDefaultExceptionHandler;

2. 在class上添加注解,@ControllerAdvice;

3. 在class中添加一个方法;

4. 在方法上添加@ExceptionHandler拦截相应的异常信息;

5. 如果返回的是View -- 方法的返回值是ModelAndView;

6. 如果返回的是String或者是Json数据,那么需要在方法上添加@ResponseBody注解

什么是SpringBoot的更多相关文章

  1. 解决 Springboot Unable to build Hibernate SessionFactory @Column命名不起作用

    问题: Springboot启动报错: Caused by: org.springframework.beans.factory.BeanCreationException: Error creati ...

  2. 【微框架】Maven +SpringBoot 集成 阿里大鱼 短信接口详解与Demo

    Maven+springboot+阿里大于短信验证服务 纠结点:Maven库没有sdk,需要解决 Maven打包找不到相关类,需要解决 ps:最近好久没有写点东西了,项目太紧,今天来一篇 一.本文简介 ...

  3. Springboot搭建web项目

    最近因为项目需要接触了springboot,然后被其快速零配置的特点惊呆了.关于springboot相关的介绍我就不赘述了,大家自行百度google. 一.pom配置 首先,建立一个maven项目,修 ...

  4. Java——搭建自己的RESTful API服务器(SpringBoot、Groovy)

    这又是一篇JavaWeb相关的博客,内容涉及: SpringBoot:微框架,提供快速构建服务的功能 SpringMVC:Struts的替代者 MyBatis:数据库操作库 Groovy:能与Java ...

  5. 解决 SpringBoot 没有主清单属性

    问题:SpringBoot打包成jar后运行提示没有主清单属性 解决:补全maven中的bulid信息 <plugin> <groupId>org.springframewor ...

  6. SpringBoot中yaml配置对象

    转载请在页首注明作者与出处 一:前言 YAML可以代替传统的xx.properties文件,但是它支持声明map,数组,list,字符串,boolean值,数值,NULL,日期,基本满足开发过程中的所 ...

  7. springboot 学习资源推荐

    springboot 是什么?对于构建生产就绪的Spring应用程序有一个看法. Spring Boot优先于配置的惯例,旨在让您尽快启动和运行.(这是springboot的官方介绍) 我们为什么要学 ...

  8. Springboot框架

    本片文章主要分享一下,Springboot框架为什么那么受欢迎以及如何搭建一个Springboot框架. 我们先了解一下Springboot是个什么东西,它是干什么用的.我是刚开始接触,查了很多资料, ...

  9. 如何在SpringBoot中使用JSP ?但强烈不推荐,果断改Themeleaf吧

    做WEB项目,一定都用过JSP这个大牌.Spring MVC里面也可以很方便的将JSP与一个View关联起来,使用还是非常方便的.当你从一个传统的Spring MVC项目转入一个Spring Boot ...

  10. 5分钟创建一个SpringBoot + Themeleaf的HelloWord应用

    第一步:用IDE创建一个普通maven工程,我用的eclipse. 第二步:修改pom.xml,加入支持SpringBoot和Themeleaf的依赖,文件内容如下: <?xml version ...

随机推荐

  1. 使用showConfirmDialog显示确认框

    ------------------siwuxie095                                 工程名:TestJOptionPane 包名:com.siwuxie095.s ...

  2. MySQL在linux下安装

    mysql在linux下的安装   安装环境:系统是 centos6.5 1.下载 下载地址:http://dev.mysql.com/downloads/mysql/5.6.html#downloa ...

  3. 树莓派 Learning 002 装机后必要的操作 --- 09 root用户 密码

    树莓派 装机后必要的操作 - root用户 密码 我的树莓派型号:Raspberry Pi 2 Model B V1.1 装机系统:NOOBS v1.9.2 树莓派使用的Linux是debian系统, ...

  4. 我对PageRank的理解及R语言实现

    PageRank,网页排名,又称网页级别.Google左侧排名或佩奇排名,是一种由搜索引擎根据网页之间相互的超链接计算的技术,而作为网页排名的要素之一,以Google公司创办人拉里·佩奇(Larry ...

  5. netty+mqtt

    package io.mqtt.server; import io.mqtt.tool.ConfigService;import io.netty.bootstrap.ServerBootstrap; ...

  6. 3.Windows应急响应:蠕虫病毒

    0x00 前言 蠕虫病毒是一种十分古老的计算机病毒,它是一种自包含的程序(或是一套程序),通常通过网络途径传播, 每入侵到一台新的计算机,它就在这台计算机上复制自己,并自动执行它自身的程序.常见的蠕虫 ...

  7. 2. Web渗透测试中常见逻辑漏洞解析与实战

    注:以下漏洞示例已由相关厂商修复,切勿非法测试! 0x01 漏洞挖掘 01  注册 注册中最常见的有两个,一个是恶意注册,另一个是账户遍历.一个好的注册界面应该是这样 或者这样的 而不是这样的 要么使 ...

  8. Boost Python学习笔记(二)

    你将学到什么 如何在Python中调用C++代码 如何在C++中调用Python代码 在Python中调用C++代码 首先定义一个动物类(include/animal.h) #pragma once ...

  9. 2017-10-4 清北刷题冲刺班a.m

    P101zhx a [问题描述]你是能看到第一题的 friends 呢.——hjaHja 拥有一套时光穿梭技术,能把字符串以超越光速的速度传播,但是唯一的问题是可能会 GG.在传输的过程中,可能有四种 ...

  10. springBoot2.0 配置 mybatis+mybatisPlus+redis

    一.Idea新建springBoot项目 next到完成,然后修改使用自己的maven 等待下载包 二.pom.xml文件 <?xml version="1.0" encod ...