
4年前:计科小白 现在:计科老白
能力说明:
掌握封装、继承和多态设计Java类的方法,能够设计较复杂的Java类结构;能够使用泛型与集合的概念与方法,创建泛型类,使用ArrayList,TreeSet,TreeMap等对象掌握Java I/O原理从控制台读取和写入数据,能够使用BufferedReader,BufferedWriter文件创建输出、输入对象。
能力说明:
熟悉基本的Golang语法,能够理解程序的结构体,在命令行下调试和运行Golang程序。能使用Golang基本数据类型。
阿里云技能认证
详细说明问题EasyExcel 导出 Excel 文档,在开发机可以正常导出。上了测服之后,导出报空指针。首先怀疑自己,但是又看见是 awt 报的空指针,懵逼了。赶紧去 GitHub 看看有没有碰到相同问题的人。找到了一位和我情况一样的兄弟。原文如下相同的代码,不同的结果。java.lang.NullPointerException at sun.awt.FontConfiguration.getVersion() #157原来是因为 JDK 里面缺少字体软件,所以报错。开发机的 Docker 基础镜像是 FROM openjdk:8,而测试环境的是FROM openjdk:8-jdk-alpine ,而 alpine 是不带字体库。瞬间明白了,为什么上了测服会报错。 解决方案在参考了官方文档解决方案之后,我又按自己的需求做了尝试。1.换基础镜像这个最简单,但是我们其他服务在生产/测服都是 openjdk:8-jdk-alpine 。单独换镜像会出问题。为了 awt 就让镜像大很多也不太划算。2.使用内存导出EasyExcel.write(fileName, DemoData.class) // 核心这个配置 开始内存处理模式 .inMemory(Boolean.TRUE) .sheet("模板") .doWrite(data());加上 inMemory(Boolean.TRUE) 就可以开启内存处理模式。避开 awt 。不过官方提示了,1W 数据以内可以考虑,大了很容易OOM。遂只能放弃。3.构建镜像的时候安装字体库最后是采用安装字体库的方式解决的,只要在 Dockerfile 中加上RUN apk add ttf-dejavu就可以在镜像中安装字体库了
〇、前言我们旧的定时任务是使用 Spring 自带的 `TaskExecutor` 来实现的。这种实现方式在多实例的情况下,需要进行加锁处理。否则多个实例会都执行到了同一个定时任务。这次换成 XXL-Job 主要就想更简单的解决这个问题。一、配置1.Maven 配置<dependency> <groupId>com.xuxueli</groupId> <artifactId>xxl-job-core</artifactId> <version>2.2.0</version> </dependency>2.配置文件这里我使用的是 yaml 的配置xxl-job: adminAddresses: http://localhost:8100/job accessToken: your-token appName: your-app-name ip: port: 9090 address: logPath: /data/applogs/job/jobhandler logRetentionDays: 7adminAddresses: 毋庸置疑,这里就是你 XXL-Job 的地址accessToken:是一个简单的鉴权token,XXL-Job 在启动前加在配置文件中。同一个XXL-Job管理的所有的服务的Token都是一样的。appName: 你的服务名称,需要和 XXL-Job 中配置的一致port:这里的 port 可以不是你的服务端口,但是在 XXL-Job 中,不同服务的 port 不能重复。否则会报错。(详见3.1)logRetentionDays: 日志存储的时间3.XxlJobConfig最后你需要在配置中下新建一个 XxlJobConfig.java 文件,内容如下@Slf4j @Data @Configuration @ConfigurationProperties(prefix = "xxl-job") public class XxlJobConfig { private String accessToken; private String adminAddresses; private String appName; private String ip; private int port; private String logPath; private String address; private int logRetentionDays; @Bean public XxlJobSpringExecutor xxlJobExecutor() { log.info("xxl-job config init."); XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); xxlJobSpringExecutor.setAdminAddresses(adminAddresses); xxlJobSpringExecutor.setAppname(appName); xxlJobSpringExecutor.setAddress(address); xxlJobSpringExecutor.setIp(ip); xxlJobSpringExecutor.setPort(port); xxlJobSpringExecutor.setAccessToken(accessToken); xxlJobSpringExecutor.setLogPath(logPath); xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays); return xxlJobSpringExecutor; } }@ConfigurationProperties 从 yaml 配置中获取参数值@Configuration 这个和其他的配置类一样二、使用@Slf4j @Component public class TestJob{ @XxlJob("TestHandler") public ReturnT test(String param) throws Exception { log.info("定时任务触发"); XxlJobLogger.log("定时任务触发"); return ReturnT.SUCCESS; } }@XxlJob 注解 定义了定时任务的名称,需要和 XXL-Job 后台配置的任务名称一致String param XXL-Job 后台可以传入的参数,你可以传入一个 Json 串,然后在你的函数中做解析,以此达到你想要的效果。ReturnT XXL-Job 函数返回格式XxlJobLogger.log("") XXL-Job 自带的日志,日志会保存在 XXL-Job 中三、常见问题1.java.net.BindException: 地址已在使用Failed to start bean 'webServerStartStop'; nested exception is org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat server ... ... ... Caused by: java.net.BindException: 地址已在使用这是因为 XXL-Job 中有其他服务使用了和你 port 配置一样的端口导致。修改配置的 port 即可解决。
1. crumb data当我填入 Jenkins 的地址和账号密码点击Test Connection,提示我没有 crumb data看其他人的解决方法,通过下面的链接可以获取到 crumb datahttp://ip:port/crumbIssuer/api/xml?tree=crumb不过,在我填入这个的 crumb data 之后,问题并没有解决。2.配置 API Token这时候 issue 里找到一位老哥的解决方法链接:CSRF enabled -> Missing or bad crumb data (0.97 / IntelliJ 2016.1.3)点击 Jenkins 控制台右上角自己的账号名。进入到设置,在 API Token 中生成新的 Token。将生产的Token直接填入到 IDEA jenkins 配置的密码位置。不再填写 crumb data。此时再进行 Test Connection,显示 Success。
一、安装 IK 分词器1.分配伪终端我的 ElasticSearch 是使用 Docker 安装的,所以先给容器分配一个伪终端.之后就可以像登录服务器一样直接操作docker 中的内容了docker exec -it 容器ID /bin/bash2.使用 elasticsearch-plugin 安装插件cd plugins进入到 plugins 文件夹执行如下命令,7.12.0 需要修改成你的 es 版本号../bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.12.0/elasticsearch-analysis-ik-7.12.0.zip3.重启 elasticsearch 容器 docker restart 容器ID4.常见问题(1)java.lang.IllegalStateException执行elasticsearch-plugin install的时候,出现了 Failed installing和java.lang.IllegalStateException查看了一下,我的 plugins/ 目录下已经有一个名为 ik 的文件夹了.抱着试试的心态,删掉了这个名为 ik 的文件夹,重新执行../bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.12.0/elasticsearch-analysis-ik-7.12.0.zip安装成功二、ik 分词原理(占位,等有时间读源码再来补充)三、ik_smart 和 ik_max_wordGET _analyze?pretty { "analyzer": "ik_smart", "text": "不像我,只会心疼鸽鸽" }GET _analyze?pretty { "analyzer": "ik_max_word", "text": "不像我,只会心疼鸽鸽" }结论_analyzer构建索引时候的分词,索引的时候使用 max_wordsearch_analyzer搜索时的分词,查询的时候使用 smart
最近需要把 mysql 数据接入 logstash ,logstash 和 mysql 都是部署在 Docker 容器中 的,所以碰到了一些问题,在此记录一、file not readable(please check user add group permissions for the path)开始以为是权限的问题,修改权限依然无效。查询了一下,从ES官网找到了和我类似的情况答主也觉得这是一个权限问题。但是我 chmod 修改权限完全没有用。解决方法:最后意外发现是我复制的时候写错了 jar 包的名称,改回原来的名称,问题得到了解决。二、Are you sure you've included the correct jdbc driver in :jdbc_driver_library?解决方法:产生的原因是 jar 包版本和 mysql 不匹配,找到对应的版本就可以。三、Attempted to resurrect connection to dead ES instance, but got an error对于容器来说 127.0.0.1 就是容器本身,因此 logstash 当然无法访问到es解决方法:Docker 启动时通过 --net xxx 指定 network,通过容器名称加端口进行访问例如我 es Docker 容器名为 es01,通过 http://es01:9200 来访问 es四、docker: Error response from daemon: No command specified被docker export出来的镜像在启动的时候需要指定command,例如我启动上述nginx容器,需要指定CommandCommand可以通过下面命令查询到:docker ps -a --no-trunc没有的话可以使用默认的命令/bin/bashdocker create my-es:0.0.1 /bin/bash
2022年08月
2022年06月
2021年08月