写了个简单的日志统计并发送邮件的脚本,使用到了atnodesmail 命令。同时托管给 crontab 定时调用执行。手动测试的时候运行的很是完美,只可惜,自动化后就各种坑:
  1. atnodes 无法使用!脚本抛出:Permission denied, please try again
  2. mail 中文乱码!

阅读全文......

下面是一些在Ubuntu14下安装Intellj IDEA后配置桌面快捷方式时一些坑,记录下。

JDK环境变量的问题

ubuntu中,我们将环境变量配置在etc/profile 或者当前登陆用户的.bashrc/.bash_profile文件中。因此其对应的使用范围也是不同的。 etc/profile 针对所有登录用户,因此为省事期间,可以将JDK配置在这里,一劳永逸,也就不会出现后续问题。

阅读全文......

SimpleRetryPolicy可以实现指定次数的重试。只需要设置 maxAttempts 参数即可。其默认重试次数是3次。该策略为创建RetryTemplate对象时默认的重试策略。具体使用如下:
SimpleRetryPolicy simpleRetryPolicy = new SimpleRetryPolicy();
simpleRetryPolicy.setMaxAttempts(4);

规定时间内连续重试

TimeoutRetryPolicy可以实现指定时间内的重试。超时时间通过参数 timeout 进行设置。默认超时时间1s。使用方式如下:
// all spend 1s
TimeoutRetryPolicy timeoutRetryPolicy = new TimeoutRetryPolicy(); 
timeoutRetryPolicy.setTimeout(2000L);

组合重试

CompositeRetryPolicy实现了重试策略的组合。通过其 policies 字段,可以为其添加多个重试策略。组合策略执行的过程中,所有策略只要有一个达成终止条件,那么该重试结束。我们可以用组合重试策略实现一些相对比较复杂的重试。比如我们要实现在指定时间1s内重试3次,每次重试间隔0.2秒,就可以使用以下方法:
CompositeRetryPolicy compositeRetryPolicy = new CompositeRetryPolicy();

SimpleRetryPolicy simpleRetryPolicy = new SimpleRetryPolicy();

TimeoutRetryPolicy timeoutRetryPolicy = new TimeoutRetryPolicy();

FixedBackOffPolicy fixedBackOffPolicy = new FixedBackOffPolicy();
fixedBackOffPolicy.setBackOffPeriod(200); // 每次重试间隔200ms

compositeRetryPolicy.setPolicies(new RetryPolicy[]{ 
		simpleRetryPolicy,
		timeoutRetryPolicy,
});

阅读全文......

原文地址:http://docs.spring.io/spring-batch/reference/html/retry.html

9.1 RetryTemplate 重试模板方法

Note The retry functionality was pulled out of Spring Batch as of 2.2.0. It is now part of a new library, Spring Retry.

阅读全文......

在PL/SQL块中使用select语句,可以将数据库数据检索到变量中。 当在PL/SQL块中使用select语句时,必须要带有into子句。语法如下:
SELECT select_list
	INTO {variable_name[,variable_name]... | record_name}
FROM table_name
WHERE condition;
其中,
  • select_list为指定查询列;
  • variable_name为接收指定查询列的标量变量名;
  • record_name为接收指定查询列的记录变量名;

1、使用标量变量接收数据

阅读全文......

语法:
IF condition THEN
	statements;
[ELSIF condition THEN
	statements;]
[ELSE
	statements;]
END IF;
示例:
DECLARE
	v_age NUMBER(3);
BEGIN
	SELECT age INTO v_age FROM user
	WHERE lower(name) = lower('&&name');
	IF v_age < 20 THEN
		UPDATE user SET age = v_age*2 WHERE lower(name) = lower('&&name');
	ELSEIF v_age < 40 THEN
	  UPDATE user SET age = v_age*3 WHERE lower(name) = lower('&&name');
	ELSE
		UPDATE user SET age = v_age/2 WHERE lower(name) = lower('&&name');
	END IF;
END;

CASE语句

语法:
  1. 阅读全文......

PL/SQL记录类似高级语句中的结构,用于处理单行多列数据。

自定义PL/SQL记录

语法:
TYPE type_name IS RECORD(
	filed_declaration[,filed_declaration]...
);

indetifier type_name;
示例:
DECALRE
	TYPE user_record_type IS RECORD(
		name user.name%TYPE,
		age user.age%TYPE
	);
	
	user_record user_type;
...

使用%ROWTYPE属性定义记录变量

阅读全文......

使用git进行项目版本管理时,在实际的操作中经常会有使用多个命令完成一个操作的情况出现,比如常见的代码远程更新操作可能就包含以下几个步骤:
  1. 保存当前工作区。git stash
  2. 拉取远程分支代码到本地。git pull --rebase
  3. 恢复当前工作区。git stash pop
那么有没有办法可以使用一个自定义命令一次完成上述三个命令的执行? 其实要完成上述命令组很简单,我们只要完成一个包含这几条命令的脚本文件即可。linux环境下我们可以直接自定一个shell脚本,比如下面的形式:
#!/bin/sh

git stash
git pull --rebase
git stash pop

阅读全文......

日常的开发中,经常会针对不同的需要将程序中的日志进行分类存储,但在运维或者异常处理需要查看时,又不得不针对多个日志文件进行联合处理。甚至有些时候需要进行日志关联查询。这种情况下,一般的 linux 命令,比如 grep 等就显得功能不够强大了。此时可以考虑使用 awk 进行多文件处理,借助其语法可以很方便的实现文件内容关联查询,完成类似 sql 式的关联查询。 首先,定义如下两个文件。一个是学生信息 s.log
sid tid name age address
1 1 张三 18 北京朝阳
2 1 李四 19 北京西城
3 2 马六 17 北京海淀
4 2 王五 17 北京昌平
5 3 唐七 18 北京西城
6 1 徐六 16 北京朝阳

阅读全文......

awk是一款强大的文本分析工具。awk 按行解析数据,并对其进行分割处理。下面是一些awk的入门语法与示例。 首先我们使用以下的文件片段演示。文件片段1内容如下:
The Lost Love
William Wordsworth
She dwelt among the untrodden ways beside the springs of dove.
A maid whom there were none to praise, and very few to love.
A violet by a mossy stone, half hidden from the eye!
Fair as a star, when only one is shining in the sky.
She lived unknown, and few could know, when lucy ceased to be.
But she is in her grave, and oh, the difference to me!

常用命令

1. 使用默认分割符(空格或者TAB)分割.

awk '{print NR,$1}' test.txt

阅读全文......