Lombok插件,提高你的编码效率


Lombok是一个第三方的Java类库,能自动插入编辑器并构建工具,简化Java开发。通过添加注解的方式,不需要为类编写getter或eques方法,同时可以自动化日志变量。

  • 在Eclipse中使用Lombok

    1. 下载插件 https://projectlombok.org/download

    1577338794533

    1. 将下载的jar包复制到eclipse安装目录下,按住shift右键打开命令行窗口,输入java -jar lombok .jar
    2. 弹出安装界面,选择eclipse的安装位置,进行安装

    lomok安装界面

    安装成功

  • 使用Lombok插件(maven环境下)

    1. 添加maven依赖

      <dependency>
          <groupId>org.projectlombok</groupId>
          <artifactId>lombok</artifactId>
          <version>1.18.4</version>
          <scope>provided</scope>
      </dependency>
    2. 示例

      @Data
      public class User implements Serializable {
      
          private static final long serialVersionUID = -8054600833969507380L;
      
          private Integer id;
      
          private String username;
      
          private Integer age;
      
      }
      @Slf4j
      @RestController
      @RequestMapping(("/user"))
      public class UserController {
      
          @GetMapping("/getUserById/{id}")
          public User getUserById(@PathVariable Integer id) {
              User user = new User();
              user.setUsername("erichary");
              user.setAge(21);
              user.setId(id);
      
              if (log.isInfoEnabled()) {
                  log.info("用户 {}", user);
              }
              return user;
          }
      
      }
  • idea和eclipse的使用方法是一样的,我们只介绍怎么安装这个插件

    打开设置页面

    1577340521552

    1577340564556

重启浏览器之后,安装成功

工欲善其事,必先利其器


在Centos7上安装MySQL5.7 比较简单的方式


为什么要写这个呢,是因为我太好忘了,偏偏我的服务器都是centos的,每次都要找好久,算是个笔记吧

在这里介绍使用yum安装mysql

你可能要准备的软件包

yum install -y wget

第一步:找到yum的下载地址,不过这个并不好找(mysql网站是英文的),不过的他也是有yum仓库的

yum库地址

列举部分下载地址

https://repo.mysql.com/mysql57-community-release-el5-7.noarch.rpm
https://repo.mysql.com/mysql57-community-release-el5-8.noarch.rpm
https://repo.mysql.com/mysql57-community-release-el5.rpm
https://repo.mysql.com/mysql57-community-release-el6-10.noarch.rpm
https://repo.mysql.com/mysql57-community-release-el6-11.noarch.rpm
https://repo.mysql.com/mysql57-community-release-el6-7.noarch.rpm
https://repo.mysql.com/mysql57-community-release-el6-8.noarch.rpm
https://repo.mysql.com/mysql57-community-release-el6-9.noarch.rpm
https://repo.mysql.com/mysql57-community-release-el6.rpm
https://repo.mysql.com/mysql57-community-release-el7-10.noarch.rpm
https://repo.mysql.com/mysql57-community-release-el7-11.noarch.rpm
https://repo.mysql.com/mysql57-community-release-el7-7.noarch.rpm
https://repo.mysql.com/mysql57-community-release-el7-8.noarch.rpm
https://repo.mysql.com/mysql57-community-release-el7-9.noarch.rpm
https://repo.mysql.com/mysql57-community-release-el7.rpm

我们挑一个进行安装,我喜欢这个mysql57-community-release-el7-10.noarch.rpm

  1. 命令下载

    wget https://repo.mysql.com/mysql57-community-release-el7-10.noarch.rpm

  2. 安装yum库

    yum -y install mysql57-community-release-el7-10.noarch.rpm

  3. 安装mysql服务

    yum -y install mysql-community-server

  4. 启动mysql

    systemctl start mysqld.service

  5. 查看mysql运行状态

    systemctl status mysqld.service

  6. 查看随机密码

    grep "password" /var/log/mysqld.log

  7. 使用随机密码登录mysql

    mysql -uroot -p

  8. 修改数据库密码,不修改无法操作数据库,请注意密码默认是8位大小写字母加数字和特殊符号(是必须)

    ALTER USER 'root'@'localhost' IDENTIFIED BY 'new password';

  9. 你也可以查看一下密码策略

    show variables like '%password%';

