解决no main manifest attribute, in app.jar(Docker)
解决no main manifest attribute, in app.jar
环境:SpringBoot2.6.13+java8
重点:pom.xml文件是IDEA自动配的
我在将一个SpringBoot程序打包成镜像部署到Docker容器上,然后执行run命令启动容器:
1docker run --rm springboot-test:1.0
springboot-test:1.0是我的镜像
出现报错:
1no main manifest attribute, in app.jar
我排查出来问题就在pom.xml文件中我画红线的这一句
改为下面这张图这样就好了
完整的pom.xml文件如下:
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273<?xml version="1.0" encoding="UTF-8&q ...
自定义构建Docker镜像
自定义构建Docker镜像
实际上所有常用的应用程序都有对应的镜像,我们只需要下载这些镜像然后就可以使用了,而不需要自己去手动安装,顶多需要进行一些特别的配置。但是我们程序员在遇到小众项目的时候,可能没有提供镜像,这时就要我们手动去安装,接着我们就来看看如何构建我们自己的Docker镜像。构建镜像有两种方式,一种是使用commit命令来完成,还有一种是使用Dockerfile来完成,我们先来看第一种。
这里我们就做一个简单的例子,比如我们现在想要在Ubuntu的base镜像中安装Java环境,并将其打包为新的镜像(这个新的镜像就是一个包含Java8环境的Ubuntu系统镜像)
第一种:commit命令(不推荐)
拉取Ubuntu镜像
1docker pull ubuntu
接着启动Ubuntu:
1docker run -it ubuntu
更新apt
1apt update
apt安装java环境
1apt install openjdk-8-jdk
安装完成后查看一下
1java -version
退出Ubuntu到Docker环境下
1exit
查看所有容器
1dock ...
Docker安装与镜像下载和删除(优雅)
Docker安装与镜像下载和删除(优雅)
环境:Ubuntu 22.04.3 LTS
Docker安装
首先安装一些工具:
1sudo apt-get install ca-certificates curl gnupg lsb-release
接着安装官方的GPG key:
123sudo mkdir -p /etc/apt/keyringscurl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
最后将Docker的库添加到apt资源列表中:
1echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources. ...
JWT详解
JWT详解
JWT官网
什么是JWT
JWT的全称是Json Web Token。是基于RFC 7519开放标准的,它定义了一种紧凑且独立的方式,用于在各方之间以 JSON 对象的形式安全地传输信息。此信息可以用作验证和相互信任,因为它是经过数字签名的。JWT 可以使用密钥(使用 HMAC 算法)或使用 RSA 或 ECDSA 的公钥/私钥对进行签名。
JWT由三部分组成:Header(标头),Payload(有效载荷),Signature(签名),中间用点分开,即
1Header.Payload.signature
我们可以使用jwt.io.Debugger去解码,验证和生成JWT令牌.
Header(标头)
Header通常由两部分组成:令牌的类型(JWT)和所使用的签名算法(如HMAC SHA256或RSA)。
1234{ "alg": "HS256", "typ": "JWT"}
然后,这个JSON被Base64Url编码,形成JWT的第一部分。
Payload(有效载荷 ...
RabbitMQ报错:unable to perform an operation on node 'rabbit@ubuntuserver'
RabbitMQ报错:unable to perform an operation on node ‘rabbit@ubuntuserver’
环境:VMware+Ubuntu
出问题的前置步骤:
安装Erlang
1sudo apt install erlang
安装RabbitMQ
1sudo apt install rabbitmq-server
开启RabbitMQ管理面板
1sudo rabbitmq-plugins enable rabbitmq_management
在查看RabbitMQ状态或为RabbitMQ添加用户时,即:
1sudo rabbitmqctl status
或
1sudo rabbitmqctl add_user 用户名 密码
出现Error:unable to perform an operation on node ‘rabbit@ubuntuserver’
解决方法:
首先,切换到root权限
为root设置密码
1sudo passwd root
设置密码
2. 切换到root权限
1su root
然后输入密码便 ...
Redis分布式锁
Redis分布式锁
分布式锁的由来
在传统单机部署的情况下,可以使用Java并发处理相关的API(如ReentrantLcok或synchronized)进行互斥控制。
但是在分布式系统后,由于分布式系统多线程、多进程并且分布在不同机器上,这将使原单机并发控制锁策略失效,为了解决这个问题就需要一种跨JVM的互斥机制来控制共享资源的访问,这就是分布式锁的由来。
当多个进程不在同一个系统中,就需要用分布式锁控制多个进程对资源的访问。最实际的应用场景应该是控制库存,比如说电商平台防止商品超卖这类场景。
分布式锁需要满足的条件
互斥性:任意时刻,只能有一个客户端获取锁,不能同时有两个客户端获取到锁。
安全性:锁只能被持有该锁的客户端删除,不能由其它客户端删除。
不会死锁:获取锁的客户端因为某些原因(如down机等)而未能释放锁,也能保证后续其他客户端能加锁。
容错:只要大部分的Redis节点正常运行,客户端就可以加锁和解锁。
Redis分布式锁实现一(setnx+expire)
实现命令如下
12seynx key valueexpire key time
setnx其实 ...