程序开发 Java 作为客户端 grpc 使用 1. 引入依赖以及插件 依赖包如下: <properties> <grpc.version>1.69.0</grpc.version> <protoc.version>3.25.3</protoc.version> <grpc-java.version>1.69.0</grpc-java.version> <…
经验教程 Shell 脚本备份多个服务器目录数据 比较重要的数据最好还是经常备份,以免数据丢失后悔莫及。对于有快照的服务器,可以利用快照进行备份,对于没有快照的,可以利用 rsync 备份到本地。 以下脚本可以方便地进行备份,修改配置后定时运行即可: #!/bin/bash # 日志统一重定向 # 将所有输出重定向到 /tmp/backup.log,包括错误信息 exec >> /tmp/backup.log 2>&1 …
经验教程 解决 Docker 容器无法访问 ipv6 问题 今天打开 docker 启动的 next-terminal 发现无法使用 ipv6 地址 ssh 到家里的机器,但是在宿主机却是可以的,猜测应该是 docker 导致的问题。 由于docker默认没有开启IPv6支持,在容器内部输入命令 curl -6 ip.sb 就会报错。 curl -6 ip.sb curl: (7) Failed to connect to ip.sb port 80 af…
程序开发 Windows 本地启动 jar 包注册到 nacos 有时候需要命令行启动 jar 包,并将其注册到 nacos 上,可以使用如下命令: java -jar -Dspring.profiles.active=dev -Dspring.cloud.nacos.discovery.server-addr="xxx:8848" -Dfile.encoding=utf-8 xxx.jar 在 windows 上 -Dfile.encodi…
程序开发 Logback 使用和配置 一、简介 之前介绍过Java 的日志框架体系以及 slf4j 的整合,logback 则是具体实现,官网地址:http://logback.qos.ch/ Logback 共定义了8个级别的,除去OFF和ALL,可以说分为6个级别。优先级从高到低依次为:OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、 ALL。目前官方推荐的共四个级别:ERROR、WARN、INFO、D…
经验教程 脚本批量导出 docker 镜像 由于经常需要导出多个 docker 镜像,所以想着用脚本来解决一次导出很多镜像的问题。 按自己需要将镜像导出为 tar 包,命名方式为 镜像名-标签名.tar。如果不传参数则默认使用 docker images | grep service 查找并导出镜像,如果传递参数则使用 docker images | grep 传参命令。 #!/bin/bash # 确保 /tmp/images 目录存在 …
程序开发 SpringBean 初始化的执行各方法的顺序 Spring 容器在创建 SpringBean 的时候,会帮我们自动给属性赋值,还有一些初始化方法和一些增强的方法。 因此,了解这些方法的顺序很有必要,这样可以了解方法增强的时机,有助于更好地编写代码。 通过如下案例可以看见执行的先后顺序: MyBean.java @Data public class MyBean implements InitializingBean { private Str…
程序开发 源码学习 Spring 容器初始化流程 0. 简介 本文以 ClassPathXmlApplicationContext 源码学习 Spring 初始化流程,那么首先要了解它实现了哪些接口,可以直观地了解到它具备了哪些能力。 最重要的一点是它实现了 BeanFactory 接口,BeanFactory 其实就是常说的 ioc 容器,因为它实现了该接口,所以 ClassPathXmlApplicationContext 也是 ioc 容器…
程序开发 Java 中的各种类锁简单了解 提到并发编程,就不得不了解锁,因为使用锁的类型不一样,结果也就不一样。 1. 公平锁/非公平锁 公平锁:多个线程按照申请锁的顺序来获取锁。 非公平锁:不按照顺序获取锁,有可能后申请锁的线程先获取到锁。非公平锁有可能造成优先级反转或线程饥饿现象。 对于 ReentrantLock 而言,线程在放入等待队列阻塞之前会多次尝试获取锁,如下图所示: public ReentrantLock() { syn…
程序开发 Spring 注册组件的几种方式 向 Spring 容器中注册组件是最常见的操作,不过组件注册的方式有很多种,可以选择合适的方式进行注册。 1. @ComponentScan注解 这种方式会将指定包下配置了 @Component、@Controller、@Service、@Repository 的组件注册到容器中。 另外 @ComponentScan 注册组件可以指定和排除某些类或者用注解标记的某些类。 例如: // 这里的 @C…
经验教程 Docker 通过镜像查看 dockerfile 偶尔可能想要查看某个镜像的 dockerfile,但是 github 没可能没有对应的仓库,所以只能通过能拿到的镜像反推 dockerfile。 使用 whaler 可以做到这一点,使用方式如下: docker run -t –rm -v /var/run/docker.sock:/var/run/docker.sock:ro pegleg/whaler <<具体镜像>>…
程序开发 什么是 AbstractQueuedSynchronizer AbstractQueuedSynchronizer 今天在b站看了关于 AbstractQueuedSynchronizer 的合集,稍微了解了一下 AbstractQueuedSynchronizer 的工作原理,简单记录一下。 AbstractQueuedSynchronizer (AQS) 是 Java 中 java.util.concurrent 包的一部分,是一个基础框架类,用于实现锁…