SpringBoot 笔记 ( 十 ):错误处理
1)、SpringBoot默认的错误处理机制
默认效果:
1)、浏览器,返回一个默认的错误页面
2)、如果是其他客户端,默认响应一个json数据
@EnableAsync
@Async
1 |
|
1 |
|
@EnableScheduling
调度注解,放在Service层即可。
秒(0-59) 分(0-59) 时(0-23) 日(1-31) 月(1-12) 周(0-7 其中0/7表示周日)
这几个位置可写的值不仅仅是上面的数字,还可以是表达式:
一些例子:
1 * * *? * 2-7 每周的周二到周天的每一分钟的第一秒触发
1-7 * * ? * 3 每周三的每分钟的1-7秒触发
0 0/5 14,18 ? * 1-6 每周的1-6 14点和18点 每个五分钟执行一次
0 15 10?* 1-6 每个月的周一至周六10:15分执行一次
0 0 2?* 6 每个月的最后一个周六凌晨2点执行一次
配置pom文件
1 | <dependency> |
查看MailSenderAutoConfiguration的自动配置类
1 |
|
可以看到主要就是注入了一个 JavaMailSenderImpl 这个类的实例,然后我们就可以借助这个实例进行发送邮件。
1 | spring: |
1 |
|
这里我们的搜索就是用 ElasticSearch 这个工具,这个其实是在 Lauce 的基础上构建的一个搜索引擎。
1 | docker pull registry.docker-cn.com/library/elasticsearch |
这里指定了es的初始的java堆大小和最大堆大小,否则就是默认的 2G 。
ES 是一个面向文档的数据库,他的文档的格式就是JSON的格式。
这个索引指的是动词,也就是我们把数据存放到ES中的一个过程。
这个索引是名词,指的是我们的ES中的一个数据库。
这个就相当与我们的一个表
就是我们的数据记录。
简单的可以用一张表来表示:
1 | $KAFKA_HOME/config/server.properties |
1 | kafka-server-start.sh $KAFKA_HOME/config/server.properties |
1 | kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic hello |
1 | kafka-console-consumer.sh --zookeeper localhost:2181 --topic hello --from-beginning |
source 源数据:目录/
channel 数据管道
sink 数据输出
解压到 /app/.bash_profile
将java配置系统环境变量中:
export JAVA_HOME=/home/hadoop/app/jdk1.8.0_144
export PATH=$JAVA_HOME/bin:$PATH
source下让其配置生效
检测:java -version
export FLUME_HOME=/home/hadoop/app/apache-flume-1.6.0-cdh5.7.0-b
export PATH=$FLUME_HOME/bin:$PATH
source下让其配置生效
flume-env.sh的配置:export JAVA_HOME=/home/hadoop/app/jdk1.8.0_144
使用Flume的关键其实就是书写配置文件,然后启动不同的配置文件的进程就是不同的任务。
给一个简单的Conf的例子,并做一些注释。
1 | #a1:agent名称 r1:source的名称 k1:sink的名称 c1:channel的名称 |
1 | flume-ng agent \ |
注意 –name 选项指定的名字必须要和配置文件里面的agent名字一致才行,否则会提示找不到对应的配置。
启动以后使用 telnet 127.0.0.1 4444 访问,然后输入文字flume就可以收集到数据。具体数据如下:
1 | 2018-05-18 17:01:21,693 Event: { headers:{} body: 68 65 6C 6C 6F 0D hello. } |
可以看到他每一条消息都是一个Event 也就是说在Flume中每一个Event都是一个基本的传送单元。
Event = header + body
1 | # Name the components on this agent |
首先配置A机 ,我们采用的是 exec 监控一个文件,然后使用 memory channel 输出到 avro ,所以有配置文件 exec-memcory-avro.conf
1 | exec-source = |
执行如下的命令可以启动,但是不要现在启动否则会报错
1 | flume-ng agent \ |
那么B机就需要使用avro source来接受了,然后使用memory做channel,最后使用logger做输出。建立配置文件avro-memory-logger.conf
1 | avro-source = |
启动
1 | flume-ng agent \ |
我们要先启动后面的那个,也就是B机,不然的话我们先启动A机就会报错。
1.x 删除后面的字符 X 删除前一个字符 删除3个字符就是3x
2.caw:改写单词
3.J:删除换行符,使下一行并上来。 nJ:连接连同本行的n行
4.u:撤销上一次操作 U:撤销当前行的所有修改
5.i 在光标前插入 I 在行首插入
6.a 在光标后插入 A 在行末插入
7.o:在当前行的下面另起一行,并变为插入模式 O:在当前行上面另起一行,变为插入模式
8.vim中Nyy可以复制光标后的N行。有时我们不容易得出行数,这时可以用做标记的方法来制定复制范围 1. 在开始行上输入ma作一个标记a
a'中。 按下来你可以象平常一样键入你要的操作, 只是这些操作都会被Vim记录进它命名为
a’的宏中, 再次再下”q”键, 就结束了宏`a’的录制。26.:r class/User.hpp 读取文件中的内容,插入到当前行的后面
27.dw:删除一个单词(光标后部分) 不如:daw实用
28.d4w:删除4个单词 d$:删除当前光标到行尾
29.d换成c效果是一样的,只是操作完会变成insert模式
30.dnj: 向下删除n行 dnk: 向上删除n行 dn删除本行
31.D:相当于d$ C:相当于c$
32.r:替换当前字符,但不会进入insert模式
33.yaw: 复制一个单词,光标在单词任意位置 ynw: 复制N个单词 ynj: 向下复制n行 ynk: 向上复制n行
34.ci’、ci”、ci(、ci[、ci{、ci< - 分别更改这些配对标点符号中的文本内容
di’、di”、di(或dib、di[、di{或diB、di< - 分别删除这些配对标点符号中的文本内容
yi’、yi”、yi(、yi[、yi{、yi< - 分别复制这些配对标点符号中的文本内容
vi’、vi”、vi(、vi[、vi{、vi< - 分别选中这些配对标点符号中的文本内容.