什么是Springboot?

Springboot是微服务,是Spring开源组织下的子项目,是Spring组件一站式解决方案,主要简化了Spring的难度,减省了繁重的配置,提供了各种启动器,开发者能够快速上手,即"开箱即用"。

为什么要用Springboot?

优点很多,例如,独立运行,简化配置,自动配置,无代码生成和XML配置,应用监控,上手容易………………

Springboot的优点

1. 减少开发,测试时间和努力

2. 使用javaConfig有助于避免使用XML

(⚠️Spring javaConfig是Spring社区的产品,它提供了配置SpringIOC容器的纯java方法,因为它有助于避免使用XML配置)

3. 避免大量的maven导入和各种版本的冲突

4. 提供意见发展方法

5. 通过提供默认值快速开发

6. 没有单独的web服务器需要,意味着不再需要启动tomcat,glassfish或其他东西

7. 需要更少的配置,因为没有web.xml文件。只需添加用@Configuration注释的类,然后添加用@Bean注释的方法,Spring将自动加载对象并像以前一样对其进行管理。

Springboot最大优势

Springboot最大优势是"约定优于配置",是一种软件设计范式,开发人员按照约定的方式去进行编程,可以减少开发人员需做决定的数量,获得简单的好处,而又不失灵活。

Spring Boot Starter和Spring JPA都是"约定优于配置",Spring Boot Starter在启动的过程中会根据约定的信息对资源进行初始化,Spring Boot JPA 通过约定的方式来自动生成sql,避免大量无效代码的编写。

Springboot的核心配置文件有哪些?

Springboot的核心配置文件是application和bootstrap配置文件。

application配置文件主要用于Springboot项目的自动化配置;

bootstrap配置文件用于以下应用场景:

1. 使用Spring cloud config 配置中心时,这时需要在bootstrap配置文件中添加连接到配置中心的配置属性来加载外部配置中心的配置信息;

2. 一些固定的不能被覆盖的属性

3. 一些加密/解密的场景。

配置文件的格式有:.preperties 和.yml两种,写法一样,格式不同

.properties文件,举例:

app.user.name = zhangsan

.yml文件,举例:

app:
  user:
    name: zhangsan

Springboot的核心注解有哪些?

@SpringBootApplication:它是启动类的注解,主要包含了@SpringBootConfiguration,@EnableAutoConfiguration,@ComponentScan三个注解

  • @SpringBootConfiguration:组合了@Configuration注解,实现配置文件功能;
  • @EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项;
  • @ComponentScan:Spring组件扫描。

开启Springboot特性的方式有?

1. 继承spring-boot-startr-parent项目

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.6.RELEASE</version>
</parent>

2. 导入spring-boot-dependencies项目依赖

<dependencyManagement>
    <dependencies>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-dependencies</artifactId>
        <version>1.5.6.RELEASE</version>
        <type>Pom</type>
        <scope>import</scope>        
    </dependencies>
</dependencyManagement>

Springboot需要独立的容器运行嘛?

可以不需要,因为内置了Tomcat/Jetty等容器。

运行Springboot的方式有:

1. 打包用命令或者放到容器中运行。

2. 用maven/Gradle插件运行

3. 直接执行main方法运行

Springboot自动配置原理是什么?

SpringBoot的自动配置注解是@EnableAutoConfiguration,这个注解方法会加载类路径及所有jar包下META-INF/spring。factories配置中映射的自动配置的类。

@Configuration,@ConditionalOnClass是自动配置的核心,首先它是一个配置文件,其次根据类路径下是否有这个类去自动配置。

实操了解下自动配置怎么玩:

添加一个配置类:

public class EnvConfig implements EnvironmentAware{

    private Environment env;

    public String getStringValue(String key){
        return env.getProperty(key);
    }

    public void setEnvironment(Environment env){
        this.env = environment;
    }
}

添加自动配置类:

@Configuration
@ConditionalOnClass(PropertyResolver.class)
public class EnvAutoConfig{
   return new EnvConfig();
}

创建META-INF/spring.factories文件,添加自动配置映射:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\\com.oceanpayment.common.config.env.EnvAutoConfig

这样就搞定了。

Springboot中的Starters是什么?

Starters可以看成是启动器,包含了一系列可以继承到应用里面的依赖包,可以一站式集成Spring及其他技术,不需要到处找示例代码和依赖包。

例如,想要使用Spring JPA访问数据库,只需要在pom.xml里面加入spring-boot-starter-data-jpa启动器依赖就可以使用了。

