SpringBoot最新教程IDEA版【狂神说Java系列】
2019-12-14 22:30 cascle 阅读(4037) 评论(0) 编辑 收藏 举报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