Fork me on GitHub
行锋

低头走路,抬头思考


  • 首页

  • 分类

  • 归档

  • 标签

  • 关于

  • 搜索

JOOQ入门

发表于 2019-03-06 | 分类于 Java

简介

官网: http://www.jooq.org/

  • JOOQ(Java Object Oriented Querying)即面向Java对象查询,是一个高效地合并了复杂SQL、类型安全、源码生成、ActiveRecord、存储过程以及高级数据类型的Java API的类库
  • JOOQ 既吸取了传统ORM操作数据的简单性和安全性,又保留了原生sql的灵活性,它更像是介于 ORMS和JDBC的中间层

mavan依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<dependency>
<groupId>org.jooq</groupId>
<artifactId>jooq</artifactId>
<version>${jooq.version}</version>
</dependency>
<dependency>
<groupId>org.jooq</groupId>
<artifactId>jooq-meta</artifactId>
<version>${jooq.version}</version>
</dependency>
<dependency>
<groupId>org.jooq</groupId>
<artifactId>jooq-codegen</artifactId>
<version>${jooq.version}</version>
</dependency>

SpringBoot依赖

1
2
3
4
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jooq</artifactId>
</dependency>

代码生成依赖
JOOQ需要通过APT动态生成需要的Java类,所以需要配置Maven插件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<build>
<plugins>
<plugin>
<groupId>org.jooq</groupId>
<artifactId>jooq-codegen-maven</artifactId>
<version>${jooq.version}</version>
<executions>
<execution>
<goals>
<goal>generate</goal> //配置后mvn compile的时候执行apt
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
</dependencies>
<configuration>
<jdbc>
<url>jdbc:mysql://localhost:3306/foo</url>
<user>root</user>
<password>root</password>
</jdbc>
<generator>
<database>
<includes>.*</includes>
<inputSchema>foo</inputSchema>
</database>

<target>
<packageName>jooq</packageName>
<directory>${basedir}/target/generated-sources/java</directory>
</target>
</generator>
</configuration>
</plugin>
</plugins>
</build>

显示执行: mvn jooq-codegen:generate
隐式执行: mvn compile

集成数据源

只需要重写getDSLContext 方法,以durid数据源为例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
private DSLContext getDSLContext() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setUrl("jdbc:mysql://localhost:3306/test");
dataSource.setUsername("root");
dataSource.setPassword("root");
dataSource.setMaxActive(20);
dataSource.setMaxWait(20_000);
dataSource.setMinIdle(0);
dataSource.setTestOnBorrow(true);
dataSource.setTestWhileIdle(true);
dataSource.setInitialSize(1);
dataSource.setMinEvictableIdleTimeMillis(1000*60*10);
dataSource.setTimeBetweenEvictionRunsMillis(60*1000);
dataSource.setPoolPreparedStatements(true);
dataSource.setMaxPoolPreparedStatementPerConnectionSize(20);
dataSource.setValidConnectionChecker(new MySqlValidConnectionChecker());
ConnectionProvider connectionProvider = new DataSourceConnectionProvider(dataSource)
Configuration configuration = new DefaultConfiguration()
.set(connectionProvider)
.set(SQLDialect.MYSQL);
return DSL.using(configuration);
}

事物支持

1
2
3
4
5
6
7
ConnectionProvider connectionProvider =  new DataSourceConnectionProvider(dataSource)
TransactionProvider transactionProvider = new DefaultTransactionProvider(connectionProvider, false);
Configuration configuration = new DefaultConfiguration()
.set(connectionProvider)
.set(transactionProvider)
.set(SQLDialect.MYSQL);
return DSL.using(configuration);

参考:https://www.cnblogs.com/chinajava/p/5832378.html’

Spring自定义配置的IDE提示,需要使用APT技术,需要添加依赖spring-boot-configuration-processor

未命名

发表于 2019-03-05

title: 鸟哥私房菜基础篇
tags:

  • Linux
    copyright: true
    comments: true
    toc: true
    date: 2019-03-05 15:29:55
    categories: Linux
    password:

简介

  • Linux是一个多用户、多任务环境。
  • Linux一般将文件可存取访问的身份分为3个类别:owner、group、others,且各有read、write、execute等权限

文件权限

  • owner:文件的所有者
  • group:每个账号都可以有多个用户组的支持
  • others:root用户

日常操作报“Permission deny”–权限设置错误,主要涉及文件权限
image
ls:list

1
2
[   1    ] [2]   [3]    [4]     [5]      [6]         [7]
[ 权限 ][连接][所有者][用户组][文件容量][修改日期] [文件名称]
  • 1.文件类型和权限:10个字符:1+33=10,1表示文件类型,33分别是owner、group、others的权限
  • 2.表示有多少文件名连接到此节点(inode)
  • 5.文件容量,默认单位为B
  • 6.文件的创建日期或者修改日期
  • 7.文件名前多一个.表示是隐藏文件