Starters包含了许多项目中需要用到的依赖,它们能够快速持续的运行,都是一系列得到支持的管理传递性依赖。

Springboot官方的启动器都是以spring-boot-starter-命名的,代表了一个特定的应用类型,第三方的启动器不能以spring-boot开头命名,它们都被Springboot官方保留。一般一个第三方的应该这样命名,像myBatics的myBatics-spring-boot-starter。

Starters分类:

1. SpringBoot应用类启动器

  • spring-boot-starter:包含自动配置,日志,YAML的支持
  • spring-boot-starter-web:使用SpringMVC构建web工程,包含restful,默认使用tomcat容器
  • ………………

2. SpringBoot生产启动器

  • spring-boot-starter-actuator:提供生产环境特性,能监控管理应用。

3. SpringBoot技术类启动器

  • spring-boot-starter-json:提供对JSON的读写支持
  • spring-boot-starter-logging:默认的日志启动器,默认使用Logback

4. 其他第三方启动器

 

如何在Springboot启动的时候运行一些特定的代码?

可以实现接口ApplicationRunner或者CommandLineRunner,这两个接口实现方式一样,都只提供了一个run方法。

ApplicationRunner:启动获取应用启动时候的参数

public interface ApplicationRunner{
    void run(ApplicationArguments args) throws Exception;
}

CommandLineRunner:启动获取命令行参数

public interface CommandLineRunner{

    void run(String... args) throws Exception;
}

使用方式:

//第一种
@Component
public class MyBean implements CommandLineRunner{

    public void run(String... args){
        //do something.....
    }
}

//第二种
@Bean
public CommandLineRunner init(){
    return (String... strings)->{};
}

Springboot有哪几种读取配置的方式?

Springboot可以通过@PropertySource,@Value,@Environment,@ConfigurationProperties来绑定变量

Springboot支持哪些日志框架?推荐和默认的日志框架是哪个?

Springboot支持Java Util Logging, Log4j2, Lockback作为日志框架,如果使用Starters启动器,Springboot将使用Logback作为默认的日志框架。

Springboot实现热部署有哪几种方式?

主要有两种方式:

1. SpringLoaded

2. Spring-boot-devtools

Springboot实现代码热部署是一件很简单的事情,代码的修改可以自动部署并重新热启动项目

引入devtools依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional>

</dependency>

 

Springboot兼容老Spring项目吗?

可以兼容,使用@ImportResource注解导入老Spring项目配置文件。

保护Springboot应用有哪些方法?

1. 在生产中使用https

2. 使用snyk检查你的依赖关系

3. 升级到最新版本

4. 启用CSRF保护

(⚠️CSRF代表跨站请求伪造。这时一,迫使最终用户在当前通过身份验证的web应用程序上执行不需要的操作。CSRF专门针对状态改变请求,而不是数据窃取,因为者无法查看对伪造请求的响应。)

5. 使用内容安全策略防止XS

…………

SpringBoot 2.X有什么新特性?与1.X有什么区别?

1. 配置变更

2. JDK版本升级

3. 第三方类库升级

4. 响应式Spring编程支持

5. Http/2支持

6. 配置属性绑定

7. 更多改进与加强

Springboot和Spring,SpringMVC的区别?

Spring和SpringMVC的问题在于需要配置的量的参数,而Springboot通过一个自动配置和启动的项来解决这个问题,这样就可以更好的更快速的构建产品就绪应用程序。

SpringBoot项目创建方式:

1. 登陆Spring Initializr创建

2. 设置一个maven项目并添加正确的依赖项来开始一个项目

 

Springboot的四大特性

1. Starter添加项目依赖

2. bean的自动化配置

Springboot会考虑应用中的其他因素并推断你所需要的Spring配置。例如在A类中有一个成员变量是在jar包中的B类,如果是普通的Springmvc模式,那么需要在xml中定义B类的一个bean对象,然后才可以在A类中使用@Autowired注解在注入此bean。但是在Springboot中默认启动了自动配置,在需要B类的时候可以生层B的bean对象并且注入到A中,不需要在xml做任何的配置,如果想要禁用自动配置,就将spring.boot.enableautoconfiguration的值设置为false。

3.Springboot CLI与Groovy的高效配合

Springboot CLI充分利用了Springboot Starter和自动配置的魔力,并添加了一些groovy的功能,简化了Spring的开发流程,通过CLI,我们能过运行一个或多个groovy脚本,并查看它们是如何运行的,在应用运行的过程中,CLI能够自动导入Spring类型并解析依赖。

4. Springboot Actuator