java学习

java学习

 

2020年4月21日

docker 笔记

下载的docker镜像默认存储路径是/var/lib/docker .具体的镜像文件就在containers文件夹中
docker save -o d:/docker/zen.tar easysoft/zentao:15.5
docker run -d -p 80:80  \
        -e ADMINER_USER="admin" -e ADMINER_PASSWD="qqzj126" -e MYSQL_ROOT_PASSWORD=qqzj126  \
        -e BIND_ADDRESS="false" \
        -v /opt/data/zbox/:/opt/zbox/ \
        -v /opt/mysqldata:/var/lib/mysql  \
        --name zentao-server \
        easysoft/zentao:15.5
  docker logs -f 

posted @ 2021-09-22 17:02 杨军威 阅读(79) | 评论 (0)编辑 收藏

后台运行jar包并输出日志

运行命令(注意路径)

java -jar /web/share-book.jar > /web/log.txt &
该命令的意思是:执行share-book.jar这个文件,并且输出到log.txt文件,&表示后台运行

解决更新项目带来的频繁重启操作,创建2个脚本

start.sh

#! /bin/bash
#注意:必须有&让其后台执行,否则没有pid生成   jar包路径为绝对路径
java -jar /web/share-book.jar > /web/log.txt &
 
# 将jar包启动对应的pid写入文件中,为停止时提供pid
echo $! > /web/pid.txt
stop.sh

#! /bin/bash
PID=$(cat /web/pid.txt)
kill -9 $PID

启动项目:./start.sh

停止项目:./stop.sh

posted @ 2021-06-01 13:56 杨军威 阅读(2876) | 评论 (0)编辑 收藏

HADOOP_HOME and hadoop.home.dir are unset

一.问题描述:windows本地调试Hadoop程序时报错
错误信息:
其原因是需要在windows本地搭建Hadoop环境,下载winutils文件,并将hadoop-2.8.4包内的bin文件替换,将下载文件中hadoop.dll放到C:\Windows\System32下
二.解决过程如下:
1.下载hadoop,去官网下载对应的hadoop版本,我在linux集群搭建的是hadoop-2.8.4,因此将hadoop-2.8.4下载到windows本地
https://www.jianshu.com/p/a65a95108620

posted @ 2021-04-19 09:45 杨军威 阅读(513) | 评论 (0)编辑 收藏

从git仓库中删除.idea文件夹

如果不配置.gitignore的文件,带push代码的时候就会把一写不必要的文件push到远程仓库,如.idea文件。如果不小心出现此文件在远程仓库可以通过一下步骤delete此文件:

1.配置.gitignore文件(新建/编辑)

echo '.idea' >> .gitignore

2.将.gitignore文件上传到远程仓库

git pull git add .gitignore git commit -m 'edit .gitignore' git push origin master

3.删除git的.idea文件

git rm --cached -r .idea

4.同步到远程仓库

git commit -m 'delete .idea' git push origin master

完成之后就可以发现git仓库中的.idea文件已经被删除,而且之后push代码也不会再把.idea文件上传。

PS:我在使用PyCharm编写python代码,一般是通过new -> .ignore file -> .gitignore file 自动生成.gitignore文件。
下面是我自己比较常用的.gitignore文件简短配置:

.project .settings/ .prefs .pydevproject .idea/ .idea .DS_Store .cache *.pyc *.html *.xlm

posted @ 2021-01-14 15:15 杨军威 阅读(171) | 评论 (0)编辑 收藏

GC overhead limit exceeded和java heap space

1、java heap space  一次申请太大的内存空间
2、GC overhead limit exceeded   创建太多的对象,gc收集不完

posted @ 2020-12-01 10:19 杨军威 阅读(268) | 评论 (0)编辑 收藏

缓存一致性和缓存雪崩

     摘要:   阅读全文

posted @ 2020-11-19 14:12 杨军威 阅读(70) | 评论 (0)编辑 收藏

linux Tomcat 开机启动配置

1、 vim /etc/rc.d/rc.local
2、添加内容
export JAVA_HOME=/usr/java/jdk1.8.0_111
/app/tomcat/bin/startup.sh start
3、
chmod 777 /etc/rc.d/rc.local