属性/组


可修改/etc/sysconfig/i18n文件配置系统默认语言

改变文件属性与权限:
chgrp:改变文件所属用户组
chown:改变文件所有者
chmod:改变文件权限
方式一:数字类型
权限权重值:r-4 w-2 x-1
方式二:符号类型
chmod u/g/o/a +/-/= rwx 文件或目录

权限对文件的重要性:
文件时实际含有数据的地方。
r:可读取次文件的实际内容
w:可以编辑、新建或者修改文件的内容,但不包括删除文件
x:该文件具有可以被系统执行的权限
Linux下文件是否能够被执行是由是否具有X这个权限决定的,而跟文件名没有任何关系。文件扩展名只是文件类型的一种提示。
权限对目录的重要性:
目录主要的内容就是记录文件名列表。
r:具有读取目录结构列表的权限,表示可以查询目录下的文件名数据,所以可以用ls命令列出目录下的内容
w:表示你具有更改目录结构列表的权限,包括
1.新建新的文件与目录;
2.删除已经存在的文件与目录;
3.将已存在的文件或目录进行重命名;
4.转移该目录内的文件、目录的位置。
总之,目录的w权限与该目录下面的文件名变动有关。
x:代表用户能否进入该目录成为工作目录。如果在某目录无x权限,则无法切换到该目录下,也就无法执行该目录下的命令。

Linux目录标准配置:FileSystem Hierarchy Standard(FHS)其主要目的是让用户可以了解到已安装软件通常放置于哪个目录下,各个软件开发商和操作系统制作者都要遵守此规则。依据文件系统使用的频繁与否与是否允许用户随意改动,而将目录定义成四种交互作用的状态。

– 可分享的 不可分享的
不可变的 /usr(软件放置处) /etc(配置文件)
/opt(第三方软件)	|	/boot(开机与内核文件)	   

可变动的 /var/mail | /var/run
/var/spool/news | /var/lock

其实,FHS针对目录树架构仅定义了三层目录下面应该放置什么数据,分别是下面这三个目录的定义:

  1. /(root,根目录):与开机系统有关;
    FHS标准建议:根目录所在分区应该越小越好,且应用程序所安装的软件最好不要与根目录放在同一个分区内,保持根目录越小越好。如此不但性能较好,根目录所在的文件系统也较不容易发生问题。
    image
  2. /usr(UNIX software resource):与软件安装/执行有关;
    FHS建议所有软件开发者应该将他们的数据合理的分别放置到这个目录下的子目录。/usr里面放置的数据属于可分享的与不可变动的。
  3. /var(variable):与系统运作过程有关。

关于执行文件路径的变量:$PATH
1.不同身份用户默认的PATH不同,默认能够随意执行的命令也不同
2.PATH是可以修改的
3.使用绝对路径或相对路径直接指定某个命令的文件名来执行,会比查询PATH来的正确
4.命令应该要放置到正确的目录下,执行才会比较方便
5.本目录(.)最好不要放到PATH当中

cp的源文件与目的文件的权限是不同的,目的文件的所有者通常是命令操作者本身。

basename:获取文件名
dirname:获取目录名

文件内容查询:
1.cat:由第一行开始显示文件内容
2.tac:从最后一行开始显示(tac是cat的倒写)
3.nl:显示的时候,顺便输出行号
4.more:一页一页的显示文件内容
5.less:与more类似,但可以往前翻页
6.head:只看头几行
7.tail:只看结尾几行
8.od:以二进制的方式读取文件内容

Linux下会记录许多的时间参数,主要有三个变动的时间:
modification time(mtime):
当该文件的内容数据更改时,就会更新这个时间
status time(ctime):
当该文件的状态改变时,就会更新这个时间,如权限与属性被更改时
access time(atime):
当该文件的内容被取用时,就会更新这个时间,如cat某文件时
默认情况下,ls显示的时间是当前文件的mtime。可以通过touch命令配合相应参数修改以上的相应时间,touch命令肯定会修改的日期是mtime,atime

Linux命令可以通过;隔开之后,代表多个命令的连续执行

文件的默认权限:
umask就是指定“目前用户在新建文件或目录时候的权限默认值”,可以通过umask/umask -S查看当前umask;
umask的分数指的是“该默认值需要减掉的权限”

文件的隐藏属性:
chatrr:设置文件的隐藏属性,格式chattr ±=参数 文件或目录名称
lsatrr:显示文件隐藏属性

文件的特殊权限:SUID,SGID,SBIT
SetUID:SUID仅对具有x权限的二进制程序的所有者在执行程序的过程中具有该程序所有者的权限,不能够用在Shell Script上面
SetGID:对应与SUID,只不过是针对s所在用户组来说
Sticky Bit:仅针对目录有效,当用户对目录由wx的权限时,只有自己与root可以删除该文件
修改文件的特殊权限:
SUID-4 SGID-2 SBIT-1
使用命令chmod,如chmod 1755,其中1表示添加SBIT权限

