jiazhizhongphp@163.com 发布的文章

grep和sed查询某时间段内的日志

1、grep '2021-03-31 13:[3-4][0-9]' error.log -C10

这是查询13:30-13:49之间的日志

2、sed -n '/2021-03-31 13:[3-4][0-9]/p' error.log

这是查询13:30-13:49之间的日志

3、sed -n '/2021-03-31 13:[3-4][0-9]/,/2021-03-31 1[4-5]:[3-4][0-9]/p' error.log

查多个时间段的日志

使用 dockerfile-maven-plugin 插件构建springboot应用并推送 Docker 镜像到官方仓库

使用 dockerfile-maven-plugin 插件构建springboot应用并推送 Docker 镜像到官方仓库

1、到docker官网下载docker环境并安装

2、在本地用idea新建一个springboot应用

3、打开 https://hub.docker.com/repositories 这个地址新建一个docker仓库在这里插入图片描述

在这里插入图片描述

4、配置springboot pom.xml 文件

<!-- 添加dockerfile依赖 -->
    <dependencies>
        <dependency>
            <groupId>com.spotify</groupId>
            <artifactId>dockerfile-maven-plugin</artifactId>
            <version>1.4.13</version>
        </dependency>
    </dependencies>
<!-- 添加dockerfile插件 -->
    <build>
        <plugins>
            .......
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>dockerfile-maven-plugin</artifactId>
                <version>1.4.13</version>
                <executions>
                    <execution>
                        <id>build-tag-push-version</id>
                        <phase>package</phase>
                        <goals>
                            <goal>build</goal>
                            <goal>tag</goal>
                            <goal>push</goal>
                        </goals>
                        <configuration>
                            <tag>${project.version}</tag>
                        </configuration>
                    </execution>
                    <execution>
                        <id>tag-push-latest</id>
                        <phase>package</phase>
                        <goals>
                            <goal>tag</goal>
                            <goal>push</goal>
                        </goals>
                        <configuration>
                            <tag>latest</tag>
                        </configuration>
                    </execution>
                </executions>
                <configuration>
                    <repository>刚才在docker官网新建的仓库名称(test/java-icloud)</repository>
                    <username>docker官网用户名</username>
                    <password>docker官网密码</password>
                    <buildArgs>
                        <JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
                    </buildArgs>
                </configuration>
            </plugin>
        </plugins>
    </build>

5、在项目根目录下添加Dockerfile文件

#设置镜像基础,jdk8
FROM java:8
#维护人员信息
MAINTAINER sss <sss@sss.com>
#设置镜像对外暴露端口
EXPOSE 19292
#将当前 target 目录下的 jar 放置在根目录下,命名为 app.jar,推荐使用绝对路径。
ADD target/test.jar /test.jar
#执行启动命令
ENTRYPOINT ["java", "-jar","/test.jar"]

6、 打包docker镜像并推送到docker官网仓库

mvn dockerfile:build
mvn dockerfile:push

在这里插入图片描述

7、发布成功后查看docker官网tab列表

请添加图片描述

RestTemplate用法及封装

RestTemplate是什么

  • 传统情况下在java代码里访问restful服务,一般使用Apache的HttpClient。不过此种方法使用起来太过繁琐。spring提供了一种简单便捷的模板类来进行操作,这就是RestTemplate。

封装使用


import com.example.demo.controllers.IndexController;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.*;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;

import java.io.*;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.zip.GZIPInputStream;

/**
 * http请求公共类
 */
public class ResponseResule {

    private static final Logger logger = LoggerFactory.getLogger(IndexController.class);

    /**
     * 请求接口公共方法
     * @param Methods
     * @param url
     * @param UrlParams
     * @return
     */
    public static String getResponse(String url, HttpMethod Methods, Map<String, String> UrlParams, Map<String, String> HeaderParams) throws IOException {
        RestTemplate client = new RestTemplate();
        HttpHeaders headers = new HttpHeaders();
        HttpMethod method = Methods;
        // 以表单的方式提交
        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
        // 设置用户提交的header头数据
        if (!HeaderParams.isEmpty()) {
            HeaderParams.forEach((k, v) -> {
                headers.set(k, v);
            });
        }
        // 将请求头部和参数合成一个请求
        MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
        if (Methods == HttpMethod.GET) {
            String _UrlParams = getUrlParamsByMap(UrlParams);
            url = url + "?" +_UrlParams;
        }else {
            if (!UrlParams.isEmpty()) {
                UrlParams.forEach((k,v) ->{
                    params.put(k, Collections.singletonList(v));
                });
            }
        }
//        logger.info("URL:{}", url);
        HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<>(params, headers);
        // 执行HTTP请求,将返回的结构使用spring ResponseEntity处理http响应
        ResponseEntity<byte[]> responseEntity = client.exchange(url, method, requestEntity, byte[].class);
        String contentEncoding = responseEntity.getHeaders().getFirst(HttpHeaders.CONTENT_ENCODING);
        // gzip编码
        if ("gzip".equals(contentEncoding)) {
            // gzip解压服务器的响应体
            byte[] data = unGZip(new ByteArrayInputStream(responseEntity.getBody()));
//            logger.info(new String(data, StandardCharsets.UTF_8));
            return new String(data);
        } else {
            // 其他编码暂时不做处理(如果需要处理其他编码请自行扩展)
            return new String(responseEntity.getBody());
        }
    }

