jfinal-dreampie jfinal plugins

程序名称:jfinal-dreampie

授权协议: GPL

操作系统: 跨平台

开发语言: Java

jfinal-dreampie 介绍

jfinal好用的插件正在开发,下载源码https://github.com/Dreampie/jfinal- dreampie,maven引入方式:http://search.maven.org/ 输入jfinal-dreampie搜索

<dependencies>
   <dependency>
      <groupId>cn.dreampie</groupId>
      <artifactId>jfinal-dreampie</artifactId>
      <version>0.2.3</version>
    </dependency>
</dependencies>

https://github.com/Dreampie?tab=repositories 分割成多个独立的插件进行优化,可以看我的博客拆分优化情况
http://my.oschina.net/wangrenhui1990/blog

demo:(Angularjs前端+jfinal-dreampie插件) https://github.com/Dreampie/icedog

剥离框架前的源码https://github.com/Dreampie/dreampie

https://github.com/Dreampie?tab=repositories 目录下有多款插件:

cn.dreampie.jfinal-shiro https://github.com/Dreampie/jfinal-shiro
支持注解和数据库配置的shiro插件

cn.dreampie.jfinal-shiro-freemarker https://github.com/Dreampie/jfinal-shiro- freemarker shiro插件实现的freemarker标签库

cn.dreampie.jfinal-web https://github.com/Dreampie/jfinal-web
相关web插件,简洁model实现

cn.dreampie.jfinal-utils https://github.com/Dreampie/jfinal-utils 部分jfinal工具

cn.dreampie.jfinal-tablebind https://github.com/Dreampie/jfinal-tablebind
jfinal的table自动绑定插件,支持多数据源

cn.dreampie.jfinal-flyway https://github.com/Dreampie/jfinal-flyway
数据库脚本升级插件,开发中升级应用时,使用脚本同步升级数据库或者回滚

cn.dreampie.jfinal-captcha https://github.com/Dreampie/jfinal-captcha
基于jfinal render的超简单验证吗插件

cn.dreampie.jfinal-quartz https://github.com/Dreampie/jfinal-quartz 基于jfinal
的quartz管理器

cn.dreampie.jfinal-sqlinxml https://github.com/Dreampie/jfinal-sqlinxml
基于jfinal 的类似ibatis的sql语句管理方案

cn.dreampie.jfinal-lesscss https://github.com/Dreampie/jfinal-
lesscss
java实现的lesscsss实时编译插件,可以由于jfinal

cn.dreampie.jfinal-coffeescript https://github.com/Dreampie/jfinal- coffeescript java实现的coffeescript实时编译插件,可以由于jfinal

cn.dreampie.jfinal-akka https://github.com/Dreampie/jfinal-akka
java使用akka执行异步任务

cn.dreampie.jfinal-mailer https://github.com/Dreampie/jfinal-mailer
使用akka发布邮件的jfinal插件

cn.dreampie.jfinal-slf4j https://github.com/Dreampie/jfinal-slf4j
让jfinal使用slf4j的日志api

使用方法请移步:http://my.oschina.net/wangrenhui1990/blog

部分代码正在调试和开发中,欢迎大家使用

介绍->

jfinal-dreampie是一个基于jfinal的开源框架库,主要集成或调优功能如下(由于篇幅原因部分源码未贴出,可以到github下载源码):

1.缓存维护更细粒度

 @CacheNameRemove(name = AppConstants.DEFAULT_CACHENAME)


@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
public @interface CacheNameRemove {
  String name();

  String[] keys() default {};
}

//根据key值来移除基于某个特定方法的缓存,而不是移除整个controller下的缓存

