内容
- 在clone的工程下增加私有仓库地址:
git remote add PrivateRepo http://xxx/repo/myproj.git
- 从私有仓库checkout分支到本地:
git checkout PrivateRepo/master
- 从远端仓库分支合并代码到私有仓库分支:
git merge master --allow-unrelated-histories
- push代码:
git push
观点仅代表自己,期待你的留言。
git remote add PrivateRepo http://xxx/repo/myproj.git
git checkout PrivateRepo/master
git merge master --allow-unrelated-histories
git push
观点仅代表自己,期待你的留言。
1 | wujianjun@wujianjun-work:~$ update-alternatives --install /usr/bin/java java /opt/jdk1.8.0_111/bin/java 300 |
profile文件在两处, /etc/profile
和~/.profile
1 | export JAVA_HOME=/opt/jdk1.8.0_111 |
观点仅代表自己,期待你的留言。
1 | <plugin> |
1 | wujianjun@wujianjun-work:~$ clean package -U -Dmaven.test.skip=true |
通过在Dockerfile文件所在目录执行以上命令成功后,则会自动在远程podman服务端创建镜像
1 | wujianjun@wujianjun-work:~$ podman images |
1 | [INFO] I/O exception (java.io.IOException) caught when processing request to {}->unix://localhost:80: No such file or directory |
根因分析:由于未正确配置DOCKER_HOST环境变量导致走了本机默认的连接地址
解决方案:在环境变量上配置以下地址
1 | DOCKER_HOST="tcp://host:2375" |
注意:
macOS添加环境变量时不同于其他unix或类unix系统(默认使用bash,因此在.bash_profile中设置环境变量);macOS的terminal默认使用的是zsh,在.zshrc中进行配置。
附插件官网地址: https://github.com/spotify/dockerfile-maven
观点仅代表自己,期待你的留言。
由于Podman与Docker一样,不支持在windows和macos上运行。故可以通过在linux系统下的podman开启REST API service。由windows与macos进行远程连接。
Linux下开启Podman REST API service
1 | wujianjun@wujianjun-work:~$ vi /lib/systemd/system/podman.service #增加‘tcp:0.0.0.0:2375 --time=0’开启tcp监听 |
接下来MacOS或Windows就可以通过tcp://host:2375进行连接了
MacOS下加入远程访问 wujianjun@wujianjun-work ~ % podman system connection add ubuntu tcp://10.84.102.X:2375
通过Ideaj下Docker Plug-in完成远程连接
在需要打包的模块pom.xml的同级目录创建 Dockerfile 文件,内容如下:
1 | FROM adoptopenjdk/openjdk8:x86_64-ubuntu-jre8u292-b10 |
在上一步的Docker远程连接下配置打包镜像
注意
:如果Dockerfile里出现错误(如Add的文件不存在时)会抛出Dockerfile: service-gateway-biz/Dockerfile': Can't retrieve image ID from build stream
的错误。
通过登录进Podman仓库来看,两边的镜像与运行容器实例是一致的。
观点仅代表自己,期待你的留言。
Nexus的仓库分三类
以下为我的配置:
docker(proxy)
docker(hosted)
docker(group)
配置权限
国内镜像站
1 | upstream nexus_docker_group { |
1 | wujianjun@wujianjun-work:~$ vi /etc/containers/registries.conf |
注意:insecure
设置为true,表示支持http访问
1 | wujianjun@wujianjun-work:~$ sudo systemctl daemon-reload |
接下来以redis镜像来演示效果
1 | wujianjun@wujianjun-work:~$ podman pull redis:latest |
此时再去私服上可以看到镜像已被镜像到私服上了
1 | wujianjun@wujianjun-work:~$ podman tag redis mirror.docker.com/library/myredis:1.0.0 |
1 | wujianjun@wujianjun-work:~$ podman pull myredis:1.0.0 |
未登录私服
1 | wujianjun@wujianjun-work:~$ podman pull redis:latest |
根因分析:由于未登录私服故返回403的错误,已登录的信息会保存在/run/user/1000/containers/auth.json
文件中
tag没有对应
1 | wujianjun@wujianjun-work:~$ podman pull myredis:v1.0.0 |
根因分析:由于tag为v1.0.0的myredis镜像没有找到
未开启http访问
1 | wujianjun@wujianjun-work:~$ podman pull myredis:1.0.0 |
根因分析:由于在注册私服地址时没有开启insecure = true
观点仅代表自己,期待你的留言。
Java 8 是一个非常成功的版本,这个版本新增的Stream
,配合同版本出现的 Lambda
,给我们操作集合(Collection)提供了极大的便利。
那么什么是Stream
?
Stream将要处理的元素集合看作一种流,在流的过程中,借助Stream API对流中的元素进行操作,比如:筛选、排序、聚合等。
Stream可以由数组或集合创建,对流的操作分为两种:
另外,Stream有几个特性:
1 | List<String> list = Arrays.asList("a", "b", "c"); |
1 | int[] array={1,3,5,6,8}; |
1 | Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5, 6); |
stream和parallelStream的简单区分
stream是顺序流,由主线程按顺序对流执行操作。
parallelStream是并行流,内部以多线程并行执行的方式对流进行操作,但前提是流中的数据处理没有顺序要求。例如筛选集合中的奇数,两者的处理不同之处:
如果流中的数据量足够大,并行流可以加快处速度。
除了直接创建并行流,还可以通过parallel()把顺序流转换成并行流:
1 | Optional<Integer> findFirst = list.stream().parallel().filter(x->x>6).findFirst(); |
在使用stream之前,先理解一个概念:Optional。
Optional类是一个可以为null的容器对象。如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象。 更详细说明请见:菜鸟教程Java 8 Optional类
案例使用的员工类
1 | List<Person> personList = new ArrayList<Person>(); |
Stream也是支持类似集合的遍历和匹配元素的,只是Stream中的元素是以Optional类型存在的。Stream的遍历、匹配非常简单。
1 | // import已省略,请自行添加,后面代码亦是 |
筛选,是按照一定的规则校验流中的元素,将符合条件的元素提取到新的流中的操作。
案例一:筛选出Integer集合中大于7的元素,并打印出来
1 | public class StreamTest { |
运行结果:
8 9
案例二: 筛选员工中工资高于8000的人,并形成新的集合。 形成新集合依赖collect(收集),后文有详细介绍。
1 | public class StreamTest { |
运行结果:
高于8000的员工姓名:[Tom, Anni, Owen]
max、min、count这些字眼你一定不陌生,没错,在mysql中我们常用它们进行数据统计。Java stream中也引入了这些概念和用法,极大地方便了我们对集合、数组的数据统计工作。
案例一:获取String集合中最长的元素。
1 | public class StreamTest { |
运行结果:
最长的字符串:weoujgsd
案例二:获取Integer集合中的最大值。
1 | public class StreamTest { |
运行结果:
自然排序的最大值:11
自定义排序的最大值:11
案例三:获取员工工资最高的人。
1 | public class StreamTest { |
运行结果:
员工工资最大值:9500
案例四:计算Integer集合中大于6的元素的个数。
1 | public class StreamTest { |
运行结果:
list中大于6的元素个数:4
映射,可以将一个流的元素按照一定的映射规则映射到另一个流中。分为map和flatMap:
案例一:英文字符串数组的元素全部改为大写。整数数组每个元素+3。
1 | public class StreamTest { |
运行结果:
每个元素大写:[ABCD, BCDD, DEFDE, FTR]
每个元素+3:[4, 6, 8, 10, 12, 14]
案例二:将员工的薪资全部增加1000
1 | public class StreamTest { |
运行结果:
一次改动前:Tom–>8900
一次改动后:Tom–>18900
二次改动前:Tom–>18900
二次改动后:Tom–>18900
案例三:将两个字符数组合并成一个新的字符数组。
1 | public class StreamTest { |
运行结果:
处理前的集合:[m-k-l-a, 1-3-5]
处理后的集合:[m, k, l, a, 1, 3, 5]
归约,也称缩减,顾名思义,是把一个流缩减成一个值,能实现对集合求和、求乘积和求最值操作。
案例一:求Integer集合的元素之和、乘积和最大值。
1 | public class StreamTest { |
运行结果:
list求和:29,29,29
list求积:2112
list求和:11,11
案例二:求所有员工的工资之和和最高工资。
1 | public class StreamTest { |
运行结果:
工资之和:49300,49300,49300
最高工资:9500,9500
collect,收集,可以说是内容最繁多、功能最丰富的部分了。从字面上去理解,就是把一个流收集起来,最终可以是收集成一个值也可以收集成一个新的集合。
collect主要依赖java.util.stream.Collectors类内置的静态方法。
因为流不存储数据,那么在流中的数据完成处理后,需要将流中的数据重新归集到新的集合里。toList、toSet和toMap比较常用,另外还有toCollection、toConcurrentMap等复杂一些的用法。
下面用一个案例演示toList、toSet和toMap:
1 | public class StreamTest { |
运行结果:
toList:[6, 4, 6, 6, 20]
toSet:[4, 20, 6]
toMap:{Tom=mutest.Person@5fd0d5ae, Anni=mutest.Person@2d98a335}
Collectors提供了一系列用于数据统计的静态方法:
案例:统计员工人数、平均工资、工资总额、最高工资。
1 | public class StreamTest { |
运行结果:
员工总数:3
员工平均工资:7900.0
员工工资总和:23700
员工工资所有统计:DoubleSummaryStatistics{count=3, sum=23700.000000,min=7000.000000, average=7900.000000, max=8900.000000}
案例:将员工按薪资是否高于8000分为两部分;将员工按性别和地区分组
1 | public class StreamTest { |
运行结果:
员工按薪资是否大于8000分组情况:{false=[mutest.Person@2d98a335, mutest.Person@16b98e56, mutest.Person@7ef20235], true=[mutest.Person@27d6c5e0, mutest.Person@4f3f5b24, mutest.Person@15aeb7ab]}
员工按性别分组情况:{female=[mutest.Person@16b98e56, mutest.Person@4f3f5b24, mutest.Person@7ef20235], male=[mutest.Person@27d6c5e0, mutest.Person@2d98a335, mutest.Person@15aeb7ab]}
员工按性别、地区:{female={New York=[mutest.Person@4f3f5b24, mutest.Person@7ef20235], Washington=[mutest.Person@16b98e56]}, male={New York=[mutest.Person@27d6c5e0, mutest.Person@15aeb7ab], Washington=[mutest.Person@2d98a335]}}
joining可以将stream中的元素用特定的连接符(没有的话,则直接连接)连接成一个字符串。
1 | public class StreamTest { |
运行结果:
所有员工的姓名:Tom,Jack,Lily
拼接后的字符串:A-B-C
Collectors类提供的reducing方法,相比于stream本身的reduce方法,增加了对自定义归约的支持。
1 | public class StreamTest { |
运行结果:
员工扣税薪资总和:8700
员工薪资总和:23700
sorted,中间操作。有两种排序:
案例:将员工按工资由高到低(工资一样则按年龄由大到小)排序
1 | public class StreamTest { |
运行结果:
按工资升序排序:[Lily, Tom, Sherry, Jack, Alisa]
按工资降序排序:[Sherry, Jack, Alisa, Tom, Lily]
先按工资再按年龄升序排序:[Lily, Tom, Sherry, Jack, Alisa]
先按工资再按年龄自定义降序排序:[Alisa, Jack, Sherry, Tom, Lily]
流也可以进行合并、去重、限制、跳过等操作。
1 | public class StreamTest { |
运行结果:
流合并:[a, b, c, d, e, f, g]
limit:[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
skip:[3, 5, 7, 9, 11]
转载自 https://blog.csdn.net/mu_wind/article/details/109516995
观点仅代表自己,期待你的留言。
1 | wujianjun@wujianjun-work:~$ cat /etc/os-release |
1 | wujianjun@wujianjun-work:~$ sudo mkdir -p /etc/apt/keyrings |
速度有点慢。。。
由于访问速度慢,可为默认的docker.io添加加速镜像(如果后续自己搭建私服,可将镜像地址设置为私服,则每次pull时会将镜像在私服上保存一份)。
详细配置如下:
1 | wujianjun@wujianjun-work:~$ vi /etc/containers/registries.conf 后面增加 |
1 | wujianjun@wujianjun-work:~$ sudo systemctl enable podman |
1 | wujianjun@wujianjun-work:~$ podman version |
1 | wujianjun@wujianjun-work:~$ sudo apt install python3-pip |
观点仅代表自己,期待你的留言。
通过外网做端口映射出ssh端口(22)之后,通过外网IP进行访问
利用vpn软件远程登录进内网进行内网linux的访问
Cockpit是一个Web端的系统管理工具。Cockpit使用系统上已经存在的API。可以在Web界面管理服务、容器、存储等等,还可以配置网络、检查日志都非常方便。
由于22端口映射过于敏感,可以在内网linux上安装cockpit后,然后再做外网映射(默认9090)映射完成后,则可通过浏览器使用linux登录用户进行登录访问。
CentOS
:
1 | wujianjun@wujianjun-work:~$ sudo yum install cockpit |
Ubuntu
:
1 | wujianjun@wujianjun-work:~$ sudo apt install cockpit |
默认端口为9090,如果遇上端口冲突可按以下方式进行修改
1 | wujianjun@wujianjun-work:~$ sudo vi /etc/systemd/system/sockets.target.wants/cockpit.socket #更改ListenStream后的端口号 |
观点仅代表自己,期待你的留言。
在pom.xml中加入
1 | <reporting> |
在pom.xml所在目录执行mvn compile site
生成报告
在target/site目录中则能查看到扫描报告
观点仅代表自己,期待你的留言。
日常活动(提升UV、拉新)
观点仅代表自己,期待你的留言。