一、简介
Spring:
EJB使用复杂,Spring是一个轻量级框架
Spring使用以及整合其他框架的时候,配置越来越多
SpringBoot:(你写的越少,底层就越复杂)
简化Spring开发,底层就是Spring
约定大于配置,底层有自动配置
你只需要会一个接口即可,底层SpringBoot都帮你对接好了
官方更新的很快,我们用正式版2.2.10(2020年初的版本)
我们建的时候只能用服务器最新的版本,进去再改成老版本
二、开发工具
eclipse:没有SpringBoot的创建向导模板
创建普通Maven项目,安装SpringBoot的依赖关系,写pom文件
使用向导模板,安装sts插件
STS:Spring官网推荐使用(因为是免费的)
集成了sts插件的eclipse
2.1 绿色安装
解压这个目录即可
2.2 配置(跟eclipse一样的)
2.2.1 编码
![image-20201007200245141](https://i-blog.csdnimg.cn/blog_migrate/1131bc475cba0c3f37f239f010fc5ca3.png)
2.2.2 jre:配置成JDK路径
2.2.3 编译级别:1.8
![image-20201007200433041](https://i-blog.csdnimg.cn/blog_migrate/afb332985a0f4005008e72c266e1b07e.png)
2.2.4 Maven
![image-20201007200624145](https://i-blog.csdnimg.cn/blog_migrate/3a819cbe3376151e4954ec0bf2b18a70.png)
2.2.5 Tomcat:以后都不会用tomcat了
![image-20201007200837280](https://i-blog.csdnimg.cn/blog_migrate/b51f47e77eeb9399894deb2761e1eed7.png)
2.2.6 jsp编码格式:以后也不会用jsp了
2.2.7 properties编码格式
![image-20201008132224114](https://i-blog.csdnimg.cn/blog_migrate/1acb2bab4304aa0477994f126d3b01bb.png)
或者右键properties,other—UTF-8
![image-20201008132743130](https://i-blog.csdnimg.cn/blog_migrate/b005c40c65fe2a704c1c0f2846ab4ecb.png)
2.2.8 controller,把这个√删掉,否则打controller没有提示
三、入门项目(官方模板)
3.1 创建一个新项目
eclipse里面就是没有这个插件
SpringBoot的Web项目可以创建成jar包,打包以后会内置Tomcat,所以我们习惯打成jar包,不打war包了
![image-20201007212041798](https://i-blog.csdnimg.cn/blog_migrate/9eef8f3b63ce80922c8f3e00a207fb3f.png)
3.2 场景启动器
-
我们建的时候只能用服务器最新的版本,进去再改成老版本
-
场景启动器封装了各种场景中国需要使用的jar包依赖,要使用哪种场景开发,只需要引入对应的场景启动器,这个场景中的所有jar包和该场景中常用的配置都会自动导入
![image-20201007212704732](https://i-blog.csdnimg.cn/blog_migrate/cf16baeaec20ea9457cad2a35df76595.png)
项目建出来会报错,添加一个插件;到idea里就没这个问题了,或者换一个版本也没个问题了
<maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>
配完alt+f5刷新一下项目就没有x了
前面加的spring web场景启动器
于是web这些jar包就都有了
3.3 修改版本
建的时候只能用服务器最新的版本,进来再改,对应jar包版本都跟着修改
现在是2.2.10
我们改成2.2.2,保存后jar包版本就都跟着改了
3.4 打代码
3.4.1 自定义的类
必须在主方法所在的包及其子包下,不用再配置包扫描,都可以扫的到
3.4.2 写controller
用ajax
![image-20201007224633339](https://i-blog.csdnimg.cn/blog_migrate/7c067ce0b6f67b0a3819d9dff2e27986.png)
3.4.3 启动
主类启动,两个是一样的,下面的带点颜色
![image-20201007224750682](https://i-blog.csdnimg.cn/blog_migrate/cd7f270231a61aae0d8dc15978136673.png)
有内置的tomcat
3.4.5 测试不用打项目名,直接打/
3.4.6 路径
路径不用再特意配置.do,配置什么都可以
![image-20201007225829036](https://i-blog.csdnimg.cn/blog_migrate/00441c6479c90f45fad4dc4487ccac60.png)
改了代码后要先把之前运行的程序关掉,否则会报错
3.4.7 想换个端口号,加个项目路径
默认是8080和/
3.5 打包部署
启动运行(不用再放到tomcat下面了,启动运行即可)
java -jar xxx.jar
//再开一个端口运行,注意是--
java -jar xxx.jar --server.port=8081
打包到target下面
![image-20201007231107599](https://i-blog.csdnimg.cn/blog_migrate/0aa620253ffc16939f7b576b3857d1f6.png)
放到D盘下用dos窗口运行
![image-20201007231335148](https://i-blog.csdnimg.cn/blog_migrate/cda58b59d5b86b21c0fa1d769d1f7d79.png)
再开一个端口8081,注意是–
3.6 打的包结构
同级
jar包
![image-20201007232958660](https://i-blog.csdnimg.cn/blog_migrate/d7837f3b3f77cd7b009b9585068152c8.png)
其实编码阶段的代码很小,引用的都是仓库里的jar包;打包后jar包都在打的包里面,主要是打包后的jar包比较大
打包后的大小
clean后的大小
![image-20201007233411803](https://i-blog.csdnimg.cn/blog_migrate/c6f2e864149b33c3ae8fa5932a1a522c.png)
不需要放到tomcat下运行,它会把内置的tomcat打进去
![image-20201007233604602](https://i-blog.csdnimg.cn/blog_migrate/778c981c20ae76cf26e23bd23ae254eb.png)
3.7 热部署
加个依赖,managed为受当前版本管理的,就选这个版本
![image-20201007233959376](https://i-blog.csdnimg.cn/blog_migrate/354302e291679813366cf7277c63f62c.png)
springboot的热部署,改了代码只要一保存就会重启
3.8 集群(负载均衡)
上面打包后,运行的时候加端口是一种方法;可现在不想打包,就在这个环境中实现负载均衡,也能实现
3.8.1 手动部署
先把热部署注释掉
给项目起个名字区分一下,加个-8080
![image-20201007234913330](https://i-blog.csdnimg.cn/blog_migrate/86b6758b4d20ddd03ca2252c7b7a044f.png)
用变量的方式用$引用
运行开启一个,改成8081再开启一个
3.8.2 启两次
拿到配置文件中server.port的值赋给port
启动8080端口,改成8081再启动一次就启动了两个服务器
这样不好区分,都是一个名字,所以用下面方法
3.8.3 最终方法
用变量代替,为了去改启动配置
在启动配置中复制一份
改个名字,加启动参数:端口为8081,这样启动的就是8081端口;配置文件是默认8080,所以8080的可以不写(写上也可以,就是-Dport=8080)
![image-20201008002010560](https://i-blog.csdnimg.cn/blog_migrate/bd56bc1864447787f5b572892b5185c4.png)
这样就有两个启动项了,看起来更直观
四、入门项目(阿里模板)
![image-20201008003216710](https://i-blog.csdnimg.cn/blog_migrate/322762ec8b81d2191f51b815ed3470f2.png)
阿里云的版本没有那么新
建好后没有报错,目录都一样,它的服务器编码,不用可以删掉
有一点不同,它没有父项目
他把继承的最终的springboot依赖过来了;官方的是先继承一个parent,parent又继承自这个最终的
我们一般用官方的
有些团队做分布式项目喜欢用阿里的模板,自己是父项目,就不想再继承别人,让别人都是我的模块;单体项目就用官方的;代码都是一样的,没区别。