SpringBoot入门学习看这一篇就够了

1.SpringBoot是什么?html

SpringBoot是一套基于Spring框架的微服务框架。java

2.为何须要SpringBootmysql

因为Spring是一个轻量级的企业开发框架,主要的功能就是用于整合和管理其余框架。但随着整合的框架愈来愈多,Spring的整合配置也日益繁琐。在这个状况下,Spring团队有了一个想法:就是将平时主流的、常用到的框架的整合配置预先写好,而后经过简单的几个参数就能够实现框架的快速整合。这个想法催生SpringBoot框架,它是实现了各类主流框架与Spring的自动整合的框架。git

 

3.SpringBoot的特色github

1.实现了各类主流的框架的快速整合web

2.实现了Spring的应用的快速部署,使用Spring Boot的Web应用能够以Jar的方式部署。(实现原理是将tomcat服务器打包到咱们的web应用里面。)spring

 

4.参考资料sql

1.Spring官方的示例代码,地址以下:数据库

https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samplesapache

2.SpringBoot官方参考文档,地址以下:

https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#getting-started

 

3.Spring Boot建议使用Eclipse安装STS插件或者直接使用STS开发工具。

下载官网:https://spring.io/tools/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插件能够直接右击运行

0

 

没有装STS插件只能经过Maven运行

0

 

0

 

 

5.2 使用@SpringBootApplication注解配置

上面的示例有一个问题,就是每有一个Controller就须要配置一次

SpringApplication.run(HelloController.class, args);

 

使用@SpringBootApplication注解来配置就能解决这个问题

在入口类(有main方法的类,通常为xxxApplication)使用@SpringBootApplication注解,启动项目时,SpringBoot框架会扫描加了@SpringBootApplication注解的入口类的同级目录和子目录的组件类的对象到Spring容器。

0

 

package com.gjs.springBoot;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication    //等同于@EnableAutoConfiguration+@ComponentScan+@Configurationpublic 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.SpringJUnit4Cla***unner;
 
@RunWith(SpringJUnit4Cla***unner.class)
@SpringBootTest//若是不加该注解,没法启动SpringBootpublic class DataSourceTest {
    @Autowiredprivate DataSource dataSource;
    @Testpublic 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文件能够修改每一个整合框架的默认属性,从而实现了快速整合的目的。

 

配置流程图:

0

 

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/schoolspring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=123456spring.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.找到数据源的配置类

0

3.数据源的配置类的属性以下

/prefix 前缀:在配置文件用spring.datasource.属性名=值 来配置属性
@ConfigurationProperties(prefix = "spring.datasource") 
public class DataSourcePropertiesimplements 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/springbootspring.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.SpringJUnit4Cla***unner;

@RunWith(SpringJUnit4Cla***unner.class)//SpringBoot测试要加上这个注解@SpringBootTestpublic class DataSourceTest {
    
    @Autowiredprivate DataSource dataSource;

    @Testpublic 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注解

相关文章
相关标签/搜索