sringboot的出现 ——致敬狂神
一、趋势
熟悉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