至此mysql数据库安装完成,你可能还需要mysql远程访问、基本操作
update user set host = '%' where user = 'root';
flush privileges;
exit

MySQL教程 - 菜鸟教程


献丑展示一下自己写的博客静态页面


周末闲来无事,便想着自己写一个博客,虽然到最后也没用上

使用bootstrap4编写的博客静态页面,个人觉得还看得过去。

  1. 首页
    首页图片
  2. 看下大大的页脚吧
    首页页脚,自我感觉良好
  3. 文章详情页
    详情页
  4. 友情链接是真low
    友情链接

目前只写了这三个页面,还请各位前辈多多指教一下

后台界面用啥呢?

  1. 想用那个饿了么UI,但是不会用,放弃。
  2. LayUI用不惯,也放弃。
  3. 还有个叫啥adminlte的,看着挺好,就是用不着。
  4. 最后我想选择iview,也的确是用过它,选它。

后台全部是Restful风格接口,前后分离

技术:Spring Boot + MySql

安全嘛,就是它 Spring Security[1]: https://spring.io/projects/spring-security

博客持续更新,请您持续关注,后续会有大波福利哦!


使用docker快速部署elk、对接SpringBoot


1. 软件 & 工具介绍

ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是开源软件。新增了一个FileBeat,它是一个轻量级的日志收集处理工具(Agent),Filebeat占用资源少,适合于在各个服务器上搜集日志后传输给Logstash,官方也推荐此工具。

  • Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
  • Logstash 主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。
  • Kibana 也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。

Filebeat隶属于Beats。目前Beats包含四种工具:

  1. Packetbeat(搜集网络流量数据)
  2. Topbeat(搜集系统、进程和文件系统级别的 CPU 和内存使用情况等数据)
  3. Filebeat(搜集文件数据)
  4. Winlogbeat(搜集 Windows 事件日志数据)

2. 拉取ELK集成镜像

ELK镜像地址 : https://hub.docker.com/r/sebp/elk/tags

[root@localhost /]# docker pull sebp/elk:740

注:740为ELK版本号,这里的版本号指的是ELK集成镜像的版本号。

3. 启动ELK,命令不做解释

[root@localhost /]# echo "vm.max_map_count=262144" > /etc/sysctl.conf
[root@localhost /]# sysctl -p
[root@localhost /]# docker run -dit --name elk \
    -p 5601:5601 \
    -p 9200:9200 \
    -p 5044:5044 \
    -v /opt/elk-data:/var/lib/elasticsearch \
    -v /etc/localtime:/etc/localtime \
    sebp/elk:740

注:-p 指定映射端口,5601kibana访问,9200es端口,5044 logstash收集日志端口;-v 指定es数据目录。

4. 配置ELK(以下内容全部在容器内操作)

进入docker容器

[root@localhost /]# docker exec -it elk /bin/bash

/etc/logstash/        ## logstash 配置文件路径
/etc/elasticsearch/   ## es 配置文件路径
/var/log/             ## 日志路径
  • 配置Logstash
[root@localhost /]# vim /etc/logstash/conf.d/02-beats-input.conf

# 数据输入配置:port -> 端口号;codec -> 输入格式。这里以logback为例。
input {
  tcp {
    port => 5044
    codec=>json_lines
  }
}

# 数据输出配置:hosts -> 主机集合;index -> 你将要创建的索引名称。这里es为例。
output {
  elasticsearch {
    hosts => ["127.0.0.1:9200"]
    index => "%{[appName]}-%{+YYYY.MM.dd}"
  }
}

注:这个配置文件可以在/etc/logstash/conf.d/目录下创建,也可直接修改原有配置文件,看个人需求。

  • 配置kibana中文
[root@localhost /]# vim /opt/kibana/config/kibana.yml

注:打开文件后,在文件内追加 i18n.locale: "zh-CN" ,重启服务即可。

  • 常用服务操作命令