posted @ 2020-11-17 10:40 杨军威 阅读(116) | 评论 (0)编辑 收藏

java synchronized 锁对象

/**
* synchronized 放在普通方法上,内置锁就是当前类的实例
* @return
*/
public synchronized int getNext() {
return value ++;
}
/**
* 修饰静态方法,内置锁是当前的Class字节码对象
* Sequence.class
* @return
*/
public static synchronized int getPrevious() {
// return value --;
return 0;
}

posted @ 2020-10-30 16:37 杨军威 阅读(76) | 评论 (0)编辑 收藏

canal简单安装使用

1、数据库配置

首先使用canal需要修改数据库配置

[mysqld] 
log-bin=mysql-bin # 开启
binlog binlog-format=ROW # 选择 ROW 模式
server_id=1 # 配置 MySQL replaction 需要定义,不要和 canal 的 slaveId 重复

创建canal数据库用户

CREATE USER canal IDENTIFIED BY 'canal';  
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON
*.* TO 'canal'@'%';
FLUSH PRIVILEGES;

 

2、安装canal

下载:https://github.com/alibaba/canal/releases

解压(修改版本号):tar zxvf canal.deployer-1.1.4.tar.gz -C ./canal

配置开放服务器端口:11110、11111、11112

修改canal配置文件(这里设置了两个instance,即两个数据库):

vi canal/conf/canal.properties 
canal.destinations
= example1,example2

 配置instance:

cp -R canal/conf/example conf/example1
mv conf/example conf/example2

第一个数据库配置

vi canal/conf/example1/instance.properties
canal.instance.master.address
=32.1.2.140:3306

第二个数据库配置

vi canal/conf/example2/instance.properties
canal.instance.master.address
=32.1.2.140:3307

#如果需要新增一个instance,只需要修改canal.properties文件,并新增一个instance配置即可,无需重启canal。

运行:

sh canal/bin/startup.sh # 查看日志
cat canal/logs/canal/canal

 

3、Java使用样例

引入pom依赖,需要与安装的canal版本一致

复制代码
<dependencies>     <dependency>         <groupId>com.alibaba.otter</groupId>         <artifactId>canal.client</artifactId>         <version>1.1.4</version>     </dependency> </dependencies>
复制代码

示例代码(异步打印两个数据库的修改内容):

