SpringBoot基础——追根溯源servlet是啥,tomcat是啥,maven是啥 & springBoot项目初步,maven构建(1)

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取

| 检查 verify | 检查 | 对集成测试的结果进行检查,以保证质量达标 |
| 安装 install | 安装 | 安装打包的项目到本地仓库,以供其他项目使用 |
| 部署 deploy | 部署 | 拷贝最终的工程包到远程仓库中,以共享给其他开发人员和工程 |

在这里插入图片描述

1.clean:清理,test:测试,compile:编译

clean清理target里面的内容,compile重新编译;

2.package:打包,打包成jar包和使用

(1)引入maven插件
<!-- 构建-->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

(2)打包jar包和使用

在这里插入图片描述

直接运行一个jar包

java -jar springboot-hello-1.0-SNAPSHOT.jar

在这里插入图片描述

Spring Boot Reference Documentation

在这里插入图片描述

完整的pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.tianju.bm</groupId>
    <artifactId>book-mall-v1.0</artifactId>
    <version>1.0-SNAPSHOT</version>
<!-- 项目打包成jar包-->
    <packaging>jar</packaging>
<!-- 项目描述-->
    <description>在线买书v1.0版本</description>

<!-- 版本定义-->
    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- 写版本号-->
        <project.druid.version>1.2.18</project.druid.version>
        <project.mybatis.version>2.3.1</project.mybatis.version>
        <project.mybaitsPlus.version>3.5.3.1</project.mybaitsPlus.version>
        <project.knife.version>4.0.0</project.knife.version>
    </properties>

<!-- 起步依赖-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.13</version>
    </parent>

<!-- 依赖-->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

<!-- 阿里数据源-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>${project.druid.version}</version>
        </dependency>

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>${project.mybatis.version}</version>
        </dependency>

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>${project.mybaitsPlus.version}</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
<!-- TODO:这里能写scope,test吗-->
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

<!-- 接口测试工具-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>${project.mybaitsPlus.version}</version>
        </dependency>

        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>knife4j-openapi2-spring-boot-starter</artifactId>
            <version>${project.knife.version}</version>
        </dependency>


    </dependencies>

<!-- 构建-->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>



</project>

3.deploy:部署,关于部署到私服

在这里插入图片描述

项目打包成jar包,并且存到私服,之后就可以在depenency里面引入

在这里插入图片描述

存到私服里面就长这样

在这里插入图片描述

夯实基础,拔高项目

在这里插入图片描述

静态资源用NGNIX反向代理

缓存问题Redis,请求数据库

MQ中间件,消峰,

解耦,另外的服务器MQ解耦

查询的效率问题,模糊的智能检索,ES,也是缓存,全文检索

MySQL的主从,多个数据库,分表分库,主从分离,负载均衡

在这里插入图片描述

SpringBoot项目

https://spring.io/projects/spring-boot#overview

在这里插入图片描述

Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can “just run”.

We take an opinionated view of the Spring platform and third-party libraries so you can get started with minimum fuss. Most Spring Boot applications need minimal Spring configuration.

If you’re looking for information about a specific version, or instructions about how to upgrade from an earlier release, check out the project release notes section on our wiki.

Features

  • Create stand-alone Spring applications
  • Embed Tomcat, Jetty or Undertow directly (no need to deploy WAR files) WAR(WEB项目) JAR(java项目,更通用)
  • Provide opinionated ‘starter’ dependencies to simplify your build configuration 比如spring-boot-starter-parent
  • Automatically configure Spring and 3rd party libraries whenever possible 第三方的库
  • Provide production-ready features such as metrics, health checks, and externalized configuration
  • Absolutely no code generation and no requirement for XML configuration 不再需要XML文件了

项目开发过程中,为什么要使用XML文件?

软件解耦,----> 使用注解代替XML文件,@ ----> 注解的底层用的是java的反射

官方文档

https://docs.spring.io/spring-boot/docs/2.7.12/reference/htmlsingle/#legal

在这里插入图片描述

新建Maven项目

https://maven.apache.org/

在这里插入图片描述

Apache Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project’s build, reporting and documentation from a central piece of information.

项目的全周期管理工具:

  • 创建
  • 仓库
  • 编译
  • 运行
  • 打包
  • 部署
  • 测试

竞争对手:Gradle:Android 这个是java写的

POM:project object model

maven是啥?

https://mvnrepository.com/

在这里插入图片描述

<!-- https://mvnrepository.com/artifact/com.alibaba/druid-spring-boot-starter -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.2.9</version>
</dependency>


在这里插入图片描述

