Spring Boot入门

1.spring boot是配置好的spring集成框架,约定大于配置

2.微服务:把service拆出来独立运行在各个机器上。看下面这两篇论文

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

  1. @SprintBootConfiguration
    1. @Configuration
    2. @Component
  2. @EnableConfiguration
    1. 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">

语法分以下几部分:

  1. 取值
    1. [[${}]]行内取值
  2. 常量
  3. 运算符
  4. 条件表达式:th:if
  5. 循环表达式:th:each
  6. th命名空间下的标签

    th标签可以替换html里的任意元素

21.拓展SpringMVC的配置

写一个类用@Config注解标注,并实现WebMvcConfigurer接口。要完全替换则再加一个@EnableWebMvc注解。

可以通过@Bean注解,把这个类里的关于SpringMVC的配置发送出去

22.前端怎么写

  1. 模板:别人写好的自己改
  2. 框架:不用改,自己装配传参拼接(组件)
    1. 栅格系统
    2. 导航栏
    3. 侧边栏
    4. 表单

23.网站怎么么写:

  1. 页面长什么样
  2. 数据设计
  3. 前端自动运行(独立化工程)
  4. 数据接口如何对接
  5. 前后端联调测试

24.准备工作:

  1. 有一套自己熟悉的后台模板(x-admin)
  2. 前端通过框架,组合出来一个网站页面
    1. index
    2. about
    3. blog
    4. post
    5. user
    6. 404
  3. 部署网站

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系列】的更多相关文章

  1. SpringMVC最新教程IDEA版

    1.servlet项目结构与识别 Idea里带个蓝点的文件夹为tomcat吃的网站内容,idea会通过“Web Resource Directory”来标注,会被打成一个war包 这个文件夹里,MET ...

  2. Markdown快捷键详解(源自狂神说Java视频,整理版)

    #加空格 表示是一个标题(一级标题)回车后直接生成 例下 Markdown学习 标题: ##(两个#号)空格加标题名字即为二级标题例下 二级标题 三个#号 加标题名字即为三级标题,与二级标题等有层级关 ...

  3. W3Cschool菜鸟教程离线版下载链接

    请在电脑上打开以下链接进行下载w3cschool 离线版(chm):http://pan.baidu.com/s/1bniwRCV(最新,2014年10月21日更新)w3cschool 离线版(htm ...

  4. SpringBoot入门教程(二)CentOS部署SpringBoot项目从0到1

    在之前的博文<详解intellij idea搭建SpringBoot>介绍了idea搭建SpringBoot的详细过程, 并在<CentOS安装Tomcat>中介绍了Tomca ...

  5. (转) SpringBoot非官方教程 | 第二篇:Spring Boot配置文件详解

    springboot采纳了建立生产就绪spring应用程序的观点. Spring Boot优先于配置的惯例,旨在让您尽快启动和运行.在一般情况下,我们不需要做太多的配置就能够让spring boot正 ...

  6. SpringBoot进阶教程(六十八)Sentinel实现限流降级

    前面两篇文章nginx限流配置和SpringBoot进阶教程(六十七)RateLimiter限流,我们介绍了如何使用nginx和RateLimiter限流,这篇文章介绍另外一种限流方式---Senti ...

  7. Java系列教程-SpringMVC教程

    SpringMVC教程 1.SpringMVC概述 1.回顾MVC 1.什么是MVC MVC是模型(Model).视图(View).控制器(Controller)的简写,是一种软件设计规范. 是将业务 ...

  8. SpringBoot简明教程

    一.SpringBoot简介 1.什么是SpringBoot SpringBoot用来简化spring应用开发,约定大于配置,去繁从简,是J2EE一站式解决方案 2.SpringBoot的优点 快速创 ...

  9. SpringBoot进阶教程(二十九)整合Redis 发布订阅

    SUBSCRIBE, UNSUBSCRIBE 和 PUBLISH 实现了 发布/订阅消息范例,发送者 (publishers) 不用编程就可以向特定的接受者发送消息 (subscribers). Ra ...

随机推荐

  1. Selenium学习之==>WebDriverApi接口详解

    浏览器操作 driver.back() # 后退 driver.forward() # 前进 driver.refresh() # 刷新 窗口操作 driver.get_window_size() # ...

  2. 使用cesium中的scene.open中遇到的几个问题

    有些服务是发在场景(scene)下的,超图提供了一个很方便的方法:scene.open,这个方法会将场景中所有的图层(无论是OSGB还是影像和地形)加载进来.同时这个方法会自带一个自动地位功能,具体实 ...

  3. 【SpringMVC】---RequestMapping、Ant 路径、PathVariable 注解、HiddenHttpMethodFilter 过滤器、用 POJO 作为参数

    一.web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi=&qu ...

  4. HTML——超级链接 表格 框架

  5. [转帖]linux screen 命令详解,xshell关掉窗口或者断开连接,查看断开前执行的命令

    linux screen 命令详解,xshell关掉窗口或者断开连接,查看断开前执行的命令 https://binwaer.com/post/12.html yun install -y screen ...

  6. Dubbo 序列化协议 5 连问,你接得住不?

    1)dubbo 支持哪些通信协议? 2)支持哪些序列化协议? 3)说一下 Hessian 的数据结构? 4)PB 知道吗? 5)为什么 PB 的效率是最高的? 面试官心理分析 上一个问题,说说 dub ...

  7. 3.golang 的注释

    package main import ( "fmt" "math" ) func main() { fmt.Println(pi(5000)) } // pi ...

  8. python 生成list的所有的子集 (不使用递归且不引入标准库)

    不使用递归且不引入标准库,单纯用两个for循环即可得出一个list的所有子集 L = [1, 2, 3, 4] List = [[]] for i in range(len(L)):          ...

  9. 分布式均匀算法--hash性一致算法--hash slot(转)

    目录 1.redis cluster介绍 2.最老土的hash算法和弊端(大量缓存重建) 3.一致性hash算法(自动缓存迁移)+虚拟节点(自动负载均衡) 不用遍历    -->   hash算 ...

  10. Python 数据分析:Pandas 缺省值的判断

    Python 数据分析:Pandas 缺省值的判断 背景 我们从数据库中取出数据存入 Pandas None 转换成 NaN 或 NaT.但是,我们将 Pandas 数据写入数据库时又需要转换成 No ...