SpringBoot基础以及部分整合(swagger,数据库等...)(待完善)

本文深入探讨SpringBoot作为微服务框架的原因,详细解释其启动过程、自动配置原理,以及如何简化部署。同时,文章涵盖了SpringBoot整合数据库、DRUID、Mybatis、SpringSecurity和Swagger,并介绍了Docker的基本概念和使用,展示了SpringBoot应用的Docker化过程。
摘要由CSDN通过智能技术生成

SpringBoot

什么是微服务

微服务和以往有什么区别

为什么SpringBoot适合做微服务框架

SpringBoot或者微服务的不足

springBoot启动过程

springBoot如何进行自动装配和自定义配置

首先有几个注解

@configuration:声明一个配置类

@ConfigurationProperties:用于将xxx.yml配置文件中的对象与xxxproperties类进行对应,相当于@value逐一进行注入

@EnableConfigurationProperties:该注解用于自动配置属性,将配置类和xxxproperties进行对应

@ConditionalOnxxx:判断后接条件是否全部满足,满足则注入bean


  1. @EnableAutoConfiguration注解引入了一个自动配置导入搜索器(AutoConfigurationImportSelector)
    在这里插入图片描述
    在这里插入图片描述
  1. 这个搜索器会使用SpringFactoriesLoader加载器去扫描METE-INF/spring.factories路径下的文件
    在这里插入图片描述
    ​ 在METE-INF/spring.factories中存在许多的configuration配置类路径,
    在这里插入图片描述
  1. 这些配置类使用@EnableConfigurationProperties注解与xxxproperties配置文件类进行对应
    在这里插入图片描述
  1. 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做了哪些操作

  1. 将所有依赖jar包导入到
  2. 声明启动类是一个component,将其交给spring容器管理
  3. 扫描所有的component,将其加载到容器中

SpringApplication类

  1. 推断是普通项目还是web项目【根据dispatchServlet,servletContainer】
  2. 加载所有初始化器
  3. 设置所有监听器
  4. 确定主类

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;

  • 配置文件的优先级:

  1. 项目目录下的config文件夹
  2. 项目根目录
  3. 类路径【resource】下的config文件夹
  4. 类路径下
  • 多环境配置

    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

基本概念
  1. 镜像(images)

    用于创建docker的模板

  2. 容器

    镜像启动后的实例称为一个容器,是独立运行的一个或一组应用

  3. 客户端

    连接docker主机进行操作

  4. 主机

    安装了Docker程序的机器

  5. 仓库

    用来保存各种打包好的镜像【dockhub】

与虚拟机的不同
使用步骤
  1. 安装docker
  2. 去仓库找到对应的镜像
  3. 使用docker运行这个镜像,生成一个docker容器
  4. 对容器的启动停止就是对软件的启动停止。
安装
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
使用
  1. 检索

    docker search mysql

  2. 拉取

    docker pull mysql

    docker pull mysql:5.5

  3. 列表

    docker images

  4. 删除镜像

    docker rmi

  5. 启动容器

    docker run --name -d :

    docker run --name mytomcat -d tomcat:8.5-jdk11-openjdk

  6. 重启容器

    docker restart /

  7. 查看运行的容器

    docker ps

  8. 查看所有容器

    docker ps -a

  9. 容器重命名

    docker rename

  10. 停止运行的容器

    docker stop

  11. 删除容器

    dock rm

  12. 端口映射

    docker run -d -p 主机端口号:映射端口号 镜像名

    docker run -d -p 8888:8080 tomcat

    -d : 后台运行

    -p : 端口映射

  13. 容器日志

    docker log /:

  14. 进入容器目录

    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:后台执行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值