Spring boot核心技术(一)

上一章节Spring boot入门, http://blog.csdn.net/qq_22860341/article/details/78930813
本章主要介绍spring boot的核心。java

*Spring 核心功能
*Spring 配置web


Spring 核心功能

1. 独立运行的spring 项目spring

Spring Boot能够以jar的形式独立运行,运行一个Spring Boot项目只须要经过 java -jar xxx.jar命令来运行。tomcat

2. 内嵌servlet容器安全

Spring Boot能够选择内嵌Tomcat,Jetty或者Udertow,这样咱们不须要以war的形式部署项目。ruby

3. 提供starter简化maven配置
Spring 提供一系列starter pom来简化maven的依赖加载。好比加入spring-boot-starter-web。app

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

Spring Boot会自动加入Tomcat和Spring MVC的依赖。框架

4.自动配置Springssh

Spring boot会根据在类路径中的jar,类。为jar包里的类自动配置bean,这样极大减小咱们要是用的配置。固然并非全部的场景都是这样,有时候仍是须要去自定义配置的。maven

5.准生产的应用监控

Spring Boot提供了基于http,ssh,telnet对运行时的项目进行监控。

6,无代码生成和xml配置

Spring4.x提倡java配置和注解配置组合,二Spring Boot不须要任何xml便可实现spring配置。

7,Spring boot的优势
这里写图片描述

Spring 配置

1.基本配置

(1),入口类和@SpringBootApplication

SpringBoot一般有一个名为*Application.java的入口类,入口类里面有一个main方法,这个main方法其实就是一个标准的Java应用的main方法,也是启动SpringBoot的方法。

@SpringBootApplication是SpringBoot的核心注解,它是一个核心注解,源码以下:
这里写图片描述

其中@EnableAutoconfiguration让Spring Boot根据类路径中的jar包依赖为当前项目进行自动配置。

例如添加了spring-boot-starter-web依赖,会自动添加Tomcat和Spring MVC的依赖,那么Spring Boot会对Tomcat和SpringMVC进行自动配置。

例如添加了spring-boot-starter-data-jpa依赖,SpringBoot会自动进行JPA相关的配置。
SpringBoot会自动扫描@SpringBootApplication所在类的同级包以及下级包里的bean.

(2)关闭特定的自动配置

关闭特定的自动配置使用@SpringBootApplication注解的exclude参数,例如

@SpringBootApplication(exclude={DataSourceAutoConfiguration.class})

(3)定制Banner

1.1 修改banner
(1)当咱们启动SpringBoot时有一个默认图案。

这里写图片描述

(2)咱们在src/main/resources下新建一个banner.txt文件.
(3)经过http://patorjk.com/software/taag/网站生成字符,如输入shabi,将生成的字符图案复制到banner.txt中.
(4)从新运行SpringBoot项目,启动时图案就改变了。
这里写图片描述

1.2关闭Banner

main方法修改成:

public static void main(String[] args) {
        //SpringApplication.run(DemoApplication.class, args);
        SpringApplication app = new SpringApplication(DemoApplication.class);
        app.setShowbanner(false);
        app.run(args);
    }

或者fluent API修改成

new SpringApplicationBuilder(DemoApplication.class)
                          .showBanner(false)
                          .run(args);

高版本的Spring Boot没有app.setShowbanner(false);方法,我目使用1.5.9版本。能够在application.properties中配置:

spring.main.banner-mode=off

2,Spring Boot的配置文件

Spring Boot使用一个全局的配置文件application.properties或者application.yml放置在src/main/resources文件下或类路径的/config下。

Spring 不只支持常规的.properties配置文件,还支持yaml的配置文件,yaml是以数据为中心的语言,在配置数据的时候具备面向对象特征。

Spring Boot的全局配置文件的做用是对一些默认配置的配置值进行修改。

(1)简单示例

将tamcat默认的8080端口改成9090,并将默认的访问路径”/”修改成”/helloboot”;
在application.properties加入:

#不配置默认为8080端口
server.port=9090 
#将默认的访问路径"/"修改成"/helloboot"
server.contextPath=/helloboot

说明:contextPath,context-path通用,这里不介绍application.yml配置。

3.starter pom

SpringBoot为咱们提供了简化企业级开发绝大多数场景的starter pom,只要使用了场景须要的starter pom,SpringBoot会自动配置bean。

好比以前说的添加了spring-boot-starter-web依赖,会自动添加Tomcat和Spring MVC的依赖,那么Spring Boot会对Tomcat和SpringMVC进行自动配置。

pom.xml:

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

(3.1) 官方提供的starter pom
这里写图片描述
这里写图片描述
这里写图片描述

