181114-Python高级特性

python的一些高级特性记录小结,主要就是列表生成是和生成器的使用姿势

181112-springboot应用下线配置

本篇记录SpringBoot 2.x借助Actuator实现优雅的下线的配置方式

181011-SpringCloud之DiscoverClient无法获取Service记录

最终解决问题之后,才发现是自己走进盲角了,花了不少时间,特此记录

I. 问题说明

在测试使用SpringCloud全家桶时,服务向注册中心注册,然后client就可以相互之间实现RPC调用(其实还是http访问)

如果我想看看当前注册中心获取了哪些服务,可以怎么办?

一个简单的方法就是借助DiscoverClient来做,然后问题就来了

1
2
3
4
public Application(DiscoveryClient discoveryClient) {
List<String> list = discoveryClient.getServices();
System.out.println(list);
}

上面的代码执行之后,发现返回是空数组;蛋疼的是换另外一个工程,同样的方式,却可以拿到注册的服务名

查了半天,最好才发现拿不到是因为在配置中添加了

1
eureka.client.fetchRegistry=false

上面就表示不会去主动获取注册的服务,因此也就拿不到服务了;改成true之后就ok了

II. 其他

1. 一灰灰Bloghttps://liuyueyi.github.io/hexblog

一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛

2. 声明

尽信书则不如,已上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激

3. 扫描关注

一灰灰blog

QrCode

知识星球

goals

180928-hexo使用本地图片的一种方式

hexo搭建的个人博客中,想引入图片可以怎么搞?

整个过程中,尝试过一些方法,下面记录一下,并给出现在正使用的方式

180926-Java之数值型的字面值中使用下划线

之前偶然在一个开源项目中看到下面这种写法,深感惊奇,当时没有记录,后来果不其然就忘掉了这种写法,现在又看到这种写法,特此记录

1
long price = 1_000_123L;

180925-shell获取系统当前时间并格式化

shell命令获取当前系统时间并格式化的方式记录

1
2
time=$(date "+%Y-%m-%d %H:%M:%S")
echo "${time}"

180918-JDK之Deflater压缩与Inflater解压

JDK 压缩与解压工具类

在实际的应用场景中,特别是对外传输数据时,将原始数据压缩之后丢出去,可以说是非常常见的一个case了,平常倒是没有直接使用JDK原生的压缩工具类,使用Protosutff和Kryo的机会较多,正好在实际的工作场景中遇到了,现在简单的看下使用姿势

180917-Shell命令之xargs使用小结

Shell命令之xargs使用小结

常见用于管道的处理中,拿到前面的数据进行后续的处理;

xargs 以空白字符或换行作为分割,默认使用echo输出结果,且会忽略空白行,官方说明如下

xargs reads items from the standard input, delimited by blanks (which can be protected with double or single quotes or a backslash) or newlines, and executes the command (default is /bin/echo) one or more times with any initial-arguments followed by items read from standard input. Blank lines on the standard input are ignored.

180916-ReactJs之日期转换

常见的日期与时间戳之间的相互转换,记录下借助插件momoent来实现

1. 使用姿势

使用前,有那么几步需要走

安装依赖

1
sudo npm install --save moment

引入依赖

1
import moment from 'moment';

开始使用

1
2
// 将时间戳(ms),转换为指定格式的日期
moment(Time).format("YYYY-MM-DD HH:mm:ss")

2. 常用说明

a. 日期格式化

1
2
3
4
5
moment().format('MMMM Do YYYY, h:mm:ss a'); // 九月 16日 2018, 8:54:12 晚上
moment().format('dddd'); // 星期日
moment().format("MMM Do YY"); // 9月 16日 18
moment().format('YYYY [escaped] YYYY'); // 2018 escaped 2018
moment().format(); // 2018-09-16T20:54:12+08:00

b. 相对时间

1
2
3
4
5
moment("20111031", "YYYYMMDD").fromNow(); // 7 年前
moment("20120620", "YYYYMMDD").fromNow(); // 6 年前
moment().startOf('day').fromNow(); // 21 小时前
moment().endOf('day').fromNow(); // 3 小时内
moment().startOf('hour').fromNow(); // 1 小时前

c. 日历时间

1
2
3
4
5
6
7
8
moment().subtract(10, 'days').calendar(); // 2018年9月6日
moment().subtract(6, 'days').calendar(); // 本周一晚上8点55
moment().subtract(3, 'days').calendar(); // 本周四晚上8点55
moment().subtract(1, 'days').calendar(); // 昨天晚上8点55分
moment().calendar(); // 今天晚上8点55分
moment().add(1, 'days').calendar(); // 明天晚上8点55分
moment().add(3, 'days').calendar(); // 下周三晚上8点55
moment().add(10, 'days').calendar(); // 2018年9月26日

d. 多语言

1
2
3
4
5
6
7
8
moment().format('L');    // 2018-09-16
moment().format('l'); // 2018-09-16
moment().format('LL'); // 2018年9月16日
moment().format('ll'); // 2018年9月16日
moment().format('LLL'); // 2018年9月16日晚上8点55分
moment().format('lll'); // 2018年9月16日晚上8点55分
moment().format('LLLL'); // 2018年9月16日星期日晚上8点55分
moment().format('llll'); // 2018年9月16日星期日晚上8点55分

II. 其他

0. 相关

1. 一灰灰Bloghttps://liuyueyi.github.io/hexblog

一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛

2. 声明

尽信书则不如,已上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激

3. 扫描关注

一灰灰blog

QrCode

知识星球

goals

180915-ReactJs之Fix:uncaught at check call argument [object Promise] is not a function

Fix uncaught at check call: argument [object Promise] is not a function

在使用ANTD的魔板套前端页面的时候,遇到了一个诡异的问题,记录下

