SpringBoot最新教程IDEA版【狂神说Java系列】
Spring Boot入门
1.spring boot是配置好的spring集成框架,约定大于配置
2.微服务:把service拆出来独立运行在各个机器上。看下面这两篇论文
- 原文地址:http://martinfowler.com/articles/microservices.html
- 翻译:https://www.cnblogs.com/liuning8023/p/4493156.html
3.从官网下模板创建spring boot项目
从https://start.spring.io/里找generate项目,下载zip包,用Idea以maven形式导入
4.通过Idea的Spring Initializer创建
以上二种方式,要自己选依赖的组件
pom开头parent标签指定父依赖是spring-boot-starter-parent,负责版本管理与打包
web主要依赖包是spring-boot-starter-web
热部署是spring-boot-starter-devtools
4.项目架构
1.java下的程序主入口:
2.resource下的application.properties
3.resource下的static目录
4.resource下的templates目录
5.springboot的主类用SpringBootApplication注解装配,他会去扫描同级目录下的包注解
6.配置文件修改
server.port=8081 #改端口号,每一个springboot服务一个端口
7.导出的jar包用java jar包路径运行即可
8.resource目录下可以放banner.txt放启动字符
9.自动配置原理:
看pom文件,点入父标签,进入可以看到spring-boot-dependencies依赖
SpringApplication run方法启动程序
注解:@SpringBootApplication
- @SprintBootConfiguration
- @Configuration
- @Component
- @EnableConfiguration
- AutoConfigurationPackage
总结下来,就是会找sprint-boot-autoconfigure包里的/META-INF/spring.factories文件,当引入某个starter时相应的配置生效
10.主类:
SpringApplication类注解初始化项目,SpringApplication的run方法拿这些配置来跑
11.yaml配置文件
格式:
key: value
server:
port: 8081
path: /hello
yaml比properties先进的地方在于语法支持的多,甚至可以存储对象
双引号不转义,单引号转义
存对象
properties:
student.name="a"
yaml:
studnet:
name: "a"
行内写法:
student: {name: "a", age: 12}
数组:
行内写法:
studnet: 【{},{}】
多行写法:
pets:
- cat
- dog
yaml 对空格的要求十分高,一定要对齐
12.yaml配置注入:
通过ConfigurationProperties注解指定prefix来引入配置
@ConfigurationProperties(prefix = "person")
13.Property文件注入
@PropertySource(value = "classpath:person.properties")
@Component //注册bean
public class Person {
//直接使用@value
@Value("${person.name}") //从配置文件中取值
private String name;
@Value("#{11*2}") //#{SPEL} Spring表达式
private Integer age;
@Value("true") // 字面量
private Boolean happy; 。。。。。。
}
14.JSR303校验
@Validated注解表明要校验
可以接着使用其中定义的其他格式规范注解,比如@Email
15.多config文件
可以在jar里用命令行参数spring.config.location指定config文件位置。默认是项目根目录下config,项目根目录, 资源根目录下config,资源根目录
用spring.profiles.acitve=test指定配置文件后缀
yml多文档模块:
---分割模块
spring:
profiles: dev
指定模块名
16.自动查看配置
注解@EnableConfigurationProperties指定配置类
@EnableConfigurationProperties({HttpProperties.class})
相应的@ConfigurationProperties注解就指定yaml和properties文件里的配置名称
@ConfigurationProperties(
prefix = "spring.http"
) //从配置文件中获取指定的值和bean的属性进行绑定
public class HttpProperties {
@ConditionalOnWebApplication,@ConditionalOnClass,@ConditionalOnProperty等注解指定条件满足配置成立
精髓:
1)、SpringBoot启动会加载大量的自动配置类
2)、我们看我们需要的功能有没有在SpringBoot默认写好的自动配置类当中;
3)、我们再来看这个自动配置类中到底配置了哪些组件;(只要我们要用的组件存在在其中,我们就不需要再手动配置了)
4)、给容器中自动配置类添加组件的时候,会从properties类中获取某些属性。我们只需要在配置文件中指定这些属性的值即可;
xxxxAutoConfigurartion:自动配置类;给容器中添加组件
xxxxProperties:封装配置文件中相关属性;
debug=true 属性指定是否打开debug
所有配置可以从SpringBoot官方文档这里拿
Spring Boot Web开发
17.导入静态资源
webjars:以maven的形式引入jquery,放到jar包的META-INF/resources/webjars下
resources目录 ,static,public,根目录,也可以放资源,一般来说public的是外边可以通过地址直接访问的,不用走controller接口层
或者指定spring.mvc.static-path-pattern(用逗号分隔),以上全部失效
18.首页定制:
根据property或者index.html文件放在相应资源目录下
19.模板引擎
SpringBoot不支持jsp,使用模板引擎生成前端文件
可以用freemarker或者thymeleaf
根据Thymeleaf的prperties配置类,可以知道文件以html结尾,放在templates文件夹里
20.Thymeleaf语法
html标签头加命名空间约束
<html lang="en" xmlns:th="http://www.thymeleaf.org">
语法分以下几部分:
- 取值
- [[${}]]行内取值
- 常量
- 运算符
- 条件表达式:th:if
- 循环表达式:th:each
- th命名空间下的标签
th标签可以替换html里的任意元素
21.拓展SpringMVC的配置
写一个类用@Config注解标注,并实现WebMvcConfigurer接口。要完全替换则再加一个@EnableWebMvc注解。
可以通过@Bean注解,把这个类里的关于SpringMVC的配置发送出去
22.前端怎么写
- 模板:别人写好的自己改
- 框架:不用改,自己装配传参拼接(组件)
- 栅格系统
- 导航栏
- 侧边栏
- 表单
23.网站怎么么写:
- 页面长什么样
- 数据设计
- 前端自动运行(独立化工程)
- 数据接口如何对接
- 前后端联调测试
24.准备工作:
- 有一套自己熟悉的后台模板(x-admin)
- 前端通过框架,组合出来一个网站页面
- index
- about
- blog
- post
- user
- 404
- 部署网站
25.整合JDBC
1.引入jdbc和mysql驱动
2.resourcs下在application.yml 里配置数据库信息
spring:
datasource:
username: root
password: 123456
#?serverTimezone=UTC解决时区的报错
url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
driver-class-name: com.mysql.jdbc.Driver
3.DataSource可以通过@Autowired自动引入了
属性配置可以去点击进去类DataSourceProperties看
默认使用Hikari数据源连接池
Connection可以通过datasource getConnection获取
随后可以做commit,close等操作
26.jdbc template crud
1.自动引入JdbcTemplate
2.execute执行sql语句,query和queryForList等方法查询,call调用存储过程/函数,update和batchUpdate等方法更新
27.指定数据源
spring.datasource.type指定数据源,要是全限定名
28.整合Druid
加入了日志监控功能的数据库连接池
1.maven导入依赖
2.配置文件指定数据库连接池类名
3.配置插件,包括监控,性能慢查询等
#配置监控统计拦截的filters,stat:监控统计、log4j:日志记录、wall:防御sql注入
#如果允许时报错 java.lang.ClassNotFoundException: org.apache.log4j.Priority
#则导入 log4j 依赖即可,Maven 地址: https://mvnrepository.com/artifact/log4j/log4j
filters: stat,wall,log4j
maxPoolPreparedStatementPerConnectionSize: 20
useGlobalDataSourceStat: true
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
4.引用了log4j插件,就要导入这个依赖
5.自己添加一个@Configuration注解修饰的Druid配置类,把DruidDataSource注入到spring。要绑定配置文件的全局配置,使用@ConfigurationProperties注解,prefix指定为spring.datasoure
6.配置Druid的监控web页面,可以通过spring boot注册一个servlet(ServletRegistrationBean),配置登陆的用户名/密码等
7.配置FilterRegistrationBean来设置监控哪些东西
29.整合Mybatis
1.引入mybatis-spring-boot整合包
2.配置数据源
3.使用@Mapper注解定义mapper接口
4.添加sql xml
5.配置文件里配置mapper和实体类路径
#指定myBatis的核心配置文件与Mapper映射文件
mybatis.mapper-locations=classpath:mybatis/mapper/*.xml
# 注意:对应实体类的路径
mybatis.type-aliases-package=com.kuang.mybatis.pojo
6.自动装配拿到mapper
@Mapper注解,怎么被扫描到,mapper xml放的位置配置,可以总结下
30. 异步任务
@EnableAsync,开启异步
@Async注解,表明方法异步执行。spring自动给方法开线程执行
31.邮件任务
1.引入邮件依赖
2.去autoconfig里找配置前缀,去proerty里找具体配置
3.@Autowired注入JavaMailSenderImpl,调用其方法设置并发送
32.定时执行任务
1.TaskExecutor
2.TaskScheduler
3.@EnableScheduling,开启定时任务注解;@Scheduled,表示什么时候执行
4.Cron表达式,使用在线表达式生成器
33.Swagger
API框架,开发阶段浏览API接口,可自动生成API文档,RestFul风格,可以直接运行在线测试,
1.引入依赖,有两个,swagger2和swagger-ui
2.集成swagger。添加config类,@Configuration,@EnableSwagger2。访问swagger-ui.html
3.配置swagger。config类里添加@Bean Docket,配置Docket类。ApiInfo类配置信息
4.配置扫描接口。Docket select方法决定扫描哪些接口。使用api().build()来选择,可以使用RequestHandlerSelectors,用其basePackage指定扫描基准包;path方法设置指定路径,
5.配置开关 。enable方法决定是否开启。可以通过Profiles和Environment获取配置文件的环境变量
6.给api分组。通过groupName方法
7.实体类配置(Model)。 只要接口用到了实体类,实体类就会被扫描到。进一步的注释,@ApiModel指定实体类,@ApiModelProperty给字段添加,这种注解还有很多
34.员工管理系统
1.引入模版html页面,放入templates文件夹
2. css和js,img放入static文件夹
3.添加首页路由映射,除了直接用@controller,还可以在WebMvcConfigure的子类里,实现addViewController方法,用ViewControllerRegistry.addViewController方法添加
4.spring.thymeleaf.cache=false,禁用缓存;其他地方搞的模版,url路径等配置要用thymeleaf接管
5.server.servlet.context-path=/kunag,设置项目虚拟目录,给url路径加一层,本地是项目上一级多了一个文件夹
6.页面国际化:
1.resources目录下建立一个i18n目录
2.建立login.properties和login_zh_CN.properties文件。自动创建一个login文件夹,可在Resource Bundle下配置,给每一个key设置不同的版本
3.给spring.message.basename指定为i18n.login,指定位置文件
4.在模板文件里,用#{key}取值
5.可以重写LocaleResolver,解析语言配置,返回Locale类。默认的语言配置,读取Accept-Language
6.在WebMvcCofigure子类里,用@Bean注入这个LocaleResolver子类
7.除了重定向,可以用setViewName给url做映射来改url
8.登陆拦截器。实现HandlerInterceptor,在WebMvcConfigure的addInterceptors里添加拦截器
9.页面组件分类后,调用他们的时候可以给他们传参数,决定不同数据下的表现。代码要基于数据改变,而不是直接搞dom
10. 有错误的话,templates下新建一个error文件夹,相应错误码的html文件放进去即可
35.dubbo+zookeeper
RPC架构
架构为生产者/消费者模式
生产者向注册中心注册自己。消费者通过注册中心找到生产者,调用生产者方法
1.生产者先引入duooo+zookeeper依赖
<!-- Dubbo Spring Boot Starter -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient -->
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
<!-- 引入zookeeper -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.14</version>
<!--排除这个slf4j-log4j12-->
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
2.配置dubbo+zookeeper
#当前应用名字
dubbo.application.name=provider-server
#注册中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
#扫描指定包下服务
dubbo.scan.base-packages=com.kuang.provider.service
3.用@Service注册服务到dubbo,用@Component注解注册到Spring
4.可以在duboo-admin里发现这个服务
消费者配置,先引入一样的依赖
配置应用名字与注册中心
#当前应用名字
dubbo.application.name=consumer-server
#注册中心地址
dubbo.registry.address=zookeeper://127.0.0.1:218
使用@Reference注解,可以用pom坐标,也可以在本地建立一个一模一样路径的接口,然后调用RPC接口
36.未来
微服务架构,要有四个业务
1.API网管,服务路由
2.HTTP/RPC通信,同步/异步调用
3.服务注册,发现,治理,高可用
4.服务熔断,异常处理
有二代技术
第零点五代,Dubbo+zookeeper,无法实现全部方案
第一个代,SpringClound,由此各个公司推出了不同技术,比如SpringCloud NetFlix,SpringCloud Alibaba
第二代,Service Mesh技术,k8s,Istio,
这些业务,解决的是网络不可靠情况下的稳定性
y
SpringBoot最新教程IDEA版【狂神说Java系列】的更多相关文章
- SpringMVC最新教程IDEA版
1.servlet项目结构与识别 Idea里带个蓝点的文件夹为tomcat吃的网站内容,idea会通过“Web Resource Directory”来标注,会被打成一个war包 这个文件夹里,MET ...
- Markdown快捷键详解(源自狂神说Java视频,整理版)
#加空格 表示是一个标题(一级标题)回车后直接生成 例下 Markdown学习 标题: ##(两个#号)空格加标题名字即为二级标题例下 二级标题 三个#号 加标题名字即为三级标题,与二级标题等有层级关 ...
- W3Cschool菜鸟教程离线版下载链接
请在电脑上打开以下链接进行下载w3cschool 离线版(chm):http://pan.baidu.com/s/1bniwRCV(最新,2014年10月21日更新)w3cschool 离线版(htm ...
- SpringBoot入门教程(二)CentOS部署SpringBoot项目从0到1
在之前的博文<详解intellij idea搭建SpringBoot>介绍了idea搭建SpringBoot的详细过程, 并在<CentOS安装Tomcat>中介绍了Tomca ...
- (转) SpringBoot非官方教程 | 第二篇:Spring Boot配置文件详解
springboot采纳了建立生产就绪spring应用程序的观点. Spring Boot优先于配置的惯例,旨在让您尽快启动和运行.在一般情况下,我们不需要做太多的配置就能够让spring boot正 ...
- SpringBoot进阶教程(六十八)Sentinel实现限流降级
前面两篇文章nginx限流配置和SpringBoot进阶教程(六十七)RateLimiter限流,我们介绍了如何使用nginx和RateLimiter限流,这篇文章介绍另外一种限流方式---Senti ...
- Java系列教程-SpringMVC教程
SpringMVC教程 1.SpringMVC概述 1.回顾MVC 1.什么是MVC MVC是模型(Model).视图(View).控制器(Controller)的简写,是一种软件设计规范. 是将业务 ...
- SpringBoot简明教程
一.SpringBoot简介 1.什么是SpringBoot SpringBoot用来简化spring应用开发,约定大于配置,去繁从简,是J2EE一站式解决方案 2.SpringBoot的优点 快速创 ...
- SpringBoot进阶教程(二十九)整合Redis 发布订阅
SUBSCRIBE, UNSUBSCRIBE 和 PUBLISH 实现了 发布/订阅消息范例,发送者 (publishers) 不用编程就可以向特定的接受者发送消息 (subscribers). Ra ...
随机推荐
- Selenium学习之==>WebDriverApi接口详解
浏览器操作 driver.back() # 后退 driver.forward() # 前进 driver.refresh() # 刷新 窗口操作 driver.get_window_size() # ...
- 使用cesium中的scene.open中遇到的几个问题
有些服务是发在场景(scene)下的,超图提供了一个很方便的方法:scene.open,这个方法会将场景中所有的图层(无论是OSGB还是影像和地形)加载进来.同时这个方法会自带一个自动地位功能,具体实 ...
- 【SpringMVC】---RequestMapping、Ant 路径、PathVariable 注解、HiddenHttpMethodFilter 过滤器、用 POJO 作为参数
一.web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi=&qu ...
- HTML——超级链接 表格 框架
- [转帖]linux screen 命令详解,xshell关掉窗口或者断开连接,查看断开前执行的命令
linux screen 命令详解,xshell关掉窗口或者断开连接,查看断开前执行的命令 https://binwaer.com/post/12.html yun install -y screen ...
- Dubbo 序列化协议 5 连问,你接得住不?
1)dubbo 支持哪些通信协议? 2)支持哪些序列化协议? 3)说一下 Hessian 的数据结构? 4)PB 知道吗? 5)为什么 PB 的效率是最高的? 面试官心理分析 上一个问题,说说 dub ...
- 3.golang 的注释
package main import ( "fmt" "math" ) func main() { fmt.Println(pi(5000)) } // pi ...
- python 生成list的所有的子集 (不使用递归且不引入标准库)
不使用递归且不引入标准库,单纯用两个for循环即可得出一个list的所有子集 L = [1, 2, 3, 4] List = [[]] for i in range(len(L)): ...
- 分布式均匀算法--hash性一致算法--hash slot(转)
目录 1.redis cluster介绍 2.最老土的hash算法和弊端(大量缓存重建) 3.一致性hash算法(自动缓存迁移)+虚拟节点(自动负载均衡) 不用遍历 --> hash算 ...
- Python 数据分析:Pandas 缺省值的判断
Python 数据分析:Pandas 缺省值的判断 背景 我们从数据库中取出数据存入 Pandas None 转换成 NaN 或 NaT.但是,我们将 Pandas 数据写入数据库时又需要转换成 No ...