当前位置: 移动技术网 > IT编程>开发语言>Java > sringboot的出现 ——致敬狂神

sringboot的出现 ——致敬狂神

2020年07月09日  | 移动技术网IT编程  | 我要评论

一、趋势

熟悉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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网