1.SpringBoot是什么?
SpringBoot是一套基于Spring框架的微服务框架。
2.为什么需要SpringBoot
由于Spring是一个轻量级的企业开发框架,主要的功能就是用于整合和管理其他框架。但随着整合的框架越来越多,Spring的整合配置也日益繁琐。在这个情况下,Spring团队有了一个想法:就是将平时主流的、经常使用到的框架的整合配置预先写好,然后通过简单的几个参数就可以实现框架的快速整合。这个想法催生SpringBoot框架,它是实现了各种主流框架与Spring的自动整合的框架。
 
3.SpringBoot的特点
1.实现了各种主流的框架的快速整合
2.实现了Spring的应用的快速部署,使用Spring Boot的Web应用可以以Jar的方式部署。(实现原理是将tomcat服务器打包到我们的web应用里面。)
 
4.参考资料
1.Spring官方的示例代码,地址如下:
https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples
2.SpringBoot官方参考文档,地址如下:
https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#getting-started
 
3.Spring Boot建议使用Eclipse安装STS插件或者直接使用STS开发工具。
 
5.SpringBoot入门
5.1 简单入门配置
第一步:
到SpringBoot官网https://start.spring.io生成maven项目下载并解压到Eclipse的工作空间导入到Eclipse中
第二步:编写一个简单的Java类
package com.gjs.springBoot.Controller;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody; @Controller
@EnableAutoConfiguration //启动自动配置,表示程序使用Springboot默认的配置
public class HelloController { /**
* 如果访问路径/,在页面输入字符串Hello World!
*/
@RequestMapping("/")
@ResponseBody
public String home() {
return "Hello World!";
} public static void main(String[] args) {
SpringApplication.run(HelloController.class, args);
}
}
第三步:启动SpringBoot程序
装了STS插件可以直接右击运行
 
没有装STS插件只能通过Maven运行
 
 
 
5.2 使用@SpringBootApplication注解配置
上面的示例有一个问题,就是每有一个Controller就需要配置一次
SpringApplication.run(HelloController.class, args);
使用@SpringBootApplication注解来配置就能解决这个问题
在入口类(有main方法的类,一般为xxxApplication)使用@SpringBootApplication注解,启动项目时,SpringBoot框架会扫描加了@SpringBootApplication注解的入口类的同级目录和子目录的组件类的对象到Spring容器。
 
package com.gjs.springBoot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication //等同于@EnableAutoConfiguration+@ComponentScan+@Configuration
public class Application { public static void main(String[] args) {
SpringApplication.run(Application.class, args);
} }
5.3热启动
使用spring-boot:run命令启动项目,每次修改完成代码都要重新启动。是非常麻烦的。
我们就有那么一个想法,能不能修改完代码,程序不用重启直接自动编译了?
我们将修改完代码开发工具自动编译的过程称为,热启动。Spring boot是支持热启动的。只有加入以下依赖就可以
<dependency>  
       <groupId>org.springframework.boot</groupId>  
       <artifactId>spring-boot-devtools</artifactId>  
       <!--
           optional=true,依赖不会传递,该项目依赖devtools;
           之后依赖该项目的项目如果想要使用devtools,需要重新引入
       -->
       <optional>true</optional>  
</dependency>
6.SpringBoot常见基础包说明
1.spring-boot-starter-web-1.5.4.RELEASE.jar:仅仅存放web项目需要的jar包的pom.xml
2.spring-boot-starter-1.5.4.RELEASE.jar:仅仅存放springboot最小核心需要的jar包的pom.xml
3.spring-boot-starter-logging-1.5.4.RELEASE.jar:仅仅存放日志输出需要的jar包的pom.xml
4.spring-boot-1.5.4.RELEASE.jar:springboot框架核心包
5.spring-boot-autoconfigure-1.5.4.RELEASE.jar:默认支持的自动配置的框架的配置包(重点)
重点是spring-boot-autoconfigure包,因为spring boot的所有内置的自动配置的类都在里面!
 
7.常用API说明
7.1 SpringApplication类
用于启动Spring Boot的程序,根据传入的类声明的注解来决定不同的启动方式。
如:
SpringApplication.run(Application.class, args);
7.2 @EnableAutoConfiguration注解
@EnableAutoConfiguration注解的作用是:启动程序时,告诉SpringApplication启动对象使用SpringBoot的默认配置。
只要在SpringBoot项目的入口类配置了@EnableAutoConfiguration,在SpringBoot框架启动是就会自动根据导入的jar包来加载spring-boot-autoconfigure-1.5.4.RELEASE-sources.jar中的xxxAutoconfiguration配置类,使用其默认配置。
 
