后端

Maven多模块中关于final static常量的一个坑

【背景】

多个独立的web项目合并到同一个Maven多模块项目中,目的是抽取公共模块,减少维护成本。
各个web项目的客户编码有不同的前缀,所以中各个web项目中都定义了一个常量,但是各个站点的值是不同的,中合并到一个Maven多模块项目后,抽取公共部分时由于中公共部分代码中需要用到这个常量,所以就随便将其中一个项目的该常量拿到了公共模块中,而各个站点的该常量保留,可是项目真正启动后,当使用该常量时发现其值一直是公共模块定义的,导致各个站点的客户编码使用了同样的前缀,从而出现了问题。

【结论】

如果公共模块中一个常量是各个站点都需要使用的,但是中各个单点的值又不一致,那么千万不要将该常量定义成final的。

【解决方法】

  • 去除final定义即可
  • 将该常量定义到各个项目的配置文件中

【举例】

Mysql递归查询

1
--创建表
 
DROP TABLE IF EXISTS `t_areainfo`;
CREATE TABLE `t_areainfo` (
 `id` int(11) NOT '0' AUTO_INCREMENT,
 `level` int(11) DEFAULT '0',
 `name` varchar(255) DEFAULT '0',
 `parentId` int(11) DEFAULT '0',
 `status` int(11) DEFAULT '0',
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=65 DEFAULT CHARSET=utf8;

Node.js常用模块和工具

工具:
nvm和n
cloud9

全局模块:
express
koa
meteor
hexo:静态博客框架,支持Markdown

项目模块:
Pomelo:网易开源基于 Node.js 的游戏服务端框架
bluebird/q/then/when/async/eventproxy:异步库, promise
coffee-script
colors:unix终端下显示颜色的库,利于调试和一些特殊场景
mkdirp:一次性建立目标文件夹,而不是mkdir…cd…mkdir…cd…mkdir这样的模式

Drools中常用但易混淆的概念

KIE/Drools/jBPM

官方的一句话解释了比较到位:
The process of researching an integration knowledge solution for Drools and jBPM has simply used the “droolsjbpm” group name. This name permeates GitHub accounts and Maven POMs. As scopes broadened and new projects were spun KIE, an acronym for Knowledge Is Everything, was chosen as the new group name. The KIE name is also used for the shared aspects of the system; such as the unified build, deploy and utilization.
kie

KieServices/KieRepository/KieProject/KieContainer/KieModule/KieBase/KieSession区别,部分转自Drools入门系列(六)——KIE之基础API详解

使用Maven模板创建项目

列出Maven模板列表(1000+),并选择模板创建项目

mvn archetype:generate

导出Maven模板列表到txt

mvn archetype:generate > templates.txt

导入Eclipse

mvn eclipse:eclipse

根据常用模板创建项目

maven-archetype-quickstart (Java Project)

1
$ mvn archetype:generate -DgroupId=com.yiibai.core -DartifactId=ProjectName -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

maven-archetype-webapp (Java Web Project)

1
$ mvn archetype:generate -DgroupId=com.yiibai.web -DartifactId=ProjectName -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false

Drools之使用注意点

1.DRL中不要使用单引号,对于字符串一定使用双引号.

2.如果集成了Spring,一定不能调用kieSession.dispose();

3.stateful和stateless区别

Drools之宏对象的常用方法

insert、update、retract

方法名称用法格式含义
getWorkingMemory()drools.getWorkingMemory()获取当前的WorkingMemory对象
halt()drools.halt()在当前规则执行完成后,不再执行其它未执行的规则。
getRule()drools.getRule()得到当前的规则对象
insert(new Object)drools.insert(new Object)向当前的WorkingMemory当中插入指定的对象,功能与宏函数insert相同。
update(new Object)drools.update(new Object)更新当前的WorkingMemory中指定的对象,功能与宏函数update相同。
update(FactHandle Object)drools.update(FactHandle Object)更新当前的WorkingMemory中指定的对象,功能与宏函数update相同。
retract(new Object)drools.retract(new Object)从当前的WorkingMemory中删除指定的对象,功能与宏函数retract相同。

Drools之LHS和RHS

LHS

约束连接

对于对象内部的多个约束的连接,可以采用“&&”(and)、“||”(or)和“,”(and)来实现,表面上看“,”与“&&”具有相同的含义,但是有一点需要注意,“,”与“&&”和“||” 不能混合使用

比较操作符

操作符包括:>、>=、<、<=、= =、!=、contains、not contains、memberof、not memberof、matches、not matches