0%

Java中的函数

方法引用:

比方说,你想要筛选一个目录中的所有隐藏文件。你需要编写一个方法,然后给它一个File,它就会告诉你文件是不是隐藏的。幸好,File类里面有一个叫作isHidden的方法。我们可以把它看作一个函数,接受一个File,返回一个布尔值。但要用它做筛选,你需要把它包在一个FileFilter对象里,然后传递给File.listFiles方法,如下所示:

1
2
3
4
5
File[] hiddenFiles = new File(".").listFiles(new FileFilter() { 
public boolean accept(File file) {
return file.isHidden();
}
});
阅读全文 »

流(1)

几乎每个Java应用都会制造和处理集合。但集合用起来并不总是那么理想。比方说,你需要从一个列表中筛选金额较高的交易,然后按货币分组。你需要写一大堆套路化的代码来实现这个数据处理命令,如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
Map<Currency, List<Transaction>> transactionsByCurrencies = new HashMap<>(); 
for (Transaction transaction : transactions) {
if(transaction.getPrice() > 1000){
Currency currency = transaction.getCurrency();
List<Transaction> transactionsForCurrency = transactionsByCurrencies.get(currency);
if (transactionsForCurrency == null) {
transactionsForCurrency = new ArrayList<>();
transactionsByCurrencies.put(currency, transactionsForCurrency);
}
transactionsForCurrency.add(transaction);
}
}
阅读全文 »

Design类型,共23种:

**创建型模式:单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式。
**结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。
**行为型模式:模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式(责任链模式)、访问者模式。
设计原则:

开篇

某日写程序时,使用jpa操作数据库,当我使用findAll()方法查处一个List的对象后,给对这个list的实体进行了一些操作,并没有调用update 或者 saveOrUpdate方法,更改后的数据却神奇的保存到数据库里面去了😕😕😕我也在service层添加事物了啊。后面找了资料才发现是jpa是对hibernate的封装,底层是hibernate,这是hibernate的持久状态搞的鬼。

阅读全文 »

由于公司某一外网服务器被墙了,后又有一次数据库遭受破坏,为了加强安全性,把服务器的一些开放端口给关闭了,其中就包括mysql的3306端口。那么,我本来直接连接数据库的方式肯定是不行了,更改为ssh连接,如下图:

阅读全文 »

nginx.conf配置文件

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
# For more information on configuration, see:
# * Official English Documentation: http://nginx.org/en/docs/
# * Official Russian Documentation: http://nginx.org/ru/docs/

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
<!-- more -->
# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
worker_connections 1024;
}

http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

access_log /var/log/nginx/access.log main;

sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;

include /etc/nginx/mime.types;
default_type application/octet-stream;

# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;

server {
listen 80;
listen [::]:80;
server_name _;
root /usr/share/nginx/html;

# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;

location / {
}

error_page 404 /404.html;
location = /40x.html {
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}

# Settings for a TLS enabled server.
#
# server {
# listen 443 ssl http2 default_server;
# listen [::]:443 ssl http2 default_server;
# server_name _;
# root /usr/share/nginx/html;
#
# ssl_certificate "/etc/pki/nginx/server.crt";
# ssl_certificate_key "/etc/pki/nginx/private/server.key";
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 10m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
#
# # Load configuration files for the default server block.
# include /etc/nginx/default.d/*.conf;
#
# location / {
# }
#
# error_page 404 /404.html;
# location = /40x.html {
# }
#
# error_page 500 502 503 504 /50x.html;
# location = /50x.html {
# }
# }

}

include /etc/nginx/conf.d/*.conf; //引入/etc/nginx/conf.d/下的所有.conf子配置文件 注意这条很重要,因为在默认配置中没有server段的配置,而一般都是将server的配置放在/etc/nginx/conf.d/目录下。
正常情况下http段配置结构如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
http {
...
server {
...
location [PATTERN] {
...
}
location [PATTERN] {
...
}
}

server {
...
}
}

Nginx的相关命令和服务启动加载
nginx -s reload :重新加载nginx的配置文件;

nginx -t:检查配置文件语法是否有问题;

Nginx服务启动、停止、重新加载

#service nginx start | stop | reload

#/etc/init.d/nginx start | stop | reload

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
sites-enabled
这里面的配置文件其实就是sites-available里面的配置文件的软
连接,但是由于nginx.conf默认包含的是这个文件夹,所以我们在
sites-available里面建立了新的站点之后,还要建立个软连接到sites-enabled里面才行

sites-available
这里是我们的虚拟主机的目录,我们在在这里面可以创建多个虚拟主机.
##
在conf.d下面配置我的两个配置文件
aaa.conf
```shell
upstream gooneserver {
server 127.0.0.1:8580;
}

server {
listen 80 default_server;
server_name www.rizin.fun rizin.fun;

access_log /var/log/nginx/goone.access.log main;
error_log /var/log/nginx/goone.error.log;

root /usr/share/nginx/html;
index index.html index.htm index.php;

## send request back to apache ##
location / {
proxy_pass http://gooneserver;

#Proxy Settings
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_max_temp_file_size 0;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
}

yyy.conf

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
upstream gooneadminserver  {
server 127.0.0.1:8581;
}

server {
listen 80;
server_name admin.rizin.fun;

access_log /var/log/nginx/admin.goone.access.log main;
error_log /var/log/nginx/admin.goone.error.log;

root /usr/share/nginx/html;
index index.html index.htm index.php;

## send request back to apache ##
location / {
proxy_pass http://gooneadminserver;

#Proxy Settings
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_max_temp_file_size 0;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
}

背景

一日,我按往常打开navicat工具连接数据库,What?不能连接了?😕冷静下来之后我又打开xshell,连接数据库所属的服务器,纳尼???服务器也连不上了?😱原来是公司内网服务器突然做了迁移,搬到了小黑屋,本来ip为192.168.1.31,现在变成了192.168.10.31。按照之前的方式肯定连不上了,那么怎么办昵?接下来说一下我的解决办法。

操作步骤

阅读全文 »

Controller的单元测试

第一种使用模拟环境进行测试

原理

使用MockMvc发起请求,然后执行API中相应的代码,在执行的过程中使mock模拟底层数据的返回,最后结果验证。
Spring测试框架提供MockMvc对象,可以在不需要客户端-服务端请求的情况下进行MVC测试,完全在服务端这边就可以执行Controller的请求,跟启动了测试服务器一样。
测试开始之前需要建立测试环境,setup方法被@Before修饰。通过MockMvcBuilders工具,使用WebApplicationContext对象作为参数,创建一个MockMvc对象。

阅读全文 »

一个博客为什么要建两个仓库

之前我的博客就一个仓库,还是公有的,那么问题来了,我发布文章部署之后所有人都可以看我的源码及配置文件😟。这是绝对不能允许的,并不是小编我太小气,就是怕有些投机取巧不劳而获的人直接copy我的源码发表,岂不是便宜了他,这样的人大家都不喜欢吧?好了,废话少说,开始步入正题😀。

阅读全文 »

Java 反序列化

private static final ObjectMapper mapper = new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES属性默认为true开启状态,当属性为true时,表示在反序列化时遇到未知属性(属性没有对应的类属性来映射,并且没有任何setter或handler来处理这样的属性)时会引起结果失败(通过抛JsonMappingException异
忽略不需要的字体
有时候,返回的JSON字符串中含有我们并不需要的字段,那么当对应的实体类中不含有该字段时,会抛出一个异常,告诉你有些字段没有在实体类中找到。解决办法很简单,在声明ObjectMapper之后,加上下述代码:

阅读全文 »