参考
文章:https://www.yuque.com/atguigu/springboot
视频:https://www.bilibili.com/video/BV1Et411Y7tQ?p=112
官方:spring.io
文章
https://blog.csdn.net/u011863024/article/details/113667634
https://blog.csdn.net/u011863024/article/details/113667946
要求
java 1.8及以上
maven 3.3及以上
Spring生态圈
spring宏观的说是整个spring生态圈,微观的说就是一个spring framework
spring覆盖了web开发、数据访问、安全控制、分布式、消息服务、移动开发、批处理…
springBoot
能快速创建出生产级别的Spring应用
SpringBoot是整合Spring技术栈的一站式框架
SpringBoot是简化Spring技术栈的快速开发脚手架
它的底层是spring框架,springBoot可帮整合整个spring技术栈,减少配置化
· 项目脚手架,能快速搭建spring应用,内嵌web服务器,简化构建配置
特点:依赖管理+自动配置
依赖管理
· 父项目做依赖管理
// 每个springboot工程都有一个spring-boot-starter-parent父项目,父项目用于做依赖管理
// 父项目申明了很多依赖,子项目继承了父项目后,子项目以后写依赖就不再需要写版本号了
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.4.RELEASE</version>
</parent>
· 开发导入start场景启动器
1、spring-boot-start-* springboot自带的场景启动器,* 代表某种场景
2、只要引入start,这个场景的所有需要的常规依赖都会自动导入
3、*-spring-boot-starter 第三方场景启动器
4、所有场景启动器的最底层的依赖都是spring-boot-starter
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>2.3.4.RELEASE</version>
<scope>compile</scope>
</dependency>
· 无需关注版本号,自动仲裁版本;但是引入非版本仲裁的jar,要写版本号。
· 可以修改版本号
1、查看spring-boot-dependencies里面规定当前依赖的版本 用的 key。
2、在当前项目里面重写配置
<properties>
<mysql.version>5.1.43</mysql.version>
</properties>
自动配置
· 自动配置tomcat
引入Tomcat依赖。
配置Tomcat
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<version>2.3.4.RELEASE</version>
<scope>compile</scope>
</dependency>
· 自动配置springMVC
· 自动配置web常见功能,如字符编码问题
SpringBoot帮我们配置好了所有web开发的常见场景
public static void main(String[] args) {
//1、返回我们IOC容器
ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args);
//2、查看容器里面的组件
String[] names = run.getBeanDefinitionNames();
for (String name : names) {
System.out.println(name);
}
}
· 默认的包结构
• 主程序所在包及其下面的所有子包里面的组件都会被默认扫描进来
• 无需以前的包扫描配置
• 想要改变扫描路径,@SpringBootApplication(scanBasePackages=“com.atguigu”)
• 或者@ComponentScan 指定扫描路径
@SpringBootApplication等同于@SpringBootConfiguration + @EnableAutoConfiguration + @ComponentScan(“com.atguigu.boot”)
· 各种配置拥有默认值
· 按需加载所有自动配置项,引入了哪些场景这个场景的自动配置才会开启,SpringBoot所有的自动配置功能都在 spring-boot-autoconfigure 包里面
优点
• 创建独立Spring应用
• 内嵌web服务器
• 自动starter依赖,简化构建配置
• 自动配置Spring以及第三方功能
• 提供生产级别的监控、健康检查及外部化配置
• 无代码生成、无需编写XML
缺点
更新快,不易学习
springBoot时代背景
springboot的时代背景是微服务和分布式
微服务:将应用按业务拆分成一组的小服务,每个服务独立部署和升级,服务之间使用轻量级HTTP交互。每个服务可以使用不同的语言、不同的存储技术
1、微服务
微服务是一种架构风格
一个应用拆分为一组小型服务
每个服务运行在自己的进程内,也就是可独立部署和升级
服务之间使用轻量级HTTP交互
服务围绕业务功能拆分
可以由全自动部署机制独立部署
去中心化,服务自治。服务可以使用不同的语言、不同的存储技术
2、分布式
分布式的困难: • 远程调用• 服务发现• 负载均衡• 服务容错• 配置管理• 服务监控• 链路追踪• 日志管理• 任务调度• …
分布式的解决:• SpringBoot + SpringCloud
3、云原生
maven设置
修改本地maven配置文件
// 修改镜像,使用阿里云镜像,能快速下载依赖文件
<mirrors>
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
</mirrors>
// maven使用jdk1.8进行项目编译
<profiles>
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
</profiles>
HelloWord
1、创建maven工程
2、引入依赖
// 使用springboot ,导入父工程
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.4.RELEASE</version>
</parent>
// 创建web应用,添加web应用的场景启动器
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
3、创建主程序
/**
* 主程序类
* @SpringBootApplication 这是一个springboot应用
*/
@SpringBootApplication
public class CastorApplication {
public static void main(String[] args) {
SpringApplication.run(CastorApplication.class, args);
}
}
// 返回IOC容器,该容器返回当前应用的所有组件
ConfigurableApplicationContext run = SpringApplication.run(CastorApplication.class, args);
// 查看容器中的组件
run.getBeanDefinitionNames()
4、编写业务
@RestController // 是Controller和ResponseBody的合体
public class HelloController {
@RequestMapping("/hello") // 映射请求
public String handle01(){
return "Hello, Spring Boot 2!";
}
}
5、测试
· 直接运行main方法
6、简化配置
可以在resources/application.properties配置文件中修改一些设置
参数配置可参考https://docs.spring.io/spring-boot/docs/current/reference/html/appendix-application-properties.html#common-application-properties
7、简化部署
// 引入插件 就可以创建可执行的jar包,jar包里自带了可执行的运行环境
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
打包完的jar会放到target目录下
使用命令执行jar :java -jar s.jar
pom.xml示例:
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.5.RELEASE</version>
<relativePath/>
</parent>
<groupId>com.si</groupId>
<artifactId>ratel</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>ratel</name>
<description>ratel project</description>
<properties>
<java.version>1.8</java.version>
<swagger.version>2.9.2</swagger.version>
<hutool.version>5.3.4</hutool.version>
<fastjson.version>1.2.70</fastjson.version>
<mybatisplus.version>3.1.1</mybatisplus.version>
<druid.version>1.1.22</druid.version>
<commons-codec.version>1.14</commons-codec.version>
<xxl-job.version>2.2.0</xxl-job.version>
<dom4j.version>1.6.1</dom4j.version>
<jsoup.version>1.11.2</jsoup.version>
<htmlunit.version>2.33</htmlunit.version>
<jmeter.version>5.3</jmeter.version>
<mail.version>1.4.7</mail.version>
<k8s.version>12.0.0</k8s.version>
<pagehelper.version>1.3.0</pagehelper.version>
<flink.version>1.10.1</flink.version>
</properties>
<dependencies>
<!-- influxdb-->
<dependency>
<groupId>org.influxdb</groupId>
<artifactId>influxdb-java</artifactId>
<version>2.15</version>
</dependency>
<!--quartz 定时任务工具-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
<version>2.1.13.RELEASE</version>
</dependency>
<!--工具包-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>${hutool.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.3</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<exclusions>
<exclusion>
<groupId>io.lettuce</groupId>
<artifactId>lettuce-core</artifactId>
</exclusion>
<exclusion>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.7.0</version>
</dependency>
<!--用于解析xml文件-->
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>${dom4j.version}</version>
</dependency>
<!--解析html文件-->
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>${jsoup.version}</version>
</dependency>
<!--抓取html页面动态数据-->
<dependency>
<groupId>net.sourceforge.htmlunit</groupId>
<artifactId>htmlunit</artifactId>
<version>${htmlunit.version}</version>
</dependency>
<!-- 这是mybatis-plus依赖 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatisplus.version}</version>
</dependency>
<!-- 这是mybatis-plus的代码自动生成器 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>${mybatisplus.version}</version>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>${pagehelper.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>${druid.version}</version>
</dependency>
<!--接入cas-->
<dependency>
<groupId>com.baijia</groupId>
<artifactId>cas-client-extension-ac</artifactId>
<version>2.2.20-SNAPSHOT</version>
</dependency>
<!-- fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.5</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.17</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>compile</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${swagger.version}</version>
<exclusions>
<exclusion>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
</exclusion>
<exclusion>
<groupId>io.swagger</groupId>
<artifactId>swagger-models</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${swagger.version}</version>
</dependency>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
<version>1.5.21</version>
</dependency>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-models</artifactId>
<version>1.5.21</version>
</dependency>
<!--jmeter-->
<dependency>
<groupId>org.apache.jmeter</groupId>
<artifactId>ApacheJMeter_java</artifactId>
<version>4.0</version>
</dependency>
<dependency>
<groupId>org.apache.jmeter</groupId>
<artifactId>ApacheJMeter_http</artifactId>
<version>4.0</version>
</dependency>
<!--远程处理命令-->
<dependency>
<groupId>ch.ethz.ganymed</groupId>
<artifactId>ganymed-ssh2</artifactId>
<version>build210</version>
</dependency>
<!--命令行-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-exec</artifactId>
<version>1.3</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>${commons-codec.version}</version>
</dependency>
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>${xxl-job.version}</version>
</dependency>
<dependency>
<groupId>org.apache.jmeter</groupId>
<artifactId>ApacheJMeter_core</artifactId>
<version>${jmeter.version}</version>
</dependency>
<dependency>
<groupId>org.apache.jmeter</groupId>
<artifactId>jorphan</artifactId>
<version>${jmeter.version}</version>
</dependency>
<dependency>
<groupId>org.jetbrains</groupId>
<artifactId>annotations</artifactId>
<version>13.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>${mail.version}</version>
</dependency>
<dependency>
<groupId>io.kubernetes</groupId>
<artifactId>client-java</artifactId>
<version>${k8s.version}</version>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>3.12.0</version>
<!-- <groupId>org.springframework.cloud</groupId>-->
<!-- <artifactId>spring-cloud-starter-openfeign</artifactId>-->
<!-- <version>2.0.1.RELEASE</version>-->
</dependency>
<!--引入modelmapper-->
<dependency>
<groupId>org.modelmapper</groupId>
<artifactId>modelmapper</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>net.luminis.jmeter</groupId>
<artifactId>jmeter-websocket-samplers</artifactId>
<version>1.2.8</version>
</dependency>
<!--GMQ-->
<dependency>
<groupId>com.si</groupId>
<artifactId>GMQ</artifactId>
<version>1.0.12</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>log4j-over-slf4j</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- <dependency>-->
<!-- <groupId>com.ctrip.framework.apollo</groupId>-->
<!-- <artifactId>apollo-client</artifactId>-->
<!-- <version>1.7.2-BaiJia</version>-->
<!-- </dependency>-->
</dependencies>
</dependencyManagement>
<build>
<filters>
<filter>${props-cas}</filter>
</filters>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*</include>
</includes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.18.1</version>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>dev</id>
<properties>
<env>dev</env>
<props-cas>src/main/resources/cas-client-dev.properties</props-cas>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<env>prod</env>
<props-cas>src/main/resources/cas-client-prod.properties</props-cas>
</properties>
</profile>
<profile>
<id>test</id>
<properties>
<env>test</env>
<props-cas>src/main/resources/cas-client-test.properties</props-cas>
</properties>
</profile>
</profiles>
</project>