第三方库
Apache Druid是一个实时分析型数据库,旨在对大型数据集进行快速的查间分析('QLAP"查间)。Druid最常被当做数据库来用以支持实时摄取、高性能查问和高稳定运行的应用场景,同时,Du也通常被用来助力分析型应用的图形化界面,或者当做需要快速聚合的高并发后端API,Druid最适合应用于面向事件类型的数据。

在这里插入图片描述

properties是干啥的:记录依赖的版本号,使用${引入版本}

好处:可以直接在这里还版本号,就不用从下面找:

在这里插入图片描述

在这里插入图片描述

项目的结构

在这里插入图片描述

真实项目中有三种环境

  • 开发环境 dev
  • 测试环境 test
  • 生产环境 prod 上线环境

在这里插入图片描述

在这里插入图片描述

没有配置mybatis导致的报错

在这里插入图片描述

@SpringBootApplication 的 exclude
package com.tianju.springboot;

import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;

@SpringBootApplication(
        exclude = {
        // 排除掉mybatis相关配置的自动装载 @EnableAutoConfiguration
        DruidDataSourceAutoConfigure.class,
        DataSourceAutoConfiguration.class}
)
public class App {
    public static void main(String[] args) {
        SpringApplication.run(App.class);
    }
}


在这里插入图片描述

druid连接数据库

以前是每次连接,都建立,连接完就断开;

现在是创建多个数据源,用完后不是断开,是把连接放回到连接池里面;

在这里插入图片描述

server:
  port: 9090

# 1.连接数据库——对应之前 xml文件的数据库
spring:
  datasource:
    druid:
      url: druid.url=jdbc:mysql://127.0.0.1:3306/community?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
      username: root
      password: 123

banner.text

https://www.bootschool.net/ascii-art/search

在这里插入图片描述

    |\__/,|   (`\
  _.|o o  |_   ) )
-(((---(((--------

server:
  port: 9090

# 1.连接数据库——对应之前 xml文件的数据库
spring:
  # 启动时的图标
  banner:
    charset: utf-8
    location: classpath:./banner.txt

在这里插入图片描述

Maven项目管理

1.clean:清理,test:测试,compile:编译

clean清理target里面的内容,compile重新编译;

2.package:打包,打包成jar包和使用

(1)引入maven插件

<!-- 构建-->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

(2)打包jar包和使用

在这里插入图片描述

直接运行一个jar包

java -jar springboot-hello-1.0-SNAPSHOT.jar

在这里插入图片描述

关于测试

1.单元测试@RunWith(SpringJUnit4ClassRunner.class)

导包

<!-- springboot test-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>

		<dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
<!-- 表示在测试的时候有效-->
            <scope>test</scope>
        </dependency>

配置yml文件

server:
  port: 9090

# 1.连接数据库——对应之前 xml文件的数据库
spring:
  # 启动时的图标
  banner:
    charset: utf-8
    location: classpath:./banner.txt

  datasource:
    druid:
# type: com.alibaba.druid.pool.DruidDataSource
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://127.0.0.1:3306/mybatis?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
      username: root
      password: 123
mybatis:
  # 给所有的实体类起别名
  type-aliases-package: com.tianju.springboot.entity
  # 扫描mapper的地方
  mapper-locations: classpath:/mapper/\*Mapper.xml
  configuration:
    # 开启日志,可以看到SQL语句
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl


在这里插入图片描述

进行测试

package com.tianju.springboot.service.impl;

import com.tianju.springboot.service.IEmpService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import static org.junit.Assert.\*;
@SpringBootTest
@RunWith(SpringJUnit4ClassRunner.class)
public class EmpServiceImplTest {

    @Autowired
    private IEmpService empService;

    @Test
    public void queryAll() {
        System.out.println(empService.queryAll());
    }
}

在这里插入图片描述

2.controller测试

生成访问链接

在这里插入图片描述

在这里插入图片描述

排除tomcat用netty或jetty

springboot内置服务器默认是tomcat,应为引入的spring-boot-starter-web中依赖了spring-boot-starter-tomcat,当然也可以手动关闭依赖使用别的服务器

在这里插入图片描述

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
<!-- TODO:把tomcat排除在外,用netty -->
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

<!-- 引入netty-->


![img](https://img-blog.csdnimg.cn/img_convert/636576064e5b9f8da0db1584e93f3818.png)
![img](https://img-blog.csdnimg.cn/img_convert/f09f9cfd17d10515fe53989fe81de869.png)

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化的资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618608311)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

tifactId>
<!-- TODO:把tomcat排除在外,用netty -->
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

<!-- 引入netty-->


[外链图片转存中...(img-BGufzHLz-1715066307601)]
[外链图片转存中...(img-T1cRYtAy-1715066307602)]

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化的资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618608311)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值