复制代码
package cn.spicybar.dblog;  import com.alibaba.otter.canal.client.CanalConnector; import com.alibaba.otter.canal.client.CanalConnectors; import com.alibaba.otter.canal.protocol.CanalEntry.Entry; import com.alibaba.otter.canal.protocol.CanalEntry.EntryType; import com.alibaba.otter.canal.protocol.CanalEntry.RowChange; import com.alibaba.otter.canal.protocol.Message;  import java.net.InetSocketAddress; import java.util.List;  public class CanalClient {      public static void main(String[] args) {         new Thread(() -> initConnector("example1")).start();         new Thread(() -> initConnector("example2")).start();     }      private static void initConnector(String destination) {         CanalConnector connector = CanalConnectors.newSingleConnector(new InetSocketAddress("32.1.0.237", 11111), destination, "", "");         try {             connector.connect();             connector.subscribe(".*\\..*");             connector.rollback();             while (true) {                 Message message = connector.getWithoutAck(1000);                 if (message.getId() != -1 && message.getEntries().size() > 0) {                     printEntry(message.getEntries());                 }                 connector.ack(message.getId());             }         } finally {             connector.disconnect();         }     }      private static void printEntry(List<Entry> entries) {         for (Entry entry : entries) {             if (entry.getEntryType() == EntryType.TRANSACTIONBEGIN || entry.getEntryType() == EntryType.TRANSACTIONEND) {                 continue;             }             try {                 RowChange rowChange = RowChange.parseFrom(entry.getStoreValue());                 System.out.println(rowChange.getSql());             } catch (Exception e) {                 throw new RuntimeException("ERROR ## parser error, data:" + entry.toString(), e);             }         }     }

posted @ 2020-08-31 10:55 杨军威 阅读(642) | 评论 (0)编辑 收藏

java 二分法查询数据

public int binarySearch(long value) {
int middle = 0;
int low = 0;
int pow = arr.length;

while(true) {
middle = (pow + low) / 2;
if(arr[middle] == value) {
return middle;
} else if(low > pow) {
return -1;
} else {
if(arr[middle] > value) {
pow = middle - 1;
} else {
low = middle + 1;
}
}
}
}

posted @ 2020-08-07 11:00 杨军威 阅读(124) | 评论 (0)编辑 收藏

redis windows安装

1.首先先把下载的压缩包解压到一个文件夹中
2.打开cmd指令窗口
3.输入你刚才解压的文件路径
4.然后输入redis-server redis.windows.conf 命令

接下来部署Redis为windows下的服务 首先关掉上一个窗口再打开一个新的cmd命令窗口

然后输入指令redis-server --service-install redis.windows.conf
随后,进入右击此电脑–管理–服务和应用程序–服务 启动服务
Redis常用的指令
卸载服务:redis-server --service-uninstall
开启服务:redis-server --service-start
停止服务:redis-server --service-stop
测试redis,通过cd到我们解压的目录,输入指令通过Set get指令查看是否成功

posted @ 2020-07-30 11:08 杨军威 阅读(393) | 评论 (0)编辑 收藏

修改了表结构,canal监控报错

检查配置文件/canal.deployer-1.1.1/conf/canal.properties
canal.instance.tsdb.spring.xml=classpath:spring/tsdb/h2-tsdb.xml
以及
# table meta tsdb info
canal.instance.tsdb.enable=true
canal.instance.tsdb.dir=${canal.file.data.dir:../conf}/${canal.instance.destination:}
canal.instance.tsdb.url=jdbc:h2:${canal.instance.tsdb.dir}/h2;CACHE_SIZE=1000;MODE=MYSQL;
canal.instance.tsdb.dbUsername=canal
canal.instance.tsdb.dbPassword=canal
检查 tsdb是否已经开启 
如果都已开启还是有这个问题 则需要清除canal对表结构的缓存
conf/example/h2.mv.db
问题2:找不到binlog日志文件
清空缓存
canal.deployer-1.1.1/conf/example/meta.dat

posted @ 2020-07-23 10:12 杨军威 阅读(1483) | 评论 (0)编辑 收藏

git 添加 gitignore

常规的windows操作

  • 根目录下创建gitignore.txt;
  • 编辑gitignore.txt,写下你的规则,例如加上node_modules/;
  • 打开命令行窗口,切换到根目录(可以直接在文件夹上面的地址栏输入cmd回车);
  • 执行命令ren gitignore.txt .gitignore。
在.gitignore中已经声明了忽略路径也是不起作用的,
这时候我们就应该先把本地缓存删除,然后再进行git的提交,这样就不会出现忽略的文件了。
  
解决方法: git清除本地缓存(改变成未track状态),然后再提交:
[root@kevin ~]# git rm -r --cached .
[root@kevin ~]# git add .
[root@kevin ~]# git commit -m 'update .gitignore'
[root@kevin ~]# git push -u origin master

posted @ 2020-05-18 16:55 杨军威 阅读(164) | 评论 (0)编辑 收藏

k8s 安装

安装k8s
systemctl disable firewalld
systemctl stop firewalld
yum update
yum install -y etcd kubernetes


vim /etc/kubernetes/apiserver
KUBE_ADMISSION_CONTROL改为下面的值
KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRange
 vi /etc/kubernetes/manifests/kube-apiserver.yaml
--service-node-port-range: 1-65535
systemctl start etcd
systemctl start docker
如果启动docker 失败,修改 /etc/sysconfig/selinux 
     把 selinux后面改成 disabled , 重启机器,reboot -n  再启动docker就好了
systemctl start kube-apiserver
systemctl start kube-controller-manager
systemctl start kube-scheduler
systemctl start kubelet
systemctl start kube-proxy
kubectl create -f mytomcat-rc.yaml

posted @ 2020-04-27 13:37 杨军威 阅读(129) | 评论 (0)编辑 收藏

jenkins 编译并生成docker镜像

clean package docker:build -DpushImage

posted @ 2020-04-21 12:15 杨军威 阅读(156) | 评论 (0)编辑 收藏

导航

统计

常用链接

留言簿

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