源码:
@SuppressWarnings("deprecation")
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(EnableAutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration { String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration"; Class<?>[] exclude() default {}; String[] excludeName() default {}; }
属性说明:
exclude属性:使用Class格式的方式,排除默认自动启动中不需要的配置类
excludeName属性:使用类的限制名的方式,排序默认自动启动中不需要的配置类
 
7.3 @SpringBootApplication注解
源码:
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
@AliasFor(annotation = EnableAutoConfiguration.class, attribute = "exclude")
Class<?>[] exclude() default {};
@AliasFor(annotation = EnableAutoConfiguration.class, attribute = "excludeName")
String[] excludeName() default {};
@AliasFor(annotation = ComponentScan.class, attribute = "basePackages")
String[] scanBasePackages() default {};
@AliasFor(annotation = ComponentScan.class, attribute = "basePackageClasses")
Class<?>[] scanBasePackageClasses() default {};
}
根据源码可以得出:@SpringBootApplication注解也是启动Springboot的默认配置。只是在@EnableAutoConfiguration注解的基础上增加了扫描包@ComponentScan的这个注解。实现了并且扫描指定范围的类创建对象到容器里面。
 
属性说明:
1.basePackages属性
@SpringBootApplication默认扫描的范围是使用该注解的当前的类的包以及子包,如果要指定其他范围的包,可以是basePackages指定。
2.basePackageClasses属性
用于精确指定哪些类需要创建对象加载到Spring容器里面。
3.exclude属性
通过Class的方式排除不扫描的类,就是该类不创建对象。
4.excludeName属性
通过类的全限制名的方式,排除不扫描的类,指定的类不会在容器中创建对象。
 
7.4 @AutoConfigureBefore注解
作用:指定在SpringBoot框架自动配置的配置类执行完成之前,执行指定的自定义的配置类。
如果放在Application入口类,表示在所有自动配置的配置类还没有执行就先加载自定义的配置类。
 
源码:
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.TYPE })
public @interface AutoConfigureBefore { Class<?>[] value() default {}; String[] name() default {};
}
属性说明:
value:使用类的方式指定自动配置类
name:使用类的全限制名(字符串)类指定配置类
 
7.5 @AutoConfigureAfter注解
作用:指定在SpringBoot框架自动配置的配置类执行完成之后,然后执行指定的自定义的配置类。
源码:
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.TYPE })
public @interface AutoConfigureAfter { Class<?>[] value() default {}; String[] name() default {}; }
属性说明:
value:使用类的方式指定自动配置类
name:使用类的全限制名(字符串)类指定配置类
 
7.6 @SpringBootTest注解
作用:用于使用JUnit测试SpringBoot程序时,启动SpringBoot框架。测试SpringBoot一定要加上。
示例:
package com.gjs.springBoot.test;
 
import java.sql.SQLException;
import javax.sql.DataSource;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest//如果不加该注解,无法启动SpringBoot
public class DataSourceTest {
@Autowired
private DataSource dataSource;
@Test
public void dataSource() {
try {
System.out.println(dataSource.getConnection());
} catch (SQLException e) {
e.printStackTrace();
}
}
}
8.SpringBoot配置流程(A)
SpringBoot框架是一个将整合框架的整合代码都写好了的框架。但整合框架有些属性是需要我们配置的,而这些属性名是SpringBoot规定好的,我们需要找到这些属性然后对其进行配置。
我们需要知道如何找到各种整合框架可以配置的属性,以及属性对应的属性名。
 
配置流程说明:
1.在SpringBoot的spring-boot-autoconfigure-1.5.4.RELEASE.jar中编写了所以内置支持的框架的自动整合代码
2.所有支持的框架根据功能类型来划分包,每个包都有一个XxxxAutoConfiguration配置类,都是一个基于纯注解的配置类,是各种框架整合的框架代码。
3.如果配置的框架有默认的配置参数,都放在一个命名为XxxxProperties的属性
4.通过项目的resources下的application.properties文件可以修改每个整合框架的默认属性,从而实现了快速整合的目的。
 
配置流程图:
 
9.配置文件
Spring Boot的参数配置文件支持两种格式。分别为application.propertie,application.yml。
配置Spring Boot时可以二选一。
application.propertie:是键值对风格
application.yml:是层级键值对风格
 
9.1 application.propertie配置文件
默认情况下,Spring Boot会加载resources目录下的application.properties来获得配置的参数。
 
application.propertie多配置文件支持:
1.在application.properties配置文件下,增加多个application-xxx.properties文件名的配置文件,其中xxx是一个任意的字符串。
如:application-database.properties
application-mvc.properties
application-freemarker.properties
 
