欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

sringboot的出现 ——致敬狂神

程序员文章站 2022-03-30 09:58:32
一、趋势熟悉ssm的同僚们,已经逐渐感觉到,配置+配置+配置。。。。。。 简直把人配到,头皮发麻!于是就像当初spring的出现一样,springboot诞生了。springboot项目打出来的target默认是 jar,它可以独立运行! 因为默认内置了 tomcat。二、核心它的最大特点就是自动装配!import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure...

一、趋势

熟悉ssm的同僚们,已经逐渐感觉到,配置+配置+配置。。。。。。 简直把人配到,头皮发麻!于是就像当初spring的出现一样,springboot诞生了。

springboot项目打出来的target默认是 jar,它可以独立运行! 因为默认内置了 tomcat。

二、核心

它的最大特点就是自动装配!(启动器,模板技术)

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Springboot03WebApplication {

    public static void main(String[] args) {
        SpringApplication.run(Springboot03WebApplication.class, args);
    }

}
  • 它依然存在配置文件
    看上面这个启动类的 一个注解@SpringBootApplication
    从它看进去,就能够发现 它最终被注解为@Configuration !
    熟悉springmvc后期流行的那些用法的朋友,肯定记得:被这个注解标注的类等价于 beans.xml配置文件
    其中还会包含@Bean注解的方法,这就等价于 原来配置文件中的 bean!
    这条路线,能够解释,为啥使用springboot 我们不用配置这些配置文件,但他们依然能够被注入 的一部分, 就是 不是配置被移除了,而是配置的形式被Java类以注解的形式取代了!

  • Java代码形式的配置文件中的bean是如何被注入的
    依然从上面那个注解往里面去看,能够发现一个很关键的东西@EnableAutoConfiguration,望文生义就能理解到,它是允许自动配置。
    实际上,在spring-boot-autoConfigure-version.RELEASE.jar 中的META-INF目录下的spring.factories(自动装配的核心配置文件)文件中包含了,springboot预置的所有配置项,然后在应用程序启动时他们全部会被加载。但是springboot自身还具备一个@ConditionalONXXX的注解,这是一个条件判断注解,只有满足这个条件时,所加载的配置才会生效。
    它就和springboot的另一个标志性元素建立起了联系,那就是启动器。
    在springboot项目的pom文件中我们会看到很多spring-boot-starter-XXX这样的依赖,他们就是各个模块能够生效,所必须的启动器。在pom文件中配置了这个,maven仓库也会自动帮我们加载对应的jar包。
    springboot项目在启动时,会去扫描这个文件,包含了启动器,并且有对应jar包的就能够正常生效使用了。
    然而我们可以手动的去配置这个pom文件,所以也可以灵活的按需引入。

  • 被注入的配置的属性
    这些自动装配的配置类,必然会有包含属性的配置,springboot也帮我们制定了默认值,我们遵守:约定大于配置 这个原则,就能够正常的使用他们。 当然我们也能够自己去指定某些属性值。
    springboot推荐使用application.yml配置文件
    例如为一个类手动指定其属性

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

import java.util.Date;
import java.util.List;
import java.util.Map;

@Component
@ConfigurationProperties(prefix = "person")
public class Person {

    private String name;
    private Integer age;
    private boolean happy;
    private Date birth;
    private Map<String, Object> map;
    private List<Object> list;
    private Dog dog;

相应的application.yml配置文件

person:
  name: zz${random.int}${random.uuid}
  age: 3
  happy: false
  bug: bug--
  birth: 2020/7/5
  map: {k1: v1,k2: v2}
  list:
    - code
    - music
    - girl
  dog:
    name: ${person.bug:happy}_旺财
    age: 3

这样就可以,为这些类指定相应的属性值了。
yml配置文件比较灵活,与Java类的@ConfigurationProperties(prefix = “person”)注解配合使用即可
它支持
松散语法
jsr303校验
复杂类型封装

@ConfigurationProperties这个注解在springboot自动装配的源码中随处可见, 就是因为有了这个注解,所以我们可以在 application.yml配置文件中,去覆盖它所提供的默认值!

三、整合数据库操作(springdata)

只需要增加数据库配置文件

spring:
  datasource:
    username: root
    password: 123456
    url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&useUnicode=true&useSSL=true&characterEncoding=UTF-8
    driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource

    maxActive: 20
    initialSize: 5
    maxWait: 60000
    timeBetweenEvictionRunsMillis: 60000
    minEvictionRunsMillis: 300000
    validationQuery: select 1 from dual
    testWhileIdle: true
    testOnBorrow: false
    testOnReturn: false
    poolPreparedStatements: true
    maxOpenPreparedStatements: 20

    filters: stat,wall

就可以开始操作数据库了
它支持对jdbc的整合,druid的整合,redis的整合
druid最大的特别之处,就是与其他连接池包相比,它具备一个监控机制!

补充:常见的配合使用的安全框架:springSecurity、shiro

四、走近微服务

随着系统的完善,使用的用户逐渐增加,业务量持续增长。我们的的工程必定面临着一个问题:就是承载力。一台再强大的电脑也顶不住同时一万条业务线不卡顿执行。
这时分布式架构就应运而生了。
虽然它的诞生会引入一系列问题,但它能解决单机承载力有限的问题。所以我们只能选择去解决它引入的问题,从而使用它的决定性优势。

问题:
  • 1.多个服务端,客户端如何访问?
  • 2.多个服务端,他们之间如何通讯?
  • 3.多个服务端,如何去治理?(协调资源利用率,避免某些机器90% 某些机器10%)
  • 4.某个服务宕机了,如何解决
SpringCloud NetFlix 给出的 一站式解决方案 (2018年底 无限期停止维护)
  • 1.Api网关, 相关插件 zuul
  • 2.http的通讯方式,同步并阻塞 相关插件 Feign -> HttpClient
  • 3.服务注册与发现 , 相关插件 Eureka
  • 4.熔断机制 相关插件 Hystrix
Apache Dubbo + Zookeeper
  • 1.无,借助其他插件
  • 2.Dubbo框架 一框高性能的rpc框架
  • 3.zookeeper 服务注册与发现 (Hadoop,Hive)
  • 4.无, 借助其它插件

另外的 阿里巴巴 提供了一站式解决方案 spring cloud Alibaba 2.1.0

展望: 服务网格

本文地址:https://blog.csdn.net/qq_38697228/article/details/107166202