jfial-dreampie是一个基于jfial的开源框架库,主要集成或调优功能如下:
1.缓存维护更细粒度
@CacheNameRemove(ame = AppCostats.DEFAULT_CACHENAME)@Iherited@Retetio(RetetioPolicy.RUNTIME)@Target({ElemetType.TYPE, ElemetType.METHOD})public @iterface CacheNameRemove { Strig ame(); Strig[] keys() default {};}//根据key值来移除基于某个特定方法的缓存,而不是移除整个cotroller下的缓存Strig cotrollerKey = ai.getCotrollerKey(); if (!ValidateUtils.me().isNullOrEmpty(removeCacheName)) { Strig keyPrefix = ull; if (!ValidateUtils.me().isNullOrEmpty(removeCacheKeys)) { for (Strig removeKey : removeCacheKeys) { keyPrefix = cotrollerKey + SLASH + removeKey; removeByCacheKey(removeCacheName, keyPrefix); } } else { keyPrefix = cotrollerKey; removeByCacheKey(removeCacheName, keyPrefix); } }2.增加Slf4jLogger实现,然日志配置能基于任何Slf4j下的log实现,如logback
public class Slf4jLogFactory implemets ILoggerFactory3.基础model实现,实现基础的常用的部分功能用于复用
public List<M> fidAll() { retur fid(getSelectSql() + getExceptSelectSql()); } public List<M> fidBy(Strig where, Object... paras) { retur fid(getSelectSql() + getExceptSelectSql() + getWhere(where), paras); } public List<M> fidTopBy(it topNumber, Strig where, Object... paras) { retur pagiate(1, topNumber, getSelectSql(), getExceptSelectSql() + getWhere(where), paras).getList(); } public M fidFirstBy(Strig where, Object... paras) { retur fidFirst(getSelectSql() + getExceptSelectSql() + getWhere(where), paras); } public Page<M> pagiateAll(it pageNumber, it pageSize) { retur pagiate(pageNumber, pageSize, getSelectSql(), getExceptSelectSql()); } public Page<M> pagiateBy(it pageNumber, it pageSize, Strig where, Object... paras) { retur pagiate(pageNumber, pageSize, getSelectSql(), getExceptSelectSql() + getWhere(where), paras); } public boolea updateAll(Strig set, Object... paras) { retur Db.update(getUpdateSql() + getSet(set), paras) > 0; } public boolea updateBy(Strig set, Strig where, Object... paras) { retur Db.update(getUpdateSql() + getSet(set) + getWhere(where), paras) > 0; } public boolea deleteAll() { retur Db.update(getDeleteSql()) > 0; } public boolea deleteBy(Strig where, Object... paras) { retur Db.update(getDeleteSql() + getWhere(where), paras) > 0; } public boolea dropAll() { retur Db.update(getDropSql()) > 0; } public boolea dropBy(Strig where, Object... paras) { retur Db.update(getDropSql() + getWhere(where), paras) > 0; }4.akka异步执行框架
public class AkkaPlugi implemets IPlugiAkka.system().scheduler().scheduleOce(Duratio.create(1000, TimeUit.MILLISECONDS), ew Ruable() { @Override public void ru() { //do Somethig } }, Akka.system().dispatcher());5.atmosphere chatdemo
@MaagedService(path = "/im/{room: [a-zA-Z][a-zA-Z_0-9]*}")public class ChatRoom {}6.coffeescript compilerplugi,编译coffeescript代码,并监控文件改动重新编译
public class CoffeeScriptPlugi implemets IPlugi {}7.Flyway数据库自动脚本升级Plugi,用于自动生成或升级数据库,避免不断使用数据库工具修改数据导致的版本问题
public class FlywayPlugi implemets IPlugi {}8.lesscsscompilerplugi,编译less代码,并监控文件改动重新编译
public class LessCssPlugi implemets IPlugi {}9.mailer邮件发送plugi,使用akka异步发送邮件
Akka.system().scheduler().scheduleOce(Duratio.create(1000, TimeUit.MILLISECONDS), ew Ruable() { @Override public void ru() { MailerCof mailerCof = MailerPlugi.mailerCof; HtmlEmail htmlEmail = ew HtmlEmail(); htmlEmail.setCharset(mailerCof.getCharset()); htmlEmail.setSocketTimeout(mailerCof.getTimeout()); htmlEmail.setCharset(mailerCof.getEcode()); htmlEmail.setHostName(mailerCof.getHost()); if (!ValidateUtils.me().isNullOrEmpty(mailerCof.getSslport())) htmlEmail.setSslSmtpPort(mailerCof.getSslport()); if (!ValidateUtils.me().isNullOrEmpty(mailerCof.getPort())) htmlEmail.setSmtpPort(Iteger.parseIt(mailerCof.getPort())); htmlEmail.setSSLOCoect(mailerCof.isSsl()); htmlEmail.setStartTLSEabled(mailerCof.isTls()); htmlEmail.setDebug(mailerCof.isDebug()); htmlEmail.setAutheticator(ew DefaultAutheticator(mailerCof.getUser(), mailerCof.getPassword())); try { htmlEmail.setFrom(mailerCof.getFrom(), mailerCof.getName()); htmlEmail.setSubject(subject); htmlEmail.addTo(recipiets); htmlEmail.setHtmlMsg(body); // set the alterative message htmlEmail.setTextMsg("Your email cliet does ot support HTML messages"); if (!ValidateUtils.me().isNullOrEmpty(attachmet)) htmlEmail.attach(attachmet); htmlEmail.sed(); } catch (EmailExceptio e) { e.pritStackTrace(); } } }, Akka.system().dispatcher());10.自定义验证码,可以自定义使用字符或者数字,颜色和样式可以自调
public class PatchcaReder exteds Reder { private static fial Strig CODE_CHAR = "0123456789";}11.QuartzPlugi使用quartz执行定时任务,参照部分网络实例,简易实现
QuartzFactory.me().startJobOce(TimeUtils.me().toStrig(DateTime.ow()), ++jobId, "stati", this.getClass().getSimpleName(), OrderDataJob.class, param);12.shiro权限框架,基于数据库url配置过滤,验证码验证
//读取数据库权限只需实现该接口public iterface JdbcAuthzService { public Map<Strig, AuthzHadler> getJdbcAuthz();}13.shiro的freemarker标签库
<@shiro.hasPermissio ame="P_USER"> <li><a href="/admi/user">${i18.getText("admi.user")}</a></li> </@shiro.hasPermissio>14.xss过滤的StrigEscapeUtils过滤器实现
public class AttackHadler exteds Hadler { @Override public void hadle(Strig target, HttpServletRequest request, HttpServletRespose respose, boolea[] isHadled) { request = ew HttpServletRequestWrapper(request); extHadler.hadle(target, request, respose, isHadled); }}15.jso数据请求时,返回的error信息使用jso字符串
public class JsoErrorRederFactory implemets IErrorRederFactory { public Reder getReder(it errorCode, Strig view) { if (ThreadLocalUtil.isJso()) retur ew JsoErrorReder(errorCode, view); else retur ew ErrorReder(errorCode, view); }}16.自动绑定多数据源的tablebid
AutoMultiSourceTableBidPlugitableBidDefault=ewAutoMultiSourceTableBidPlugi(druidDefault,SimpleNameStyles.LOWER);//让default数据源排除shop目录下的model,因为该目录的model属于custom数据源tableBidDefault.addExcludePaths("c.dreampie.fuctio.shop");AutoMultiSourceTableBidPlugitableBidCustom=ewAutoMultiSourceTableBidPlugi(druidCustom,SimpleNameStyles.LOWER);//让custom只扫描shop目录,注意当使用icludepaths是只会扫描配置的路径,如果没有使用icludepaths会扫描全路径tableBidCustom.addIcludePaths("c.dreampie.fuctio.shop");17.压缩请求数据的gzipFilter,可测试
<!--gzipcompressfilter--><filter><filter-ame>gzipFilter</filter-ame><filter-class>c.dreampie.commo.web.filter.gzip.GZIPFilter</filter-class></filter><filter-mappig><filter-ame>gzipFilter</filter-ame><url-patter>/*</url-patter><dispatcher>REQUEST</dispatcher><dispatcher>FORWARD</dispatcher><dispatcher>INCLUDE</dispatcher><dispatcher>ERROR</dispatcher></filter-mappig><!--gzipcompressfilter-->18.http缓存cacheFilter,和gzipFilter共同用于提高用户性能
<!--cachefilter--><filter><filter-ame>cacheFilter</filter-ame><filter-class>c.dreampie.commo.web.filter.cache.CacheFilter</filter-class></filter><filter-mappig><filter-ame>cacheFilter</filter-ame><url-patter>/*</url-patter><dispatcher>REQUEST</dispatcher><dispatcher>FORWARD</dispatcher><dispatcher>INCLUDE</dispatcher><dispatcher>ERROR</dispatcher></filter-mappig><!--cachefilter-->






评论