查看文件类型: file

文件的查询:
脚本文件名的查询:which(寻找执行文件),这个命令是根据PATH这个环境变量所规范的路径去查询执行文件的文件名
文件名的查询:
whereis和locate是通过数据库来查询数据的,所以会比find快的,但可能也会引起找不到最新新建的文件或者会找到已经被删掉的文件
whereis(寻找特定文件)
locate寻找的数据是由已创建的数据库/var/lib/mlocate里面的数据所查找到的,数据库的创建默认是每天执行一次,可以通过updatedb命令去读取/etc/updatedb.conf这个配置文件的设置,然后再去硬盘里面进行查找文件名的操作,最后就更新整个数据库文件
find:可以通过添加时间查找特定时间的文件,自动会查找子目录

未命名

发表于 2019-03-05

title: Lombok入门
tags:

  • java
    copyright: true
    comments: true
    toc: true
    date: 2019-03-04 14:25:33
    categories: Java
    password:

https://blog.csdn.net/qq_20989105/article/details/79869963

简介

在项目中使用Lombok可以减少很多重复代码的书写,比如说getter/setter/toString等方法的编写

  • 官网:https://projectlombok.org/
  • 插件安装:https://github.com/mplushnikov/lombok-intellij-plugin

项目使用

  1. 安装插件lombok
  2. 引入maven依赖