[root@localhost /]# service logstash start/restart/stop/status
[root@localhost /]# service elasticsearch start/restart/stop/status
[root@localhost /]# service kibana start/restart/stop/status

注:上面是各个服务 启动 / 重启 / 停止 / 状态,服务较大操作会比较缓慢,不要重复执行命令。

5. Kibana 简单使用

参照 Kibana 用户手册,中文文档,演示的Kibana为英文版本。

6. 相关参照文档

Centos Docker 安装 - 菜鸟教程

7. 集成到Spring Boot(LogBack)

<appender name="stash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <destination>xxx.xxx.xxx.xxx:xxx</destination>
        <includeCallerData>true</includeCallerData>
        <encoder class="net.logstash.logback.encoder.LogstashEncoder">
            <includeCallerData>true</includeCallerData>
            <!-- 根据应用名称创建索引-->
            <customFields>{"appName":"appName"}</customFields>
        </encoder>
    </appender>

针对angular分页插件tm.pagination二次触发问题三种解决方案


今天在开发个人博客的时候,需要对列表进行分页操作,因为整体使用的是AngularJs,所以分页插件也就选择了AngularJs pagination.js。可是在调试的时候发现的非常恶心的事情,在加载列表的时候接口被请求了两次,可要知道个人网站可经不起这成倍的请求。然后就开始了漫漫资料查询路,有资料说这两个变量需要同时监听

$scope.paginationConf.currentPage
$scope.paginationConf.itemsPerPage

否则就会加载两次。当场就象暴走,懒得我还不想换,没办法所以就有了下面的更改。

第一种解决方式,也是自己的解决方式

//第一次加载标志位
$scope.loadDataFirst = 1;
//分页控件配置 
$scope.paginationConf = {
    currentPage: 1,
    totalItems: 10,
    itemsPerPage: 10,
    perPageOptions: [10, 20, 30, 40, 50],
    onChange: function() {
        if($scope.loadDataFirst == 1) {
            $scope.reloadList(); //重新加载
            $scope.loadDataFirst = 2;
        }else if($scope.loadDataFirst == 2) {
            $scope.loadDataFirst = 0;
        }else if ($scope.loadDataFirst == 0) {
            $scope.reloadList(); //重新加载
        }
    }
};

说一下思路:既然它会加载两次,那么直观的来说,初始化变量

$scope.loadDataFirst = 1。

进入监听事件判断是否为1,如果是的话加载第一页列表,将

$scope.loadDataFirst = 2;

否则进入下一判断,判断如果为2,表示第一次列表已经加载,进入第二次加载,此时不加载数据,将

$scope.loadDataFirst = 0;

最后去判断是否为零,是的话,加载数据,加载参数分页插件会设置。

 
为什么会有最后一个判断

  1. 不是直接else,为了灵活性,将影响控制在最小范围
  2. 在切换每页数据的时候,还会监听这里,所以必须预留一个加载结束后,可以直接执行的列表刷新

第二种解决方式,网上找的大佬的,灵感也是来自于此,只是稍作改进

$scope.reload = true;
//分页控件配置 
$scope.paginationConf = {
    currentPage : 1,
    totalItems : 10,
    itemsPerPage : 10,
    perPageOptions : [ 10, 20, 30, 40, 50 ],
    onChange : function() {
        if(!$scope.reload) {
            return;
        }
        $scope.reloadList();//重新加载 这个方法会重复调用两次
        $scope.reload = false;
        setTimeout(function() {
            $scope.reload = true;
        }, 200);
    }
};

第三种解决方式,网上找的大佬的,据说资源消耗太大,不建议使用

$scope.conf = {
    // 总条数
    total : 1190,
    // 当前页
    currentPage : 1,
    // 一页展示多少条
    itemPageLimit : 1,
    // 是否显示一页选择多少条
    isSelectPage : false,
    // 是否显示快速跳转
    isLinkPage : false
}
// 监控你的页码 , 发生改变既请求
$scope.$watch('conf.currentPage + conf.itemPageLimit' , function(news){
    // 把你的http请求放到这里
    console.log($scope.conf.currentPage , $scope.conf.itemPageLimit);
});

技术之路永无止境,一直走就好