(3.2)第三方starter pom

这里写图片描述

配置方式
在pom.xml的project标签中加入:

<repositories>  

<repository>  
<id>惟一id</id>  
<name>名称</name>  
<url>url远程连接</url>  
</repository> 
<repository>

<id>lilyproject</id>  
<name>Lily Maven repository</name>  
<url>http://lilyproject.org/maven/maven2/deploy/</url>  
</repository> 

</repositories>

(3.3)使用xml配置

SpringBoot提倡零配置,即无XML配置,可是在实际开发过程当中,可能一些特殊的要求你必须使用xml配置,这时咱们可使用SpringBoot提供的@ImportResource来加载xml配置。
例如:

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

4,外部配置文件

SpringBoot容许使用properties文件,yaml文件,和命令参数做为外部配置。

(4.1)命令行参数配置

SpringBoot是基于jar运行的,打成jar的程序能够经过 下面命令直接运行的。

java -jar XXX.jar

能够经过如下命令修改tomcat端口:

java -jar XXX.jar --server.port=9090

(4.2)常规属性配置

在常规的Spring环境下,注入properties文件里面的值的方式,经过@propertySource指明文件位置,而后经过@Value注入值。
在SpringBoot项目中,咱们只须要在application.properties定义属性,直接使用@Value注入。

实例

在之前的基础上在application.properties文件增长:

user.myname=bobo
user.age=18

@Value注入

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloComtroller {
       @Value("${user.myname}")
       private String name;
       @Value("${user.age}")
       private Integer age;

      @RequestMapping("/")
      public String helloword(){

       return "我叫"+name+",今年"+age+"岁!";

      }
}
运行结果:

这里写图片描述

说明:这里若是定义user.name是获取系统的名称,后来改成myname。

(4.3)类安全的配置

以上使用@Value注入每一个配置显得格外的麻烦,由于咱们的配置一般有不少个,像那样每一个配置就要注入屡次。
SpringBoot提供了基于类型安全的配置方式,经过@ConfiggurationProperties将properties属性和一个bean及其属性关联,从而实现类型安全的配置。
基于之前的application.properties文件:

user.myname=bobo
user.age=18

固然咱们也能够新建properties文件,经过@ConfiggurationProperties的属性locations指定properties的位置,且须要在入口类上配置。

类型安全的bean以下:

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties(prefix="user")
public class UserSetting {
       private String myname;
       private Integer age;
    public String getMyname() {
        return myname;
    }
    public void setMyname(String myname) {
        this.myname = myname;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }

}

代码解释:
经过@ConfigurationProperties加载文件的配置,prefix属性指定配置时的前缀,locations指定配置文件路径,本例将配置放在application.properties文件中,不须要指定位置。

若新建了properties文件,则须要在指定位置。
SpringBoot1.5以前能够经过@ConfigurationProperties的locations属性指定。

@ConfigurationProperties(prefix="user",locations="classpath:config/xxxxx.properties")

SpringBoot1.5以后使用:

@PropertySource("classpath:config/xxxxx.properties")
/*@PropertySource(value={""})*/

检查代码:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.example.demo.entity.UserSetting;

@RestController
public class HelloComtroller {

    @Autowired
      private UserSetting userSetting;

      @RequestMapping("/")
      public String helloword(){

       return "我叫"+userSetting.getMyname()+",今年"+userSetting.getAge()+"岁!";

      }
}

代码解释:
使用@Autowired能够直接注入该配置。

(4.4)日志配置

SpringBoot支持java Util Logging,Log4j,Log4j2和Logback做为日志框架。
SpringBoot默认使用Logback做为日志框架。

配置日志级别:

#默认的Logback日志框架
logging.file=E:\\springBootWork\\mylog

配置日志文件,格式为logging.level.包名=级别

logging.level.org.springframework.web=DEBUG

(4.5)Profile配置

profile是Spring用来针对不一样的环境对不一样的配置提供支持,全局profile使用application-{profile}.properties,如application-prod.properties.
经过在application.properties文件中设置spring.profils.active=prod来指定活动的profile。

实例

下面作一个简单的演示,如咱们分为生产环境和开发环境,生产环境下端口为8088,开发环境端口为8888.
新建
application-dev.properties文件中加入

server.port=8888

application-prod.properties文件中加入

server.port=8088

application.properties配置:

spring.profiles.active=prod

运行项目

这里写图片描述

本章节就介绍到这里,下一章节请关注Spring boot核心技术(二),将在春节以前写,主要讲解SpringBoot运行原理,核心注解,实战实例等,谢谢关注。
这里写图片描述