    /**
     * Gzip解压缩
     * @param inputStream
     * @return
     * @throws IOException
     */
    public static byte[] unGZip(InputStream inputStream) throws IOException {
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        try (GZIPInputStream gzipInputStream = new GZIPInputStream(inputStream)) {
            byte[] buf = new byte[4096];
            int len = -1;
            while ((len = gzipInputStream.read(buf, 0, buf.length)) != -1) {
                byteArrayOutputStream.write(buf, 0, len);
            }
            return byteArrayOutputStream.toByteArray();
        } finally {
            byteArrayOutputStream.close();
        }
    }

    /**
   * 把数组所有元素排序,并按照“参数=参数值”的模式用“&”字符拼接成字符串
   * @param params 需要排序并参与字符拼接的参数组
   * @return 拼接后字符串
   * @throws UnsupportedEncodingException
   */
    public static String getUrlParamsByMap(Map<String, String> params) throws UnsupportedEncodingException {
        List<String> keys = new ArrayList<String>(params.keySet());
        Collections.sort(keys);
        String prestr = "";
        for (int i = 0; i < keys.size(); i++) {
            String key = keys.get(i);
            String value = params.get(key);
            value = URLEncoder.encode(value, "UTF-8");
            if (i == keys.size() - 1) {//拼接时,不包括最后一个&字符
                prestr = prestr + key + "=" + value;
            } else {
                prestr = prestr + key + "=" + value + "&";
            }
        }
        return prestr;
    }
}

使用方法

String url = "http://192.168.1.115:8621/test";
// 设置参数
String username = "admin";
Map<String, String> params = new HashMap<>();
params.put("username", username);
// 设置Header头数据
Map<String, String> HeaderParams = new HashMap<>();
// HttpMethod.POST / HttpMethod.GET
String result  = ResponseResule.getResponse(url, HttpMethod.POST, params, HeaderParams); 
System.out.println(result); // 返回json字符串数据

一、java SSM 框架搭建(maven)

一、SSM简介

SSM框架是spring MVC,spring和mabatis框架的整合,是标准的MVC模式,将整个系统划分为表现层,controller层,service层,DAO层四层。

spring MVC  :负责请求的转发和视图管理。

spring      :实现业务对象管理。

mybatis     :作为数据对象的持久化引擎。

二、安装maven构建工具(Mac && Linux平台)

1、进入maven官网下载maven免编译包(https://maven.apache.org/download.cgi)

apache-maven-3.6.2-bin.tar.gz

2、解压tar包并将其放到自己指定的位置中

3、进入maven项目目录中编辑conf/settings.xml文件

4、找到 localRepository 标签将其修改为本机下的任意指定目录(<localRepository>/Users/test/Applications/webapplib</localRepository>)

5、找到<mirror>标签,将原有的标签注释,修改成阿里云的下载镜像
    <mirror>
        <id>alimaven</id>
        <mirrorOf>central</mirrorOf>
        <name>aliyun maven</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    </mirror>
6、保存conf/settings.xml文件,到此maven就配置完成了

三、利用maven创建webapp项目

1、打开IntelliJ IDEA 编辑器,选择[Create New Project] 新建项目
maven_2.png

2、输入自己项目包名和项目名称
maven_3.png

3、修改默认的maven配置文件,选择自己安装的那个maven配置文件
maven_4.png

4、直接点击Finish
maven_5.png

6、点击完成后进入到编辑器配置pom.xml,添加自己需要的依赖包
maven_6.png

7、配置项目的源码目录和资源目录
maven_6.1.png

8、添加一个项目编译和打包目录
maven_7.png

9、添加tomcat服务配置(先下载tomcat, 然后在tomcat配置页面选择Application server修改tomcat服务器路径)
maven_8.png

10、配置tomcat服务端口
maven_9.png

11、选择之前添加好的项目编译和打包目录(注意Deployment选项下的Application context,将值修改为 / )
maven_10.png

12、选择热编启动选项(这个可以不修改,使用默认即可)
maven_11.png

13、运行项目后在浏览器输入http://localhost:[port]即可看到 hello world
maven_12.png

Linux计划任务命令crontab配置详解

1、任务命令配置说明

# .---------------- 分钟 (0 - 59)
# | .-------------- 小时 (0 - 23)
# | | .------------ 天 (1 - 31)
# | | | .---------- 月 (1 - 12) OR jan,feb,mar,apr ...
# | | | | .-------- 一周中的某一天(0-6)(星期日=0或7)或周日、周一、周二、周三、周四、周五、周六
# | | | | |
# * * * * * user-name command to be executed

2、任务命令例子-1

*/10 * * * * /usr/local/php/bin/php /usr/local/apache2/htdocs/oneindex/one.php cache:refresh  这个是每十分钟执行一次

3、任务命令例子-2

0 * * * * /usr/local/php/bin/php /usr/local/apache2/htdocs/oneindex/one.php token:refresh     每小时执行一次

4、编辑计划任务相关命令

crontab -l 输出当前的crontab任务命令列表。 
crontab -r 删除当前的crontab任务命令文件。 
crontab -e 使用VISUAL或者EDITOR环境变量所指的编辑器编辑当前的crontab文件。当结束编辑离开时,编辑后的文件将自动安装。