2.在application.properties总配置文件指定,加载的多个配置文件
spring.profiles.active=database,mvc,freemarker
9.2 application.yml配置文件
SpringBoot支持一种由SpringBoot框架自制的配置文件格式。后缀为yml。yml后缀的配置文件的功能和properties后缀的配置文件的功能是一致的。
例如:配置文件:application.properties
#配置数据源
spring.datasource.url=jdbc:mysql://localhost:3306/school
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.type=org.apache.commons.dbcp2.BasicDataSource
#spring-data-jpa配置
#显示SQL语句
spring.jpa.show-sql=true
#表示是否需要根据view的生命周期来决定session是否关闭
spring.jpa.open-in-view=true
可以修改为配置文件:application.yml,内容为:
#配置数据源
spring:
    datasource:
      url: jdbc:mysql://localhost:3306/school
      driverClassName: com.mysql.jdbc.Driver
      username: root
      password: 123456
      #配置连接池
      type: org.apache.commons.dbcp2.BasicDataSource
    #配置JPA的属性  
    jpa:
      show-sql: true
      open-in-view: true
其实application.yml配置文件就是将原来application.properties使用(.)分割的方式,改为树状结构,使用(:)分割。
注:key的字段与值之间的冒号(:)后面一定要有一个空格。
 
application.yml多配置文件支持:
1.在application.yml配置文件下,增加多个application-xxx.yml文件名的配置文件,其中xxx是一个任意的字符串。
例如:application-database.yml
application-mvc.yml
application-freemarker.yml
 
2.在application.yml总配置文件指定,加载的多个配置文件
spring:
   profiles:
     active: database,mvc,freemarker
 