Lombok注解列表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@Setter
@Getter
@Data
@Log(这是一个泛型注解,具体有很多种形式:https://projectlombok.org/features/log)
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode
@NonNull
@Cleanup
@ToString
@RequiredArgsConstructor
@Value
@SneakyThrows
@Synchronized
  • 具体使用参考官网示例: https://projectlombok.org/features/all
  • 参考网页:https://blog.csdn.net/motui/article/details/79012846

未命名

发表于 2019-03-05

title: Linux命令
tags:

  • Linux
    copyright: true
    comments: true
    toc: true
    date: 2019-03-05 08:25:33
    categories: Linux
    password:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
su:Swith user  切换用户,切换到root用户
cat: Concatenate 串联
uname: Unix name 系统名称
df: Disk free 空余硬盘
du: Disk usage 硬盘使用率
chown: Change owner 改变所有者
chgrp: Change group 改变用户组
ps:Process Status 进程状态
tar:Tape archive 解压文件
chmod: Change mode 改变模式
umount: Unmount 卸载
ldd:List dynamic dependencies 列出动态相依
insmod:Install module 安装模块
rmmod:Remove module 删除模块
lsmod:List module 列表模块
alias :Create your own name for a command
bash :GNU Bourne-Again Shell linux内核
grep:global regular expression print
httpd :Start Apache
ipcalc :Calculate IP information for a host
ping :Send ICMP ECHO_Request to network hosts
reboot: Restart your computer
sudo:Superuser do

/bin = BINaries
/dev = DEVices
/etc = ETCetera
/lib = LIBrary
/proc = PROCesses
/sbin = Superuser BINaries
/tmp = TeMPorary
/usr = Unix Shared Resources
/var = VARiable ?
FIFO = First In, First Out
GRUB = GRand Unified Bootloader
IFS = Internal Field Seperators
LILO = LInux LOader
MySQL = My最初作者的名字SQL = Structured Query Language
PHP = Personal Home Page Tools = PHP Hypertext Preprocessor
PS = Prompt String
Perl = "Pratical Extraction and Report Language" = "Pathologically Eclectic Rubbish Lister"
Python Monty Python's Flying Circus
Tcl = Tool Command Language
Tk = ToolKit
VT = Video Terminal
YaST = Yet Another Setup Tool
apache = "a patchy" server
apt = Advanced Packaging Tool
ar = archiver
as = assembler
bash = Bourne Again SHell
bc = Basic (Better) Calculator
bg = BackGround
cal = CALendar
cat = CATenate
cd = Change Directory
chgrp = CHange GRouP
chmod = CHange MODe
chown = CHange OWNer
chsh = CHange SHell
cmp = compare
cobra = Common Object Request Broker Architecture
comm = common
cp = CoPy
cpio = CoPy In and Out
cpp = C Pre Processor
cups = Common Unix Printing System
cvs = Current Version System
daemon = Disk And Execution MONitor
dc = Desk Calculator
dd = Disk Dump
df = Disk Free
diff = DIFFerence
dmesg = diagnostic message
du = Disk Usage
ed = editor
egrep = Extended GREP
elf = Extensible Linking Format
elm = ELectronic Mail
emacs = Editor MACroS
eval = EVALuate
ex = EXtended
exec = EXECute
fd = file descriptors
fg = ForeGround
fgrep = Fixed GREP
fmt = format
fsck = File System ChecK
fstab = FileSystem TABle
fvwm = F*** Virtual Window Manager
gawk = GNU AWK
gpg = GNU Privacy Guard
groff = GNU troff
hal = Hardware Abstraction Layer
joe = Joe's Own Editor
ksh = Korn SHell
lame = Lame Ain't an MP3 Encoder
lex = LEXical analyser
lisp = LISt Processing = Lots of Irritating Superfluous Parentheses
ln = LiNk
lpr = Line PRint
ls = list
lsof = LiSt Open Files
m4 = Macro processor Version 4
man = MANual pages
mawk = Mike Brennan's AWK
mc = Midnight Commander
mkfs = MaKe FileSystem
mknod = MaKe NODe
motd = Message of The Day
mozilla = MOsaic GodZILLa
mtab = Mount TABle
mv = MoVe
nano = Nano's ANOther editor
nawk = New AWK
nl = Number of Lines
nm = names
nohup = No HangUP
nroff = New ROFF
od = Octal Dump
passwd = PASSWorD
pg = pager
pico = PIne's message COmposition editor
pine = "Program for Internet News & Email" = "Pine is not Elm"
ping = Packet InterNet Grouper
pirntcap = PRINTer CAPability
popd = POP Directory
pr = pre
printf = PRINT Formatted
ps = Processes Status
pty = pseudo tty
pushd = PUSH Directory
pwd = Print Working Directory
rc = runcom = run command, shell
rev = REVerse
rm = ReMove
rn = Read News
roff = RunOFF
rpm = RPM Package Manager = RedHat Package Manager
rsh, rlogin, = Remote
rxvt = ouR XVT
sed = Stream EDitor
seq = SEQuence
shar = SHell ARchive
slrn = S-Lang rn
ssh = Secure SHell
ssl = Secure Sockets Layer
stty = Set TTY
su = Substitute User
svn = SubVersioN
tar = Tape ARchive
tcsh = TENEX C shell
telnet = TEminaL over Network
termcap = terminal capability
terminfo = terminal information
tr = traslate
troff = Typesetter new ROFF
tsort = Topological SORT
tty = TeleTypewriter
twm = Tom's Window Manager
tz = TimeZone
udev = Userspace DEV
ulimit = User's LIMIT
umask = User's MASK
uniq = UNIQue
vi = VIsual = Very Inconvenient
vim = Vi IMproved
wall = write all
wc = Word Count
wine = WINE Is Not an Emulator
xargs = eXtended ARGuments
xdm = X Display Manager
xlfd = X Logical Font Description
xmms = X Multimedia System
xrdb = X Resources DataBase
xwd = X Window Dump
yacc = yet another compiler compiler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
在Linux中,最为常用的缩略语也许是“rc”,它是“runcomm”的缩写――即名词“run command”(运行命令)的简写。今天,“rc”是任何脚本类文件的后缀,这些脚本通常在程序的启动阶段被调用,通常是Linux系统启动时。如/etc/rs是Linux启动的主脚本,而.bashrc是当Linux的bash shell启动后所运行的脚本。.bashrc的前缀“.”是一个命名标准,它被设计用来在用户文件中隐藏那些用户指定的特殊文件;“ls”命令默认情况下不会列出此类文件,“rm”默认情况下也不会删除它们。许多程序在启动时,都需要“rc”后缀的初始文件或配置文件,这对于Unix的文件系统视图来说,没有什么神秘的。

  ETC

  在“etc/bin”中的“etc”真正代表的是“etcetera”(附加物)。在早期的Unix系统中,最为重要的目录是“bin”目录(“bin”是“binaries”二进制文件――编译后的程序的缩写),“etc”中则包含琐碎的程序,如启动、关机和管理。运行一个Linux必须的东西的列表是:一个二进制程序,etcetera,etcetera――换句话说,是一个底层的重要项目,通常添加一些次等重要的零碎事物。今天,“etc”包含了广泛的系统配置文件,这些配置文件几乎包含了系统配置的方方面面,同样非常重要。

  Bin

  今天,许多在Linux上运行的大型子系统,如GNOME或Oracle,所编译成的程序使用它们自己的“bin”目录(或者是/usr/bin,或者是/usr/local/bin)作为标准的存放地。同样,现在也能够在这些目录看到脚本文件,因为“bin”目录通常添加到用户的PATH路径中,这样他们才能够正常的使用程序。因此运行脚本通常在bin中运行良好。

  TTY

  在Linux中,TTY也许是跟终端有关系的最为混乱的术语。TTY是TeleTYpe的一个老缩写。Teletypes,或者teletypewriters,原来指的是电传打字机,是通过串行线用打印机键盘通过阅读和发送信息的东西,和古老的电报机区别并不是很大。之后,当计算机只能以批处理方式运行时(当时穿孔卡片阅读器是唯一一种使程序载入运行的方式),电传打字机成为唯一能够被使用的“实时”输入/输出设备。最终,电传打字机被键盘和显示器终端所取代,但在终端或TTY接插的地方,操作系统仍然需要一个程序来监视串行端口。一个getty“Get TTY”的处理过程是:一个程序监视物理的TTY/终端接口。对一个虚拟网络沮丧服务器(VNC)来说,一个伪装的TTY(Pseudo-TTY,即家猫的TTY,也叫做“PTY”)是等价的终端。当你运行一个xterm(终端仿真程序)或GNOME终端程序时,PTY对虚拟的用户或者如xterm一样的伪终端来说,就像是一个TTY在运行。“Pseudo”的意思是“duplicating in a fake way”(用伪造的方法复制),它相比“virtual”或“emulated”更能真实的说明问题。而在现在的计算中,它却处于被放弃的阶段。

  Dev

  从TTY留下的命令有“stty”,是“set tty”(设置TTY)的缩写,它能够生成一个配置文件/etc/initab(“initialization table”,初始表),以配置gettys使用哪一个串口。在现代,直接附加在Linux窗口上的唯一终端通常是控制台,由于它是特殊的TTY,因此被命名为“console”。当然,一旦你启动X11,“console”TTY就会消失,再也不能使用串口协议。所有的TTY都被储存在“/dev”目录,它是“ devices”([物理]设备)的缩写。以前,你必须在电脑后面的串口中接入一个新的终端时,手工修改和配置每一个设备文件。现在,Linux(和Unix)在安装过程中就在此目录中创建了它所能向导的每一个设备的文件。这就是说,你很少需要自己创建它。

  随着硬件在电脑中的移出移进,这些名字将变得更加模糊不清。幸运的是,今天在Linux上的高等级软件块对历史和硬件使用容易理解的名字。举例来说,嗯,Pango(http://www.pango.org/)就是其中之一。

  如果你对这些内容很感兴趣,那么我建议你阅读宏大的,但有些以美国英语历史为中心的,由Eric S. Raymond撰写的Jargon File。它并没有解释所有在Unix中使用的术语,但是它给出了这些形成的大致情况。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

/vmlinuz
  我们已经知道,每一个linux都有一个内核(vmlinuz),我们在这个内核上添加上可以完成各种特定功能的模块,每个模块就体现在 linux中各种不同的目录上。当然,各种不同的发行套件,其目录有细小的差别,但主要结构都是一样的。我们还要将linux的功能模块和各种应用程序结合起来,这样,才能使你的 linux系统为你服务。在/vmlinuz目录下存放的就是系统的内核。
/bin
  显而易见,bin 就是二进制(binary)英文缩写。在一般的系统当中,你都可以在这个目录下找到linux常用的命令。在有的版本中你还会找到一些和根目录下相同的目录。

/boot
  在这个目录下存放的都是系统启动时要用到的程序。我们在使用lilo引导linux的时候,会用到这里的一些信息。

/dev
  dev 是设备(device)的英文缩写。这个目录对所有的用户都十分重要。因为在这个目录中包含了所有linux系统中使用的外部设备。但是这里并不是放的外部设备的驱动程序。这一点和我们常用的windows, dos操作系统不一样。它实际上是一个访问这些外部设备的端口。我们可以非常方便地去访问这些外部设备,和访问一个文件,一个目录没有任何区别。 例如:我们在系统中键入:cd /dev/cdrom 我们就可以看到光驱中的文件了。在这个目录下,有一个null设备,这个东西本身没有任何意义。如果你向这个目录写入文件或内容,他们统统有去无回。

/cdrom
  这个目录在你刚刚安装系统的时候是空的。你可以将光驱文件系统挂在这个目录下。例如:mount /dev/cdrom /cdrom

/etc
  etc这个目录是linux系统中最重要的目录之一。在这个目录下存放了系统管理时要用到的各种配置文件和子目录。我们要用到的网络配置文件,文件系统,x系统配置文件,设备配置信息,设置用户信息等都在这个目录下。

/sbin
  这个目录是用来存放系统管理员的系统管理程序。

/home
  如果我们建立一个用户,用户名是"xx",那么在/home目录下就有一个对应的/home/xx路径,用来存放用户的主目录。

/lib
  lib是库(library)英文缩写。这个目录是用来存放系统动态连接共享库的。几乎所有的应用程序都会用到这个目录下的共享库。

/lost+found
  这个目录在大多数情况下都是空的。但是如果你正在工作突然停电,或是没有用正常方式关机,在你重新启动机器的时候,有些文件就会找不到应该存放的地方,对于这些文件,系统将他们放在这个目录下,就象为无家可归的人提供一个临时住所。

/mnt
  这个目录在一般情况下也是空的,有时有四个空目录.你可以临时将别的文件系统挂在这个目录下。

/proc
  可以在这个目录下获取系统信息。这些信息是在内存中,由系统自己产生的。这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件,比如可以通过下面的命令来屏蔽主机的ping命令,使别人无法ping你的机器:
  echo 1 > /proc/sys/net/ipv4/icmp_echo_ ignore_all。

/root
  如果你是以超级用户的身份登录的,这个就是超级用户的主目录。

/tmp
  用来存放不同程序执行时产生的临时文件。

/usr
  这是linux系统中占用硬盘空间最大的目录。用户的很多应用程序和文件都存放在这个目录下。具体来说:

/usr/X11R6存放X-Windows的目录;

/usr/games存放着XteamLinux自带的小游戏;

/usr/bin存放着许多应用程序;

/usr/sbin存放root超级用户使用的管理程序;

/usr/doc Linux技术文档;

/usr/include用来存放Linux下开发和编译应用程序所需要的头文件;

/usr/lib存放一些常用的动态链接共享库和静态档案库;

/usr/local这是提供给一般用户的/usr目录,在这里安装一般的应用软件;

/usr/man帮助文档所在的目录;

/usr/src Linux开放的源代码,就存在这个目录,爱好者们别放过哦;

/var这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件。如果你想做一个网站,你也会用到/var/www这个目录。





未命名

发表于 2019-03-05

title: Lodop
tags:

  • java
    copyright: true
    comments: true
    toc: true
    date: 2019-03-04 14:25:33
    categories: Java
    password:

简介

官网:http://www.c-lodop.com/index.html
实例博客:http://blog.sina.com.cn/s/articlelist_1914599397_0_1.html

dubbo入门

发表于 2019-03-04 | 分类于 Java

简介

官网: http://dubbo.apache.org/zh-cn/

Apache Dubbo (incubating) |ˈdʌbəʊ| 是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。
image

  • 最大程度进行解耦,降低系统耦合性
  • 生产者/消费者模式
  • zk注册中心,admin监控中心,协议支持

RPC介绍:https://baike.baidu.com/item/远程过程调用协议/6893245?fromtitle=RPC&fromid=609861&fr=aladdin

image

系统之间的调用方式:

  • WebService-wsdl
  • httpclient
  • rpc通信(dubbo)/restful(spring cloud)

未命名

发表于 2019-03-04

title: 分布式基础知识
tags:

  • 分布式
    copyright: true
    comments: true
    toc: true
    date: 2019-03-04 09:25:33
    categories: Java
    password:

VRRP原理

https://www.jianshu.com/p/81115a4293c7

  • 虚拟路由冗余协议(Virtual Router Redundancy Protocol,简称VRRP)是由IETF提出的解决局域网中配置静态网关出现单点失效现象的路由协议
  • 它是通过将多台设备虚拟化成一台设备,如果其中一台设备出现故障,那么另一台设备可以迅速接替其工作,以保证通讯的可靠性和连续性

RHEL 7 中 systemctl 的用法(替代service 和 chkconfig)

发表于 2019-03-04 | 分类于 Linux

systemctl是RHEL 7 的服务管理工具中主要的工具,它融合之前service和chkconfig的功能于一体。可以使用它永久性或只在当前会话中启用/禁用服务。

Systemctl是一个systemd工具,主要负责控制systemd系统和服务管理器。

Systemd是一个系统管理守护进程、工具和库的集合,用于取代System V初始进程。Systemd的功能是用于集中管理和配置类UNIX系统

启用服务就是在当前“runlevel”的配置文件目录/etc/systemd/system/multi-user.target.wants/里,建立/usr/lib/systemd/system里面对应服务配置文件的软链接;禁用服务就是删除此软链接,添加服务就是添加软连接

Systemctl接受服务(.service),挂载点(.mount),套接口(.socket)和设备(.device)作为单元。

  • 启动一个服务:systemctl start postfix.service
  • 关闭一个服务:systemctl stop postfix.service
  • 重启一个服务:systemctl restart postfix.service
  • 显示一个服务的状态:systemctl status postfix.service
  • 在开机时启用一个服务:systemctl enable postfix.service
  • 在开机时禁用一个服务:systemctl disable postfix.service
  • 查看服务是否开机启动:systemctl is-enabled postfix.service
  • 查看已启动的服务列表:systemctl list-unit-files|grep enabled
  • 查看启动失败的服务列表:systemctl --failed

使用命令 systemctl is-enabled postfix.service 得到的值可以是enable、disable或static,这里的 static 它是指对应的 Unit 文件中没有定义[Install]区域,因此无法配置为开机启动服务。

image

更多:https://linux.cn/article-5926-1.html

chkconfig: https://www.cnblogs.com/gotodsp/p/6405106.html

k8s基础

发表于 2019-03-02 | 分类于 docker

应用部署模式的变迁

image

云原生

  • “云原生”是一种构建和运行应用程序的方法,它利用了云计算交付模型的优势
  • “云原生”是关于如何创建和部署应用程序,和位置无关。 这意味着应用程序位于云中,而不是传统数据中心
    image
    云原生应用的三大特征:
  • 容器化封装:以容器为基础,提高整体开发水平,形成代码和组件重用,简化云原生应用程序的维护。在容器中运行应用程序和进程,并作为应用程序部署的独立单元,实现高水平资源隔离。
  • 动态管理:通过集中式的编排调度系统来动态的管理和调度。
  • 面向微服务:明确服务间的依赖,互相解耦
    image

k8s简介

  • k8s是以google内部容器编排管理容器borg为原型的开源实现
  • k8s是一个容器编排管理平台;一个微服务支撑平台;一个可移植的"云平台"

容器编排管理平台

k8s作为容器编排管理平台提供:

  • 以Pod(容器组)为基本的编排和调度单元以及声明式的对象配置模型(控制器、configmap、secret等)
  • 资源配额与分配管理
  • 健康检查、自愈、伸缩与滚动升级

微服务支撑平台

k8s作为微服务支撑平台提供:

  • 服务发现、服务编排与内部路由支持
  • 服务快速部署与自动负载均衡
  • 提供对"有状态"服务的支持等

可移植的云平台

为用户提供简单且一致化的容器化应用部署、伸缩和管理机制,形成新的、通用的应用云化模型

k8s集群初体验

image

k8s架构介绍

image

Master组件:集群大脑

image

  • 所有集群的控制命令都传递给Master组件并在其上执行
  • 每个k8s集群至少有一套Master组件
  • 每套master组件包含3个核心组件(apiserver,scheduler,controller-manager)以及集群数据配置中心etcd

API Server

  • 集群控制的唯一入口,是提供k8s集群控制的restful API的核心组件
  • 集群各个组件之间数据交互和通信的中枢
  • 提供集群控制的安全机制(身份认证、授权以及admission control)

Scheduler

  • 通过APIServer的Watch接口监听新建pod副本信息,并通过调度算法为该pod选择一个最合适的node
  • 支持自定义调度算法provider
  • 默认调度算法内置预选策略和优选策略,决策考量资源需求、服务质量、软硬件约束、亲缘性、数据局部性等指标参数

ControllerManager

  • 集群内各种资源controller的核心管理者
  • 针对每一种具体的资源,都有相应的controller
  • 保证其下管理的每个controller所对应的资源始终处于"期望状态"

Etcd

  • k8s集群的祝数据库,存储着所有资源对象及状态
  • 默认与Master组件部署在一个Node上
  • Etcd的数据变更都是通过API Server进行

Node组件:工作负载节点

  • k8s集群由多个node共同承担工作负载,Pod被分配到某个具体的node上执行
  • k8s通过node controller对node资源进行管理,支持动态增删node
  • 每个集群node上都会部署kubelet和kube-proxy两个组件
    image

kubelet

  • 位于集群中每个node上的非容器形式的服务进程组件,Master和Node之间的桥梁
  • 处理Master下发到本node上pod的创建、启停等管理任务;向API Server注册node信息
  • 监控本node节点上容器和节点资源情况,并定期向Master汇报节点资源占用情况

kube-proxy

  • 运行在集群中每个node上
  • Service抽象概念的实现,将到service的请求按策略(负载均衡)算法分发到后段Pod上
  • 默认使用iptables mode实现
  • 支持nodeport模式,实现从外部网络访问集群内的service

k8s基础概念

Kubernetes对象

是一种持久化的、用于表示集群状态的实体,使用yaml文件描述,ke通过API/cubectl管理
image

常用Metadata属性

  1. name和UID
  • 对k8s集群中所有对象都通过name和UID明确标识
  • API中的对象访问路径:/API/{version}/namespaces/{namespace}/{object-kind}/name
  • 在k8s集群的整个生命周期内创建的每个对象实例都具有不同的UID
  1. namespace
  • 用于将物理集群划分为多个虚拟集群
  • namespaces之间相互隔离,因此也常被用来隔离不同用户及权限
  • k8s内置3个namespaces:defalut,kube-system和kube-public,Node和PersistentVolume不属于任何namespace
  1. Label
  • 用来建立集群之间的灵活的、松耦合的多维关联关系
  • 一个label就是一个键-值对,其key-value均由用户自己定义
  • label可附着在任何对象上,每个对象可以有任意个label
  • label可以将有组织目的的结构映射到集群对象上,从而形成一个与现实世界管理结构同步对应松耦合的、多维的对象管理结构
  • 通过label selector查询和筛选建立对象间的关系,其关联关系示例如下图:
    image
  1. Annotaions
  • Annotaions可以将任意非标识性元数据附加到对象上
  • 以键值对形式呈现
  • 工具和库可以检索到Annotaions元数据
  • 将数据以Annotaions附着在对象上,有利于创建一些用于部署、管理和做内部检查的共享工具或客户端

k8s对象分类

image

Pod 以Pod为中心,集群调度的基本单元,是一个有特定关系的容器集合
image

  • Pod是集群中可以创建和部署的最小且最简的k8s对象单元
  • Pod也是一种封装,它封装了应用容器、存储资源、独立网络IP以及决定容器如何运行的策略选项
  • 每个Pod中预置一个pause容器,其名字空间、IPC资源、网络资源和存储资源被pod内其他容器共享。pod内所有容器紧密协作,并作为一个整体被管理、调度和运行
  • pod是一个非持久化性实体

docker网络详解

发表于 2019-03-01 | 分类于 docker

学习参考文章:https://www.cnblogs.com/zuxing/articles/8780661.html

Docker自身的4种网络工作方式

安装Docker时,它会自动创建三个网络,bridge(创建容器默认连接到此网络)、 none 、host,可通过:docker network ls 查看

  • host:容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。
  • Container:创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围。
  • None:该模式关闭了容器的网络功能。
  • Bridge:此模式会为每一个容器分配、设置IP等,并将容器连接到一个docker0虚拟网桥,通过docker0网桥以及Iptables nat表配置与宿主机通信。除非你使用该docker run --network=选项指定,否则Docker守护程序默认将容器连接到此网络。

host

  • host模式:使用 --net=host 指定
  • docker的host模式相当于Vmware中的桥接模式,与宿主机在同一个网络中,但没有独立IP地址。
  • Docker使用了Linux的Namespaces技术来进行资源隔离,如PID Namespace隔离进程,Mount Namespace隔离文件系统,Network Namespace隔离网络等。
  • 一个Network Namespace提供了一份独立的网络环境,包括网卡、路由、Iptable规则等都与其他的Network Namespace隔离。
  • 一个Docker容器一般会分配一个独立的Network Namespace。
  • 如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。
  • 外界访问容器中的应用,则直接使用宿主机IP即可,不用任何NAT转换,就如直接跑在宿主机中一样。但是,容器的其他方面,如文件系统、进程列表等还是和宿主机隔离的。

Container

此模式类似于host模式,指定新创建的容器和已经存在的一个容器共享一个Network Namespace,而不是和宿主机共享,其他机制和host模式类似

  • container模式:使用 --net=container:NAME_or_ID 指定

None

  • none模式:使用 --net=none 指定
    该模式关闭了容器的网络功能

Bridge

相当于Vmware中的Nat模式,容器使用独立network Namespace,并连接到docker0虚拟网卡(默认模式)

Docker:网络模式详解

image

  • bridge模式:使用 --net=bridge 指定
  • 当Docker server启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的Docker容器会连接到这个虚拟网桥上
  • 在主机上创建一对虚拟网卡veth pair设备。veth设备总是成对出现的,它们组成了一个数据的通道,数据从一个设备进入,就会从另一个设备出来。因此,veth设备常用来连接两个网络设备。
  • Docker将veth pair设备的一端放在新创建的容器中,并命名为eth0。另一端放在主机中,以veth65f9这样类似的名字命名,并将这个网络设备加入到docker0网桥中,可以通过brctl show命令查看
  • 从docker0子网中分配一个IP给容器使用,并设置docker0的IP地址为容器的默认网关,可以通过docker inspect 容器ID方式查看网络

宿主机ifconfig:(较新版的udev使用了新的命名规则,原来的eth0网卡命名变成类似enp0s5)
image
容器ifconfig
image

bridge模式下容器的通信

  • 在bridge模式下,连在同一网桥上的容器可以相互通信
  • 若出于安全考虑,也可以禁止它们之间通信,方法是在DOCKER_OPTS变量中设置–icc=false,这样只有使用–link才能使两个容器通信

自定义网络

Docker 提供三种 user-defined 网络驱动:bridge, overlay 和 macvlan。overlay 和 macvlan 用于创建跨主机的网络

1
2
3
4
5
docker network ls //显示所有网络
docker network create -d bridge my-net //新建网络,-d bridge为默认,也可省略
docker run -it --rm --name busybox1 --network my-net busybox sh
docker run -it --rm --name busybox2 --network my-net busybox sh //busybox1和busybox2加入了相同的网络,在调用相互的服务时可以使用别名进行调用了,也可进入容器ping测试
docker network connect my-net web //添加已经运行的容器到自定义网络

参考文章

https://www.cnblogs.com/zuxing/articles/8780661.html

1234…50
行锋

行锋

496 日志
15 分类
74 标签
GitHub E-Mail
自古写字楼如青楼,不许楼里见白头
© 2015 — 2019 行锋
博客全站共229.9k字