String controllerKey = ai.getControllerKey();
    if (!ValidateUtils.me().isNullOrEmpty(removeCacheName)) {
      String keyPrefix = null;
      if (!ValidateUtils.me().isNullOrEmpty(removeCacheKeys)) {
        for (String removeKey : removeCacheKeys) {
          keyPrefix = controllerKey + SLASH + removeKey;
          removeByCacheKey(removeCacheName, keyPrefix);
        }
      } else {
        keyPrefix = controllerKey;
        removeByCacheKey(removeCacheName, keyPrefix);
      }
    }

2.增加Slf4jLogger实现,然日志配置能基于任何Slf4j下的log实现,如logback

public class Slf4jLogFactory implements ILoggerFactory

3.基础model实现,实现基础的常用的部分功能用于复用

 public List<M> findAll() {
    return find(getSelectSql() + getExceptSelectSql());
  }

  public List<M> findBy(String where, Object... paras) {
    return find(getSelectSql() + getExceptSelectSql() + getWhere(where), paras);
  }

  public List<M> findTopBy(int topNumber, String where, Object... paras) {
    return paginate(1, topNumber, getSelectSql(), getExceptSelectSql() + getWhere(where), paras).getList();
  }

  public M findFirstBy(String where, Object... paras) {
    return findFirst(getSelectSql() + getExceptSelectSql() + getWhere(where), paras);
  }

  public Page<M> paginateAll(int pageNumber, int pageSize) {
    return paginate(pageNumber, pageSize, getSelectSql(), getExceptSelectSql());
  }

  public Page<M> paginateBy(int pageNumber, int pageSize, String where, Object... paras) {
    return paginate(pageNumber, pageSize, getSelectSql(), getExceptSelectSql() + getWhere(where), paras);
  }

  public boolean updateAll(String set, Object... paras) {
    return Db.update(getUpdateSql() + getSet(set), paras) > 0;
  }

  public boolean updateBy(String set, String where, Object... paras) {
    return Db.update(getUpdateSql() + getSet(set) + getWhere(where), paras) > 0;
  }

  public boolean deleteAll() {
    return Db.update(getDeleteSql()) > 0;
  }

  public boolean deleteBy(String where, Object... paras) {
    return Db.update(getDeleteSql() + getWhere(where), paras) > 0;
  }

  public boolean dropAll() {
    return Db.update(getDropSql()) > 0;
  }

  public boolean dropBy(String where, Object... paras) {
    return Db.update(getDropSql() + getWhere(where), paras) > 0;
  }

4.akka异步执行框架

public class AkkaPlugin implements IPlugin


Akka.system().scheduler().scheduleOnce(Duration.create(1000, TimeUnit.MILLISECONDS),
        new Runnable() {
          @Override
          public void run() {
            //do Something
          }
        }, Akka.system().dispatcher());

5.atmosphere chat demo

@ManagedService(path = "/im/{room: [a-zA-Z][a-zA-Z_0-9]*}")
public class ChatRoom {
}

6.coffeescript compiler plugin,编译coffeescript代码,并监控文件改动重新编译

public class CoffeeScriptPlugin implements IPlugin {
}

7.Flyway 数据库自动脚本升级 Plugin,用于自动生成或升级数据库,避免不断使用数据库工具修改数据导致的版本问题

public class FlywayPlugin implements IPlugin {
}

8.lesscss compiler plugin,编译less代码,并监控文件改动重新编译

public class LessCssPlugin implements IPlugin {
}

