后端开发项目中经常使用到的开发工具箱,可以作为日常开发的基础工具箱.包括基础实体,代码模板生成,excle操作工具,邮箱发送工具,mybatis代码生成器,redis操作封装,简单规则引擎,简单socket封装.基于hessian和restful的简单测试封装,模拟线程池,和常用工具类等
sc-utils: 常用工具类
-
com.sc.utils
-
beanutils bean的一些工具类,包括验证,转换,过滤,检查,复制,创建等
-
classcan 类扫描器,支持扫描和匹配目录下所有接口和类
-
collection 对于集合的一些操作包括转换,差并集,过滤排序,分页映射等基本操作
-
enctypt ASC加密解密,base64操作,url编解码,MD5加密验证,RSA加解密
-
exception 对于异常的一些封装,包括获取根异常,异常原因,异常信息
-
mapper 对于bean的转换和xml以及json和bean的互转进行封装
-
qrcode 生成二维码和一维码
-
reflect 反射的工具类封装,以及获取对于Class对象的封装,获取类路径,加载类,判断类类型
-
rest 对于restful的请求进行封装
-
spring 对于运行时的spring容器的一些常用操作,获取属性值,获取代理类等
-
utils
- commons 最基本常用的工具类,包括转json,判空,读取json, 费波纳茨,提取属性金额转换等等
- file 对于文件目录的一些处理封装,包括配置文件获取,文件压缩,文件属性文件目录拷贝创建等
- regex 封装了常用的对于正则的匹配和处理
- webutil 封装对于请求体和请求url的一些处理,包括验证码,获取路径返回http code转发,重定向等
- xml 对于XML一些处理,包括解析,转换,修改,映射,提取转换
其他金额的处理,JSON的处理,时间的处理,SSH命令的封装等.
-
web 结合spring容器自定义注解,封装对入参属性的提取和响应的json转换.
-
sc-base-api: 基本实体模块,包括统一请求响应分页相关以及业务请求头的规范
sc-code-generator: 基于velocity的代码模板生成代码,可以扩展生成各种模板的代码
sc-excle: 对于excle操作的一些封装
//1.读取excle
ExcelService.readExcel4TargetDispatch(new FileInputStream("c:\\aa.txt"));
//2.读取excle,并校验excle
ExcelService.readExcel4TargetDispatch(new FileInputStream("c:\\aa.txt"), new ExcleValidate() {
@Override
public Boolean validate(Sheet sheet) {
return true;
}
});
//3.写入excle
List<Object> title = new ArrayList<>();
title.add("标题ssssssssssssssssssssssssssssssssssssssssssssssssss1");
title.add("标题2");
title.add("标题2");
title.add("标题2");
title.add("标题2");
title.add("标题2");
title.add("标题2");
title.add("标题2");
title.add("标题ssssssssssssssssssssssssssssssssssssssssssssssssss2");
List<Object> body = new ArrayList<>();
body.add("身体1");
body.add(2);
body.add(null);
body.add(null);
body.add(null);
body.add(null);
body.add(3);
List<List<Object>> listList = new ArrayList<>();
listList.add(title);
listList.add(body);
FileOutputStream fileOutputStream = new FileOutputStream("F:\\a.xlsx");
ExcelService.writerExcel4TargetDispatch(fileOutputStream, listList);
sc-hessian: 基于hessian的RPC调用封装
sc-mail: 对email的使用封装
MailSenderInfo mailInfo = new MailSenderInfo();
mailInfo.setMailServerHost("smtp.163.com");
mailInfo.setMailServerPort("25");
mailInfo.setValidate(true);
mailInfo.setUserName("XXX@163.com");
mailInfo.setPassword("xxx");
mailInfo.setFromAddress("XXX@163.com");
mailInfo.setToAddress("XXX@qq.com");
mailInfo.setSubject("物流预警");
mailInfo.setContent("亲,这些都是超时的信息,请你查收");
mailInfo.setFileName("预警清单.wps");
mailInfo.setByt(new String("aaff").getBytes());
ComplexMailSender sms = new ComplexMailSender();
sms.sendAttachmentMail(mailInfo);
sc-message-queue: 对于rabbit和spring集成的简单封装
sc-mybatis-generator: 对mybatis生成插件进行处理,使生成的实体和mapper更符合使用要求,可以扩展定制.
sc-pay-channel: 支付宝支付简单封装测试,以后可能会集成多个支付渠道
sc-redis: 对于redis的简单封装
//1.redis的基本操作封装
RedisTemplate redisTemplate=new RedisTemplate(new JedisPool("localhost", 6379));
redisTemplate.get("aa");
redisTemplate.hGetAll("bb");
//2.基于redisson的锁
Redisson redisson = RedissonManager.getInstance().getRedissonClient();
RLock lock = redisson.getLock("1000");
lock.lock();
System.out.println("redisson = " + redisson);
lock.unlock();
redisson.shutdown();
sc-rule-engine: 简单的规则引擎封装
规则文件:
<rule-set name="feerule">
<rule id="step2" multipleTimes="false" exclusive="true" type="FEE_RULE">
<rule-eval>
<condition><![CDATA[salary>3500 && salary<=5000]]></condition>
<action><![CDATA[(salary-3500)*0.03]]></action>
</rule-eval>
</rule>
<rule id="step3" multipleTimes="false" exclusive="true" type="FEE_RULE">
<rule-eval>
<condition><![CDATA[salary>5000 && salary<=8000]]></condition>
<action><![CDATA[(salary-3500)*0.1-105]]></action>
</rule-eval>
</rule>
<rule id="step4" multipleTimes="false" exclusive="true" type="FEE_RULE">
<rule-eval>
<condition><![CDATA[salary>8000 && salary<=12500]]></condition>
<action><![CDATA[(salary-3500)*0.2-555]]></action>
</rule-eval>
</rule>
<rule id="step5" multipleTimes="false" exclusive="true" type="FEE_RULE">
<rule-eval>
<condition><![CDATA[salary>12500 && salary<=38500]]></condition>
<action><![CDATA[(salary-3500)*0.25-1005]]></action>
</rule-eval>
</rule>
<rule id="step6" multipleTimes="false" exclusive="true" type="FEE_RULE">
<rule-eval>
<condition><![CDATA[salary>38500 && salary<=58500]]></condition>
<action><![CDATA[(salary-3500)*0.3-2755]]></action>
</rule-eval>
</rule>
<rule id="step7" multipleTimes="false" exclusive="true" type="FEE_RULE">
<rule-eval>
<condition><![CDATA[salary>58500 && salary<=83500]]></condition>
<action><![CDATA[(salary-3500)*0.35-5505]]></action>
</rule-eval>
</rule>
<rule id="step8" multipleTimes="false" exclusive="true" type="FEE_RULE">
<rule-eval>
<condition><![CDATA[salary>83500]]></condition>
<action><![CDATA[(salary-3500)*0.45-13505]]></action>
</rule-eval>
</rule>
</rule-set>
规则示例:
String feerulexml = Class.class.getClass().getResource("/").getPath() + "feerule.xml";
XStream xstream = new XStream(new DomDriver());
xstream.autodetectAnnotations(true);
xstream.processAnnotations(new Class[]{RuleSet.class, Rule.class});
RuleEngine ruleEngine = new RuleEngineDefault();
ruleEngine.addRules((RuleSet) xstream.fromXML(FileUtils.readFileToString(new File(feerulexml), "utf-8")));
ruleEngine.addRuleExecutors(Arrays.<RuleExecutor>asList(new FeeRuleExecutor()));
RuleContext ruleContext = new RuleContextDefault();
ruleContext.put("salary", 5100);
ruleEngine.execute(ruleContext, "feerule");
System.out.println("-->" + ruleContext.get("totalSalary"));
sc-socket: 对于网络编程的封装,从TIO项目copy过来的
sc-test: 轻量级的dubbu,hessian,rabbitmq和restful的测试工具类集合
dubbo客户端
TestService testService = invokeDubbo("1.0.1", "207.246.117.90:2181", TestService.class);
System.out.println("-->" + testService.helloWorld("stest"));
hessian客户端
URLExec urlExec = URLExec.instance("8087", "/xxx");
ComHessianUtils.postHessian(urlExec, requestObj, IService.class);
restful客户端
URLExec urlExec = URLExec.instance("8082", "/xxx/xxx/");
ComRestUtils.postUrl(urlExec, "{}");
rabbitmq客户端
RabbitSendUtils rabbitSendUtils = RabbitSendUtils.init("10.1.41.137", "56721", "admin", "xxx", "test.vhost.A");
Map<String, Object> map = new JSONObject();
map.put("bizLine", "1");
map.put("orderId", "170194");
map.put("random", UUID.randomUUID().toString().replace("-", ""));
rabbitSendUtils.send("test.exchange.topic", "topic.order", map);
sc-thread-pool: 模拟线程池处理
有部分代码参考网上的实现,便于统一更新了包名