SpringBoot笔记 创建项目
1
获取配置文件中的属性值
2
3
修改配置文件名和文件路径(可指定多个文件或者路径)
1. 通过配置方式
4
2. 通过编码方式(用这种比较好些)
5
上图是两种方式,上面一种是加载一个文件,下面一种是加载多个文件
6
3. 注入集合
要注意的是:在注入集合的时候,代码中的集合一定要有get和set方法,并且集合名要和除前缀之外的属性名相同。在初始化的时候,spring boot就会去上述两种情况加载的文件中去找前缀是ds的属性。
下面的@ConfigurationProperties注解中有两个属性,一个是prefix即前缀,一个是locations即本地文件路径。如果只写前缀,那么prefix=可以省略,此时会从已加载的配置文件中去找对应的属性,如果指定locations的话,prefix=也不能省略,此时会从locations指定的文件中去找对应的属性。
7
不同的环境读取不同的配置文件
8
Springboot自动装配
非自动装配示例如下
9
按条件自动装配示例如下
10
11
特别注意:@Conditional注解可以用在方法上,也可以用在类上,如果用在方法上,则表示只对方法自动装配,如果用在类上,则表示对该类下所有方法都进行自动装配,如下面的@Conditional注解就表示当Utf8Condition中的方法返回true时对该类中的所有方法都进行自动装配。
因为@Conditional注解接收的参数是一个数组,一次可以传多个Condition,下图所示就表示当Utf8Condition和GbkCondition都返回true时才对该类下的所有方法进行自动装配:
12
Spring Boot还给我们提供了一些很好用的按条件自动装配的类,在包下面,可以自行研究下,下面演示两个常用的。
如@ConditionalOnProperty是与属性配合使用的,@ConditionalOnClass与类配合使用,@ConditionalOnBean与bean配合使用,示例如下
默认配置文件中加上如下属性:
13
运行即可
再如
再如
14
两个runnable已全部加载
再如
或者
15
Spring boot实现异步处理
Spring boot自动装配没有加注解的bean
16
Springboot事件监听
流程:
1. 自定义事件,一般是继承ApplicationEvent抽象类;
2. 定义事件,有多种实现方式,并且对同一个事件可创建多个;
17
3. 发布事件。
实现1:
实现2:
18
实现3:
19
具体实例(用户注册,插入数据库并邮件通知):
20
21
上述程序启动之后再浏览器中输入如下地址访问,就会在控制台打印出相关信息:
JDBC
22
或者
23
属性可以用来指定数据源,如下图
事物:要注意:可以在注解后面的括号中设置事物,自行学习
或者
24
Springboot AOP(面向切面)
Aop用途:日志记录、权限处理、性能统计、监控、事务处理、异常处理等。
首先在测试启动时候遇到一个错误,报错如下:错误
解决方案如下:
方法一:
25
@SpringBootApplication(exclude= {})
具体实现:
26
27
或者
Springboot– redis
28
29
Springboot Starter – redis
有两种方式:一种时直接在项目中引入Jedis依赖包,直接使用Jedis,另一种时引入spring-boot-starter-data-redis。下面的示例时直接使用Jedis。
30
下图中红色框里的内容时在使用Jedis连接成功redis之后进行的密码验证,如果设置了redis无需密码登陆,则不需要在代码中设置。
31
Springboot 日志
Springboot 监控和度量
自定义health
32
可自定义配置info
输出效果
除了上述信息之外,还可以将监控信息输出到jmx(如等)或者redis。
对于监控测量更详细的信息可以参照官方说明文档
Springboot 测试
33
特别注意:上述测试类中为啥要加classes=的原因:因为SpringBoot默认扫描启动类所在包以及子包中所有bean的,所以在测试类中需要加上。
如果某个bean只有测试路径下有,而项目路径下没有,则还需要把测试路径下的该bean加到classes后面去。
测试bean
想要让测试包中的bean生效,还需要手动加入到容器中
34
测试配置环境1(使用程序包中的环境类MyConfig来测试)
测试配置环境2(直接使用spring的Environment,前提是如果配置信息不在默认配
35
置文件内的话,必须先在程序包中将配置文件引入)
如果在测试之前要进行一些变量或者对象的初始化时,就用@Before注解
36
测试Controller方式1(用这种方式测试的话会加载整个spring容器)
37
测试Controller方式2(这种方式就是普通SpringMvc中Controller的测试方式,不会加载整个spring容器,因此有必要配置自动扫描的包)
Springboot 整合mybatis
38
Mybatis逆向工程
39
40
Springboot 构建微服务
所谓为服务,就是将一个项目按照功能模块拆分成多个功能单元,每个功能单元都可以自行选用不同的技术来完成。这样做方便并行开发、测试以及维护。
下图时产品微服务,使用spring boot开发
41
下图时调用为服务接口的示例
42
Springboot 服务的注册与发现
1. 注册方(服务提供方)
服务注册方(提供接口)需要引的jar包(一定要注意版本不能太高,否则会报错)
服务调用方需要引用的jar包(一定要注意版本不能太高且与服务注册放一致,否则会报错)
43
常见的注册中心:zookeeper,consul,etcd,redis
流程:1. 服务器提供方去要在启动服务的时候,把服务器的信息(ip,port)注册到注册中心(在示例中使用的时zookeeper)。2.
下载zookeeper 在Windows下配置zookeeper 配置地址:(特别要注意,再服务发现的程序配置文件中也要配置该地址)
44
用PowerShell查看节点
2. 发现方(服务调用方)
(如果是使用springbooot的话可以使用如下配置,这个配置也可直接在代码中写死)
普通类中调用服务(下面是测试的main方法,实际项目中可以用在任何方法中,可进行封装)
45
在spring boot类中调用一样的。
3. 当有多个注册方的时候,多个注册方的名称可以一样,也可以不一样,如果名称一样,则调用方可通过ip和端口号来判断是哪个注册方,如果名称不一样,则调用方可直接通过名称来发现注册方。
多个注册方名称不一致的情况
注册方一:
46
注册方二:
47
调用方:
48
多个注册方名称相同的情况:这种情况一般是将同一服务程序跑在不同服务器上,可设置相同或者不同的端口号,用来做负载均衡。
注册方一:
49
注册方二:
50
调用方(实现简单的负载均衡):
负载均衡类
51
调用类
52
Springboot 服务的打包和部署
1. 打成jar包并部署: 双击package,将项目打包(要注意:这种方式需要在服务器上安装jdk环境)
在项目的target目录下找到jar包复制出来,并在要部署程序的服务器上新建一个目录,将jar包放在里面
53
用命令 java -jar + jar包路径来启动程序,如果想指定spring boot的jar包运行的jvm内存,可用命令 java -Xms10m -Xmx200m -jar 。如果采用服务方式启动,通过自定义spring boot脚本并使用JAVA_OPTS=-Xmx=16m -Xmx=48m
54
2. 打成war包并发布
3. 打包成可执行文件并发布
55