在modal中的写法如下

1
2
3
4
* addGroup({payload}, {call, put}) {
yield call(addGroup(payload));
console.log("add group over!");
},

在执行时,控制台报错

1
uncaught at check call: argument [object Promise] is not a function

主要原因在 yield call(addGroup(payload)); 的使用姿势问题,对于需要传递参数的去哪个,不能直接这么干,应该改为

1
yield call(addGroup, payload);

II. 其他

1. 一灰灰Bloghttps://liuyueyi.github.io/hexblog

一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛

2. 声明

尽信书则不如,已上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激

3. 扫描关注

一灰灰blog

QrCode

知识星球

goals

180911-获取应用中所有线程

如何获取应用中,所有活动的线程?

1
2
3
4
ThreadGroup group = Thread.currentThread().getThreadGroup();
// 激活的线程数加倍
int estimatedSize = group.activeCount() * 2;
Thread[] slackList = new Thread[estimatedSize];

上面是获取当前线程所在的ThreadGroup, 然后将这个分组内的所有线程丢到slackList数组中,实际测试时,数组大小可能是大于实际的线程数的(而且可能性特别大)

通过ThreadGroup,还可以获取上一层的Group, 然后遍历所有的线程

180910-Java根据路径获取文件内容

给出一个资源路径,然后获取资源文件的信息,可以说是非常常见的一种需求场景了,当然划分一下,本文针对最常见的三种状况进行分析

  • 网络地址
  • 本地绝对路径
  • 本地相对路径

180907-IDEA编译Groovy脚本失败记录

在做 https://github.com/liuyueyi/quick-task 项目时,遇到了一个蛋疼的问题,不知道什么时候加了个Groovy脚本之后,整个项目就编译不过了,特此记录一下

180906-Centos网络带宽监控小结

Centos网络带宽监控小结

查看机器的网络流入流出带宽,一个简单的方式就是利用 iftop ,下面简单的记录下使用姿势

180905-Spring返回Json对象

Spring之返回Json串

使用Spring搭建的web后端服务,与前端通过Json串进行交互,特此记录下使用姿势

1. 直接返回JsonString

这个可以说是最简单和最常见的一种使用姿势了,直接返回String,如下

1
2
3
4
5
@ResponseBody
@RequestMapping(value = "/body")
public String body(@RequestBody Req req) {
return JSON.toJSONString(req);
}

2. 使用JsonInclude注解

直接返回的是一个对象,然后交给框架来将对象转换为String丢给前端

1
2
3
4
5
@RequestMapping(path = {"/index", "/"})
public ResponseWrapper<List<PoetryDTO>> index() {
List<PoetryDTO> ans = poetryReadService.getIndex();
return ResponseWrapper.successReturn(ans);
}

直接用上面的方式时,可能会抛出,提示没有对应的HttpMessageConverter来转换ResponseWrapper对象

一个简单的使用姿势就是直接使用注解 com.fasterxml.jackson.annotation.JsonInclude

如下即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
JsonInclude
@Data
@NoArgsConstructor
public class ResponseWrapper<T> {
private int code;
private String msg;
private T data;

public ResponseWrapper(int code, String msg, T data) {
this.code = code;
this.msg = msg;
this.data = data;
}

public static <T> ResponseWrapper<T> buildSuccess(T data) {
return new ResponseWrapper<>(200, "success", data);
}

public static <T> ResponseWrapper<T> buildError(int code, String msg, T data) {
return new ResponseWrapper<>(code, msg, data);
}
}

因此关键就是HttpMessageConverter在起作用了,下一篇重点关注下这个是什么东西,干嘛用,以及如何自己实现一个特定需求的转换器

II. 其他

1. 一灰灰Bloghttps://liuyueyi.github.io/hexblog

一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛

2. 声明

尽信书则不如,已上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激

3. 扫描关注

一灰灰blog

QrCode

知识星球

goals

180830-SpringBoot之获取application.yml配置参数

SpringBoot之获取Application.yml配置参数

需要获取配置文件中的配置参数的场景挺多的,常见的一种方式就是直接从Enironment对象中获取,或者使用 @Value 注解的方式注入,但是这都有一个前提,需要确切的知道配置的name

如果某些场景下,我需要遍历配置参数可以怎么办?

180827-Java获取类路劲的几种姿势小结

I. Java获取类路劲的几种姿势小结

在Java环境中,如何获取当前类的路径,如何获取项目根路径,可以说是比较常见的需求场景了,下面简单的记录一下

180826-mysql配置修改小记

修改默认的msyql配置

1. 端口号修改

默认的端口号为3306,如果需要修改端口号,则找到my.cnf文件,新加一个配置即可:

1
2
3
4
5
6
7
vim /etc/my.cnf

## 找到指定的位置,修改端口号
[mysqld]
port=3305
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

服务重启

1
service mysqld restart

2. 密码修改

使用set password

格式:

1
mysql> set password for 用户名@localhost = password('新密码');

例子:

1
mysql> set password for root@localhost = password('123');

update 方式

1
2
3
4
5
mysql> use mysql;  

mysql> update user set password=password('123') where user='root' and host='localhost';

mysql> flush privileges;

添加用户

1
2
alter user 'root'@'localhost' identified by 'test';
create user 'test'@'%' IDENTIFIED BY 'test';

授予权限

1
2
3
# root 方式登录
grant all PRIVILEGES on test.* to 'finbtc'@'%' IDENTIFIED by 'test';
flush privileges;

II. 其他

1. 一灰灰Bloghttps://liuyueyi.github.io/hexblog

一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛

2. 声明

尽信书则不如,已上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激

3. 扫描关注

一灰灰blog

QrCode

知识星球

goals

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×