分类
Windows

批处理文件中的 %~d0

批处理,%~d0 cd %~dp0 代表什么意思?

~dp0 “d”为Drive的缩写,即为驱动器,磁盘、“p”为Path缩写,即为路径,目录。语法选项:

~0         - 删除任何引号("),扩充 %0
%~f0        - 将 %0 扩充到一个完全合格的路径名(“f”是file,即文件)
%~d0        - 仅将 %0 扩充到一个驱动器号
%~p0        - 仅将 %0 扩充到一个路径
%~n0        - 仅将 %0 扩充到一个文件名(“n”是name 文件名)
%~x0        - 仅将 %0 扩充到一个文件扩展名
%~s0        - 扩充的路径只含有短名(“s”为Short,短的)
%~a0        - 将 %0 扩充到文件的文件属性(“a”为attribute,即属性)
%~t0        - 将 %0 扩充到文件的日期/时间(“t”time)
%~z0        - 将 %0 扩充到文件的大小(Size 大小)
%~PATH:0    −查找列在路径环境变量的目录,并将PATH:0 - 查找列在路径环境变量的目录,并将 %I 扩充
              到找到的第一个驱动器号和路径。
%~ftza0     - 将 %0 扩充到类似输出线路的 DIR

%0为当前批处理文件,如果0换成1为第一个文件,2为第2个

分类
Windows 笔记

Windows批处理命令之Start

在Windows下执行批处理脚本会打开一个黑乎乎的控制台窗口,任务未执行完成时窗口不会关闭。

编写一个打开软件的脚本,软件未退出时,启动bat脚本的窗口不会被关闭。使用start命令启动,可以实现命令窗口自动关闭。start命令说明:

bat脚本如下:

@echo off

set CURRENT_DIR=%cd%

start "google-chrome" "%CURRENT_DIR%\chrome" --user-data-dir="%CURRENT_DIR%\UserData\qizheng@myid01.com"

保存为Chrome.bat

windows执行bat脚本,都会打开命令窗口,即使自动退出,也会有个黑框一闪而过。使用vbs脚本执行脚本可以隐藏控制台。如下:

set ws=WScript.CreateObject("WScript.Shell") 
ws.Run ".\Chrome.bat",0

保存为vbs,双击可执行。

在这里应该看得出来了,我写的脚本是打开Chrome浏览器,并指定用户数据目录。

分类
Java

常用Maven插件配置

自己项目中常用的编译打包插件配置,MARK一下,后续新项目直接copy就好。

项目编译

<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-compiler-plugin</artifactId>
	<configuration>
		<source>1.8</source>
		<target>1.8</target>
		<encoding>UTF-8</encoding>
	</configuration>
</plugin>

项目打包JAR

<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-jar-plugin</artifactId>
	<configuration>
		<!--不打包资源文件-->
		<excludes>
			<exclude>*.**</exclude>
			<exclude>*/*.xml</exclude>
		</excludes>
		<archive>
			<manifest>
				<addClasspath>true</addClasspath>
				<!--MANIFEST.MF 中 Class-Path 加入前缀-->
				<classpathPrefix>lib/</classpathPrefix>
				<!--jar包不包含唯一版本标识-->
				<useUniqueVersions>false</useUniqueVersions>
				<!--指定入口类-->
				<mainClass>cn.payadd.merchant2.MerchantApplication</mainClass>
			</manifest>
			<manifestEntries>
				<!--MANIFEST.MF 中 Class-Path 加入资源文件目录-->
				<Class-Path>./resources/</Class-Path>
			</manifestEntries>
		</archive>
		<outputDirectory>${project.build.directory}</outputDirectory>
	</configuration>
</plugin>
分类
Java

Spring启动Could not resolve placeholder

除去properties文件路径错误、拼写错误外,出现”Could not resolve placeholder”很有可能是使用了多个PropertyPlaceholderConfigurer或者多个<context:property-placeholder>的原因。 一定要记住,不管是在一个Spring文件还是在多个Spring文件被统一load的情况下,直接写:

<context:property-placeholder location=""/>
<context:property-placeholder location=""/>

是错误的!

分类
Java

Mybatis Generator 不识别主键

错误场景描述:

在使用mybatis-Generator生成xml时,不生成Example,在<table>标签中添加enableCountByExample=”false”
enableDeleteByExample=”false”
enableSelectByExample=”false”
enableUpdateByExample=”false”

在生成xml文件时,应该有insert、insertSelective、selectByPrimaryKey、updateByPrimaryKeySelective、updateByPrimaryKey、deleteByPrimaryKey等方法,但是在生成的xml文件中只有insert、insertSelective。后来看xml文件中的resultMap节点里主键id使用的是result标签,而不是id标签。可能是主键没有被识别。

分类
Java

Quartz定时任务Cron表达式

cron表达式用于配置cronTrigger的实例。cron表达式实际上是由七个子表达式组成。这些表达式之间用空格分隔。

1.Seconds (秒)
2.Minutes(分)
3.Hours(小时)
4.Day-of-Month  (天)
5.Month(月)
6.Day-of-Week (周)
7.Year(年)

例:”0 0 12 ? * WED” 意思是:每个星期三的中午12点执行。

个别子表达式可以包含范围或者列表。例如:上面例子中的WED可以换成”MON-FRI”,”MON,WED,FRI”,甚至”MON-WED,SAT”。

子表达式范围:

1.Seconds (0~59)
2.Minutes (0~59)
3.Hours (0~23)
4.Day-of-Month (1~31,但是要注意有些月份没有31天)
5.Month (0~11,或者”JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV,DEC”)
6.Day-of-Week (1~7,1=SUN 或者”SUN, MON, TUE, WED, THU, FRI, SAT”)
7.Year (1970~2099)

分类
容器

GitLab迁移

写该文时,已经迁移成功,中途出现的问题没有截图,就用文字描述吧。

把Docker安装部署的GitLab,迁移到另外一台机器。

第一次的做法是把数据目录打包,然后放到新机器上,运行失败。提示没有权限。

找到一个相似的问题,https://www.oschina.net/question/2607587_2274426,评论中给出的方法,运行:

docker exec -it gitlab update-permissions  
docker restart gitlab

虽然能启动成功,但是登录报错,代码503。

执行 gitlab-ctl reconfigure ,依然不能登录。

于是打算使用GitLab自带的备份恢复。

分类
容器

Docker拉取镜象失败

安装docker版nexus,拉取镜像失败:

pull access denied for snoatype/nexus3, repository does not exist or may require ‘docker login’

使用 docker login 登录 docker账号,依然不能拉取镜像。但是拉取 gitlab、nextcloud、wordpress 都正常。

网上的方法都是登录 docker 账号,估计这些人提供方法前自己没试过的。进入 hub.docker.com ,登录docker账号(如果没有则创建一个),搜索 nexus,找到sonatype/nexus3,标星收藏。

再用docker获取镜像,成功!

分类
Web

文件共享之WebDAV

做一个文件服务器,常用的共享方式有:NFS、Samba、FTP、SFTP、WebDAV。对比这几种方式:

NFS:Linux默认文件共享协议,适合在Linux系统,跨平台使用很不方便。排除。

Samba:Windows文件共享协议,跨平台好,在Windows资源管理器内就能打开使用。但是要用在公网上不方便。排除。

FTP:协议不安全,有主动模式和被动模式,在公网上穿透也不方便。排除。

SFTP:基于SSH,一般用它做共享文件服务器很少,需要安装额外工具软件,性能不如Samba和NFS。排除。

WebDAV:一种基于 HTTP 1.1协议的通信协议。它扩展了HTTP 1.1,在GET、POST、HEAD等几个HTTP标准方法以外添加了一些新的方法,使应用程序可对Web Server直接读写,并支持写文件锁定(Locking)及解锁(Unlock),还可以支持文件的版本控制。

综上,WebDAV是最好适合我的选择。主流Nginx、Apache等Web服务器都支持WebDAV。因为Web服务器本来就在公网上,基于WebDAV共享,用户可以用浏览器或专用工具,通过80端口直接访问。

分类
Linux

Ubuntu禁用Systemd解析

主机安装Ubuntu 18.04,在hosts中配置了开发时使用的域名。想把主机做为DNS服务器,供路由器使用,这样网内的机器不需要指定DNS就能解析了。

在Linux以前的版本,只需要安装bind或dnsmasq,把监听地址改为网卡地址,网内的机器就能使用。

DNS服务软件我使用的是dnsmasq,使用apt源安装,启动服务失败。查看原因:

原来53端口被占用。

Ubuntu 18.04变化还是挺多的,比如设置hostname,不能再简单修改/etc/hostname。Ubuntu 18.04桌面版,新增了一个systemd-resolved服务,禁用它就好。