9.mailer 邮件发送plugin,使用akka异步发送邮件

 Akka.system().scheduler().scheduleOnce(Duration.create(1000, TimeUnit.MILLISECONDS),
        new Runnable() {
          @Override
          public void run() {
            MailerConf mailerConf = MailerPlugin.mailerConf;
            HtmlEmail htmlEmail = new HtmlEmail();
            htmlEmail.setCharset(mailerConf.getCharset());
            htmlEmail.setSocketTimeout(mailerConf.getTimeout());
            htmlEmail.setCharset(mailerConf.getEncode());
            htmlEmail.setHostName(mailerConf.getHost());
            if (!ValidateUtils.me().isNullOrEmpty(mailerConf.getSslport()))
              htmlEmail.setSslSmtpPort(mailerConf.getSslport());
            if (!ValidateUtils.me().isNullOrEmpty(mailerConf.getPort()))
              htmlEmail.setSmtpPort(Integer.parseInt(mailerConf.getPort()));
            htmlEmail.setSSLOnConnect(mailerConf.isSsl());
            htmlEmail.setStartTLSEnabled(mailerConf.isTls());
            htmlEmail.setDebug(mailerConf.isDebug());
            htmlEmail.setAuthenticator(new DefaultAuthenticator(mailerConf.getUser(), mailerConf.getPassword()));
            try {
              htmlEmail.setFrom(mailerConf.getFrom(), mailerConf.getName());
              htmlEmail.setSubject(subject);
              htmlEmail.addTo(recipients);
              htmlEmail.setHtmlMsg(body);
              // set the alternative message
              htmlEmail.setTextMsg("Your email client does not support HTML messages");
              if (!ValidateUtils.me().isNullOrEmpty(attachment))
                htmlEmail.attach(attachment);
              htmlEmail.send();
            } catch (EmailException e) {
              e.printStackTrace();
            }
          }
        }, Akka.system().dispatcher());

10.自定义验证码,可以自定义使用字符或者数字,颜色和样式可以自调

public class PatchcaRender extends Render {
  private static final String CODE_CHAR = "0123456789";
}

11.QuartzPlugin使用quartz执行定时任务,参照部分网络实例,简易实现

QuartzFactory.me().startJobOnce(TimeUtils.me().toString(DateTime.now()), ++jobId, "stati", this.getClass().getSimpleName(), OrderDataJob.class, param);

12.shiro权限框架,基于数据库url配置过滤,验证码验证

//读取数据库权限只需实现该接口
public interface JdbcAuthzService {
  public Map<String, AuthzHandler> getJdbcAuthz();
}

13.shiro的freemarker标签库

<@shiro.hasPermission name="P_USER">
                <li><a href="/admin/user">${i18n.getText("admin.user")}</a></li>
            </@shiro.hasPermission>

14.xss过滤的StringEscapeUtils过滤器实现

public class AttackHandler extends Handler {
  @Override
  public void handle(String target, HttpServletRequest request, HttpServletResponse response, boolean[] isHandled) {
    request = new HttpServletRequestWrapper(request);
    nextHandler.handle(target, request, response, isHandled);
  }
}

15.json数据请求时,返回的error信息使用json字符串

public class JsonErrorRenderFactory implements IErrorRenderFactory {
  public Render getRender(int errorCode, String view) {
    if (ThreadLocalUtil.isJson())
      return new JsonErrorRender(errorCode, view);
    else
      return new ErrorRender(errorCode, view);
  }
}

16.自动绑定多数据源的tablebind

 AutoMultiSourceTableBindPlugin tableBindDefault = new AutoMultiSourceTableBindPlugin(druidDefault, SimpleNameStyles.LOWER);
//让default数据源排除shop目录下的model,因为该目录的model属于custom数据源
tableBindDefault.addExcludePaths("cn.dreampie.function.shop");

 AutoMultiSourceTableBindPlugin tableBindCustom = new AutoMultiSourceTableBindPlugin(druidCustom, SimpleNameStyles.LOWER);
//让custom只扫描shop目录,注意当使用includepaths是只会扫描配置的路径,如果没有使用includepaths会扫描全路径
tableBindCustom.addIncludePaths("cn.dreampie.function.shop");

17.压缩请求数据的gzipFilter,可测试

  <!--gzip compress filter-->
  <filter>
    <filter-name>gzipFilter</filter-name>
    <filter-class>cn.dreampie.common.web.filter.gzip.GZIPFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>gzipFilter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
    <dispatcher>INCLUDE</dispatcher>
    <dispatcher>ERROR</dispatcher>
  </filter-mapping>
  <!--gzip compress filter-->