9.3 配置示例-Spring数据源配置
配置Spring数据源,并支持DBCP2数据源:
1.在pom.xml加入支持数据源的类库
<!-- 数据库驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- dbcp2连接池 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
</dependency>
<!-- Springboot测试包 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<!-- jdbc -->
<!-- SpringBoot配置jdbc模块,必须导入JDBC包的 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
</dependency>
2.找到数据源的配置类
3.数据源的配置类的属性如下
/prefix 前缀:在配置文件用spring.datasource.属性名=值 来配置属性
@ConfigurationProperties(prefix = "spring.datasource")
public class DataSourceProperties
implements BeanClassLoaderAware, EnvironmentAware, InitializingBean { private ClassLoader classLoader; private Environment environment; private String name = "testdb"; private boolean generateUniqueName; //必须配置的属性
private Class<? extends DataSource> type; //数据源类型:数据源全限定名
private String driverClassName; //数据库驱动名
private String url; //数据库地址
private String username; //数据库账号
private String password; //数据库密码 private String jndiName; private boolean initialize = true; private String platform = "all"; private List<String> schema; private String schemaUsername; private String schemaPassword; private List<String> data; private String dataUsername; private String dataPassword; private boolean continueOnError = false; private String separator = ";"; private Charset sqlScriptEncoding; private EmbeddedDatabaseConnection embeddedDatabaseConnection = EmbeddedDatabaseConnection.NONE; private Xa xa = new Xa(); private String uniqueName;
4.application.properties配置文件修改数据源参数:
#datasource
spring.datasource.url=jdbc:mysql://localhost:3306/springboot
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=1234
#support dbcp2 datasource
spring.datasource.type=org.apache.commons.dbcp2.BasicDataSource
5. 测试代码
package com.gjs.springBoot.tset;
import java.sql.SQLException;
import javax.sql.DataSource;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @RunWith(SpringJUnit4ClassRunner.class)
//SpringBoot测试要加上这个注解
@SpringBootTest
public class DataSourceTest { @Autowired
private DataSource dataSource; @Test
public void dataSource() {
try {
System.out.println(dataSource.getConnection());
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
9.4 获得自定义application.properties声明的属性值
使用@ConfigurationProperties注解可以直接获得application.properties配置的属性值。
 
1.@ConfigurationProperties属性说明:
prefix属性:表示获得application.properties时忽略的指定的前缀,如:
@ConfigurationProperties(prefix = "spring.resources", ignoreUnknownFields = false)
ignoreUnknownFields属性:忽略未知的字段值。如果为true时,就是当application.properties设置的输入找不到对应的字段时,就忽略它。
 
2.使用@ConfigurationProperties需要导入支持的依赖包:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
3.只需要在类上打上@ConfigurationProperties就能直接使用application.properties配置的属性值
不用再使用@value注解
 
 
 
 
 

SpringBoot入门学习看这一篇就够了的更多相关文章

  1. Java并发编程入门,看这一篇就够了

    Java并发编程一直是Java程序员必须懂但又是很难懂的技术内容.这里不仅仅是指使用简单的多线程编程,或者使用juc的某个类.当然这些都是并发编程的基本知识,除了使用这些工具以外,Java并发编程中涉 ...

  2. Elasticsearch入门,看这一篇就够了

    目录 前言 可视化工具 kibana kibana 的安装 kibana 配置 kibana 的启动 Elasticsearch 入门操作 操作 index 创建 index 索引别名有什么用 删除索 ...

  3. [转帖]nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件

    nginx学习,看这一篇就够了:下载.安装.使用:正向代理.反向代理.负载均衡.常用命令和配置文件 2019-10-09 15:53:47 冯insist 阅读数 7285 文章标签: nginx学习 ...

  4. 关于 Docker 镜像的操作,看完这篇就够啦 !(下)

    紧接着上篇<关于 Docker 镜像的操作,看完这篇就够啦 !(上)>,奉上下篇 !!! 镜像作为 Docker 三大核心概念中最重要的一个关键词,它有很多操作,是您想学习容器技术不得不掌 ...

  5. Java中的多线程=你只要看这一篇就够了

    如果对什么是线程.什么是进程仍存有疑惑,请先Google之,因为这两个概念不在本文的范围之内. 用多线程只有一个目的,那就是更好的利用cpu的资源,因为所有的多线程代码都可以用单线程来实现.说这个话其 ...

  6. 2019-5-25-win10-uwp-win2d-入门-看这一篇就够了

    title author date CreateTime categories win10 uwp win2d 入门 看这一篇就够了 lindexi 2019-5-25 20:0:52 +0800 2 ...

  7. 什么是 DevOps?看这一篇就够了!

    本文作者:Daniel Hu 个人主页:https://www.danielhu.cn/ 目录 一.前因 二.记忆 三.他们说-- 3.1.Atlassian 回答"什么是 DevOps?& ...

  8. JVM内存模型你只要看这一篇就够了

    JVM内存模型你只要看这一篇就够了 我是一只孤傲的鱼鹰 让我们不厌其烦的从内存模型开始说起:作为一般人需要了解到的,JVM的内存区域可以被分为:线程栈,堆,静态方法区(实际上还有更多功能的区域,并且这 ...

  9. 【java编程】ServiceLoader使用看这一篇就够了

    转载:https://www.jianshu.com/p/7601ba434ff4 想必大家多多少少听过spi,具体的解释我就不多说了.但是它具体是怎么实现的呢?它的原理是什么呢?下面我就围绕这两个问 ...

随机推荐

  1. 通过改写 原始对象的paint 方法,来设置对象的border颜色

    解决方案: //通过改写 原始对象的paint 方法,来设置对象的border颜色 1. package test1;import java.awt.Color;import java.awt.Gra ...

  2. HTML5 动画效果的多种实现方式

    HTML5 动画效果的多种实现方式 1.  CSS3 transform + transition https://www.w3.org/TR/css-transforms-1/ https://ww ...

  3. reStructuredText(.rst) && read the docs

    Read the Docs   &&  reStructuredText (.rst)  && markdown 1. github master 分支,创建 docs ...

  4. how to make one you own free online tutorials in minutes

    how to make one you own free online tutorials in minutes educative.io https://www.educative.io/colle ...

  5. js & h5 & app & object storage

    js & h5 & app & object storage API https://developer.mozilla.org/en-US/docs/Web/API Stor ...

  6. taro 小程序 & touch event 转换 bug

    taro 小程序 & touch event 转换 bug before after 事件处理 https://nervjs.github.io/taro/docs/event.html#do ...

  7. js replace all

    js replace all https://stackoverflow.com/questions/1144783/how-can-i-replace-all-occurrences-of-a-st ...

  8. VS Code使用Git可视化管理源代码详细教程

    前言: 随着VS Code的功能和插件的不断强大和完善,它已经成为了我们日常开发中一个必不可缺的伙伴了.在之前我曾经写过一篇SourceTree使用教程详解(一个git可视化管理神器,想要了解的话可以 ...

  9. java的单例模式小知识点

    单例模式 目的 为了让一个类有且仅有一个实例 优点 只允许一个,节省空间 不用频繁创建删除,提高性能 缺点 不容易扩展 长期不使用会被系统当作垃圾回收,造成系统状态的丢失 实现 要点 防止外界随意的创 ...

  10. spring boot用ModelAndView向Thymeleaf模板传参数

    最近在调试一个Spring Boot向Thymeleaf模板传参数的例子,但踩了很多坑,这里就把详细过程记录下来,以供大家参考. 先说下,这里遇到哪些坑呢? 1 我用的是IDEA社区版,这不支持JSP ...