SpringBoot
什么是微服务
微服务和以往有什么区别
为什么SpringBoot适合做微服务框架
SpringBoot或者微服务的不足
springBoot启动过程
springBoot如何进行自动装配和自定义配置
首先有几个注解
@configuration:声明一个配置类
@ConfigurationProperties:用于将xxx.yml配置文件中的对象与xxxproperties类进行对应,相当于@value逐一进行注入
@EnableConfigurationProperties:该注解用于自动配置属性,将配置类和xxxproperties进行对应
@ConditionalOnxxx:判断后接条件是否全部满足,满足则注入bean
- @EnableAutoConfiguration注解引入了一个自动配置导入搜索器(AutoConfigurationImportSelector)
- 这个搜索器会使用SpringFactoriesLoader加载器去扫描METE-INF/spring.factories路径下的文件
在METE-INF/spring.factories中存在许多的configuration配置类路径,
- 这些配置类使用@EnableConfigurationProperties注解与xxxproperties配置文件类进行对应
- xxxproperties配置文件类中使用@ConfigurationProperties注解将配置文件中的属性与注入到该类中
所以修改配置文件中的属性值即可实现自定义配置。
SpringBoot如何使得配置变得简单
springBoot的依赖在父工程中【spring-boot-dependencies】
版本号定义在spring-boot-dependencies中
springboot将部分功能场景变成一个个的启动器,使用时直接引入对应的启动器即可
springboot在启动是会加载大量的自动配置类
METE-INF/spring.factories
默认配置文件,如果在该文件中不配置的话需要进行手动配置
在springboot启动的时候不会全部加载,需要判断是否引入了对应的start启动器。
SpringBoot如何使得部署变得简单
- SpringBoot内置tomcat、jetty等web容器
- SpringBoot生成的jar包可以使用
java -jar
直接执行 - SpringBoot提供Spring-boot-devtools用来实现热部署
@SpringBootApplication
-
springboot的核心注解
@SpringBootConfiguration,@EnableAutoConfiguration和@ComponentScan三个注解的合集
@ComponentScan进行component扫描,将bean加载到容器中
@EnableAutoConfiguration允许自动配置,通过这个注解spring通过【AutoConfigurationImportSelector】把所需的bean注入到容器中。
@SpringBootConfiguration作用等同于@Configuration,用来声明当前类是一个配置类。通过@Bean将bean对象交给spring容器管理。
@ConditionalONXXX
表示如果该注解的条件都满足才会生效
springboot启动时@springbootApplication做了哪些操作
- 将所有依赖jar包导入到
- 声明启动类是一个component,将其交给spring容器管理
- 扫描所有的component,将其加载到容器中
SpringApplication类
- 推断是普通项目还是web项目【根据dispatchServlet,servletContainer】
- 加载所有初始化器
- 设置所有监听器
- 确定主类
springBoot配置文件
- 两种格式【yml或者properties】
- 名称固定【application.yml或application.properties】
- yaml可以存储对象,properties只能存储键值对
- 推荐yml
语法结构:
application.properties
key=value
----------
application.yml
key:空格value
application.yml
#存储对象
student:
name: hh
age: 2
student: {name: hh,age: 3}
#数组/list
name:
- zhang
- wang
- zhao
name: [zhang,wang,zhao]
#map
map: {k1: v1,k2: ${random.int}}
-
@ConfigurationProperties
可以使用该注解将yml配置文件中的对象进行注入
@ConfigurationProperties(prefix=“person”)
-
@PropertySource
@PropertySource(value = “classpath:test01.properties”)
用于加载指定配置文件【适用于properties格式】
-
@Vlidated
数据校验
@email(message=“不符合email格式”)
private String email;
-
配置文件的优先级:
- 项目目录下的config文件夹
- 项目根目录
- 类路径【resource】下的config文件夹
- 类路径下
-
多环境配置
properties格式 spring.profiles.active=dev ------- yml格式 多个版本可以同时写在同一个文件中 定义不同的名字,使用---隔开 使用: spring: profiles: active: dev
yml配置文件是如何解析的
在METE-INF/spring.factories中存在许多的configuration配置类路径,
这些配置类使用@EnableConfigurationProperties注解与xxxproperties配置文件类进行对应
xxxproperties配置文件类中使用@ConfigurationProperties注解将配置文件中的属性与注入到该类中
所以修改配置文件中的属性值即可实现自定义配置。
整合
整合数据库
在yml配置文件中配置了datasource数据源之后
可以使用datasource的bean对象连接数据库进行操作。
-
application.yml
spring: datasource: username: root password: root url: jdbc:mysql://127.0.0.1:3306/gl_itgs?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8 driver-class-name: com.mysql.jdbc.Driver type: com.alibaba.druid.pool.DruidDataSource filters: wall,ltog4j,stat
-
testControllet
@RestController public class testController { @Autowired DataSource dataSource; //自动注入jdbctmeplate即可 @Autowired JdbcTemplate jdbcTemplate; @GetMapping("/findAll/{dmlb}") public List<Map<String, Object>> getData(@PathVariable String dmlb) throws SQLException { String sql = "select * from gl_sys_code where dmlb =" +dmlb +" limit 10"; List<Map<String, Object>> list = jdbcTemplate.queryForList(sql); return list; } }
-
xxxtemplate
spring已经配置好的bean,拿来即用,如jdbctemplate
整合DRUID
DRUID 是阿里巴巴平台上一个数据库连接池实现
结合了DBCP,C3P0等数据库连接池的有点,同时加入了日志监控
整合mybatis
整合springSecurity
主要功能:认证,授权
整合swagger
API框架
作用:REST API 文档在线自动生成工具
直接运行,可以在线测试API接口
支持多种语言
使用
-
导入jar包、
swagger2,UI
<dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.9.2</version> </dependency> <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui --> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.9.2</version> </dependency>
-
配置swaggerConfiguration
//自定义swagger配置 @Configuration @EnableSwagger2 public class SwaggerConfig { }
-
自定扫描包
Docket的select方法自定义扫描包,是否可用等。
@Configuration @EnableSwagger2 public class SwaggerConfig { @Bean public Docket docket(Environment environment) { //根据项目运行环境设置是否可用 boolean flag = true; Profiles profiles = Profiles.of("dev"); flag = environment.acceptsProfiles(profiles); return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .enable(flag) .select() //指定要扫描的包 .apis(RequestHandlerSelectors.basePackage("com.example.demo.controller")) .build(); } private ApiInfo apiInfo() { Contact DEFAULT_CONTACT = new Contact("", "", ""); return new ApiInfo( "Api Documentation", "Api Documentation", "1.0", "urn:tos", DEFAULT_CONTACT, "Apache 2.0", "http://www.apache.org/licenses/LICENSE-2.0", new ArrayList() ); } }
-
设置多个分组
生成多个docketBean对象,设置不同的分组名称
@Bean public Docket docket1(Environment environmen) { return new Docket(DocumentationType.SWAGGER_2).groupName("A"); } @Bean public Docket docket1(Environment environmen) { return new Docket(DocumentationType.SWAGGER_2).groupName("B"); }
-
注释操作
@ApiOperation("获取用户") @Api(tags = "controller") @ApiParam("用户id") ---- @ApiModel("用户类") public class User { @ApiModelProperty("用户名") private String name; @ApiModelProperty("密码") private String password; } ---- @Api(tags = "controller") @RestController public class testController { @Autowired DataSource dataSource; @Autowired JdbcTemplate jdbcTemplate; @GetMapping("/findAll/{dmlb}") public List<Map<String, Object>> getData(@PathVariable String dmlb) throws SQLException { String sql = "select * from gl_sys_code where dmlb =" +dmlb +" limit 10"; List<Map<String, Object>> list = jdbcTemplate.queryForList(sql); return list; } @ApiOperation("获取用户") @RequestMapping(value = "/user/{id}",method = RequestMethod.GET) public String getUser(@ApiParam("用户id") @PathVariable String id){ return id + ""; } }
springBoot 与docker
Docker
基本概念
-
镜像(images)
用于创建docker的模板
-
容器
镜像启动后的实例称为一个容器,是独立运行的一个或一组应用
-
客户端
连接docker主机进行操作
-
主机
安装了Docker程序的机器
-
仓库
用来保存各种打包好的镜像【dockhub】
与虚拟机的不同
使用步骤
- 安装docker
- 去仓库找到对应的镜像
- 使用docker运行这个镜像,生成一个docker容器
- 对容器的启动停止就是对软件的启动停止。
安装
1. sudo apt-get update
2. sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
3. sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
4. sudo apt-key fingerprint 0EBFCD88
5. sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
6. sudo apt-get update
7. 安装最新版:sudo apt-get install docker-ce docker-ce-cli containerd.io
7. 安装指定版本:
获取可用版本信息: apt-cache madison docker-ce
安装: sudo apt-get install docker-ce=<VERSION_STRING> docker-ce-cli=<VERSION_STRING> containerd.io
8. 验证:docker --version
或: docker --version
使用
-
检索
docker search mysql
-
拉取
docker pull mysql
docker pull mysql:5.5
-
列表
docker images
-
删除镜像
docker rmi
-
启动容器
docker run --name -d :
docker run --name mytomcat -d tomcat:8.5-jdk11-openjdk
-
重启容器
docker restart /
-
查看运行的容器
docker ps
-
查看所有容器
docker ps -a
-
容器重命名
docker rename
-
停止运行的容器
docker stop
-
删除容器
dock rm
-
端口映射
docker run -d -p 主机端口号:映射端口号 镜像名
docker run -d -p 8888:8080 tomcat
-d : 后台运行
-p : 端口映射
-
容器日志
docker log /:
-
进入容器目录
docker exec -it /bin/bash
docker docker exec -it 968996d73e77 /bin/bash
实例
使用MySQL
//开启mysql
docker run -p 3307:3306 --name mysql01 -e MYSQL_ROOT_PASSWORD=000000 -d mysql:5.5
run : 执行
-p:端口映射
--name: 自定义容器名
-e MYSQL_ROOT_PASSWORD:设置MySQLROOT用户密码
-d:后台执行