nfs共享存储
服务机ip: 192.168.128.128
下载nfs软件包
1yum -y install nfs-utils rpcbind
设置目录 vim /etc/exports
1234567#rw 允许读写 ro 只读#sync 同时将数据写入内存和硬盘 async 先写入内存再写入硬盘#root_squash 当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户(不常用)#no_root_squash 当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员(不常用)#all_squash 无论NFS客户端使用什么账户访问,均映射为NFS服务器的匿名用户(常用)#no_all_squash 无论NFS客户端使用什么账户访问,先与本机匹配,匹配不到则为匿名用户/tmp/share 192.168.128.129/24(rw,async,no_root_squash)
创建服务机地文件夹,并设置读写权限
12mkdir sharechmod 777 /share
关闭防火墙
1systemctl stop fir ...
java各种锁
悲观锁、乐观锁
悲观锁
假设在修改数据时,同时有另外的线程修改数据
处理之前加锁,数据操作完成后释放锁
乐观锁
假设在修改数据时,不会有其它的线程修改数据
处理不加锁,同步数据时若数据已经被另外线程修改,则做失败或者重试处理
自旋锁
若阻塞线程唤醒线程的开销大,可将线程进行循环等待
实际是牺牲CPU(处理器时间),换取线程切换的开销
问题:若一直无法抢占到运行条件,会一直自旋;解决方法控制自旋次数
公平锁、非公平锁
公平锁:线程按照申请锁的顺序存在队列中,只有队列第一个线程能获得锁,其它线程都是阻塞
非公平锁:线程也是按照申请锁的顺序存在队列中,但是刚来的线程若碰到正好有锁可用则能直接插列获得锁,正所谓来得早不如来得巧
公平锁:缺点是阻塞和唤醒线程开销无法避免,非公平锁对与来得巧的线程则无该开销
非公平锁:缺点是有些线程可能一直获取不到锁,或者等待到锁的时间很长
可重入锁、不可重入锁
可重入锁:同一个线程在外层方法获取锁的时候,调用该线程的内层方法会自动获取锁,避免出现死锁情况,在分布式锁中是会用一个字段来记录加锁的层数
不可重入锁:与可重入锁相反,同一个线程在外 ...
windows开机启动jar
使用场景:
将jar程序设置为开机启动(注:windows上)
方法一:vbs文件方式原理将文件放入windows启动文件夹,开机启动时会执行vbs文件
创建bat文件将 java -jar xxxx.jar 执行命令放入bat文件中
123@echo offstart java -jar xxxx.jarpause
创建vbs文件12set ws=WScript.CreateObject("WScript.Shell") ws.Run "C:\xxxx.bat /start",0
创建vbs快捷方式创建该vbs文件的快捷方式放入windows的启动文件夹内,不同系统文件夹路径不同
如:win10专业版 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp
若找不到则直接资源管理器打开该地址 或者 必找到位置方式 win+R 键入 shell:startup回车
缺点:若给直接使用的人使用,不便于部署
方法二:windows服务方式失败案例 sc通过windows自带的s ...
Websocket
一次握手,双向数据传输
介绍:特点是一次握手,双向数据传输
出现原因:http协议的生命周期是 客户端发送请求,服务端接收响应,缺点是服务端无法在客户端未发送请求的情况下主动发送信息,websocket就是在这种情况下产生的,在建立连接后实现双通道传输。
springboot整合websocket
依赖1234567891011121314151617181920212223<!-- 若启动报错排除tomcat依赖试试 --><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifact ...
依赖注入三级缓存
依赖注入的方式
属性注入
12@Autowiredprivate DemoService demoService;
注:注入对象不能通过final修饰,无法发现空指针
setter注入
123456private DemoService demoService; @Autowiredpublic void setDemoService(DemoService demoService) { this.demoService = demoService;}
构造器注入
12345678public class DemoController { private final DemoService demoService; public SysUserController(DemoService demoService) { this.demoService = demoService; }}
注:存在循环依赖问题
Lombox 的 @RequiredArgsConstruct ...
maven
用途:用于项目构建 jar包下载管理
maven配置
setting文件 地址 maven\apache-maven-3.6.3\conf\settings.xml
常用配置解释:
本地仓库地址
1<localRepository>D:\maven</localRepository>
访问仓库的用户密码
12345<server> <id>ID</id> <username>admin</username> <password>1234</password></server>
镜像仓库地址 作用类似于代理,若中央远程仓库在国外,可以使用此处配置国内的镜像仓库
123456<mirror> <id>nexus-aliyun</id> <mirrorOf>central</mirrorOf> <name>Nexus aliyun</name> ...
nacos配置
Nacos是继Eureka后的新的配置注册服务中心
分为两部分 discovery(注册中心) 和 config(配置中心)
nacos网上下载nacos,windows版或者linux版,不同版本有不同的启动方式
默认端口为8848,初始用户名和密码为 nacos/nacos
启动后使用 localhost:8848/nacos登录页面,能显示则启动成功
discovery(注册中心)与Eureka一样,配置了discovery的注册发现的会在nacos中显示,并且可由nacos控制
配置依赖
123456789101112<!-- web启动依赖 --><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>2.1.6.RELEASE</version></depe ...
格式转换
map转json1JSONObject json = new JSONObject(map);
json转map1HashMap map1 = JSONObject.parseObject(jsonstr, HashMap.class);
时间格式转换12Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(downloadAcousticTxtVm.getTestTime());downloadAcousticTxtVm.setTestTime(new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(date));
字符串补位1String.format("%03d",1)
效果:1—>001 0是补位的符号,3是补足多少位,d是整形 了解
Chis主题添加Valine评论
leanCloud 创建应用 获取 appid和appkey
_config.yml文件添加
1234567891011121314151617181920212223# Valine.# You can get your appid and appkey from https://leancloud.cn# more info please open https://valine.js.orgvaline: enable: true appid: ************************************ appkey: ***************************** notify: true # 评论回复提醒 verify: true # 验证码 placeholder: Please leave your footprints.... enableQQ: true avatar: wavatar tag: master: 博主 friends: 小伙伴 eachother: 访客 emailSet: master: [&quo ...
Http请求
场景:后台Http请求其它接口获取token
GET请求123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869private String HttpGetUrlJump(String getUrl, Map<String, Object> HeaderParams, Map<String, Object> params) { String result = ""; try { //拼url if (params != null) { Iterator<String> it = params.keySet().iterator(); StringBuffer sb = null; while (it ...