18.http缓存cacheFilter,和gzipFilter共同用于提高用户性能

<!-- cache filter-->
  <filter>
    <filter-name>cacheFilter</filter-name>
    <filter-class>cn.dreampie.common.web.filter.cache.CacheFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>cacheFilter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
    <dispatcher>INCLUDE</dispatcher>
    <dispatcher>ERROR</dispatcher>
  </filter-mapping>
  <!--cache filter-->

jfinal-dreampie 官网

https://github.com/Dreampie/jfinal-dreampie

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


MuPlayer 是一款跨平台、轻量级的音频播放解决方案,是百度@音乐前端团队开发维护的浏览端音频播放内核,它基于HTML5
OS FLV 是一个 开源和可嵌入网页的flv播放器。 这个播放器拥有大量的选项可以通过嵌入代码进行设置.
DewPlayer音乐播放器,样式很简单,而且很实用.播放器可以根据自己的喜好改变颜色,也算比较个性化吧.但唯一的不足就是只支持MP3格式的音乐。
JW FLV MEDIA PLAYER是一个开源的在网页上使用的Flash视频、音频以及图片播放器,支持 Sliverlight
Speakker 是一个基于 Web 浏览器的音乐播放器,只提供很多高级播放功能包括播放列表管理和分享。
Player Framework 是一个开源的支持 HTML5 的视频播放器框架,同时也支持 Silverlight 和 Windows Phone
Sewise Player是一款专业的免费网页视频、流播放器,它功能强大,体积小,跨平台,使用方便简洁、随心所欲:
SoundManager 2 利用 HTML5 和 Flash 技术提供了稳定和阔平台的音乐播放功能,只有 10K 的 JS 包。
xPlayer v1.0 特性: 文件大小 9.78kb; 可以自定义皮肤; 3.支持 http 和 rtmp 视频; 4.音量调节,全屏播放,拖拽播放;
XPlayer 豆瓣音乐播放器 特点: 1.自动侦测Douban网页的歌曲 2.Douban网页关闭,歌曲能够继续播放
歌词 插件 最新更新,扩展性能稍微有点提升了, 不多说了,更多敬请查看首页http://luochunzong.sinaapp.com/?p=84
ABPlayerHTML5是一个在HTML5下的弹幕播放器(同步显示视频于评论)实现。类似功能的播放器可以参考基于Flash的MukioPlayer和PADPlayer。
AudioPlayer.js 是一个 jQuery 的插件,实现了 HTML5 的音乐播放器,无需任何图片,实现了响应式布局,支持触摸操作。
替换中国大陆主流视频网站的 Flash 播放器为 HTML5 播放器 使用 Mac 的同学都可能碰到过在线看视频引起机子风扇狂转、机身发烫等情况,这是因为 Flash 占用了过多系统资源的缘故。
AetherPlayer 是一个类CD的轻量HTML5播放器,特别适合博客及个人站点使用。它漂亮得不像……咳,这边吹牛的话就不说了。
专注、极致、智慧,国内外为数不多不依赖开源框架、跨平台(windows/android/iOS)、公网推送(支持rtmp)-播放(支持rtmp/rtsp)业界真正靠谱 的超低延迟。
node-kugou-client 是 Node.js 酷狗客户端。 安装 npm install node-kugou-client 使用 var kugou = require(\"node-kugou-client\");
Youku HTML5 播放器扩展 —— 告别 flash 和广告 关于官方内测 html5 播放器 Firefox ( xpi 直接安装) ( firefox 50.0+)
Chimee 由奇舞团研制的 h5 播放器,它支持 mp4、m3u8、flv 等多种格式。通过插件式开发,能满足业务方快速迭代、灰度发布等要求。让开发者能够轻松快捷地完成视频场景的开发。
OneVideo是一款基于OneBase+UniApp开发的小视频播放移动应用。