SoJpt Boot - Spring Boot 下使用 Jfinal 特性


Apache 2.0
跨平台
Java

软件简介

SoJpt Boot

介绍

Spring Boot框架下使用Jfinal特性极速开发
了解更多:www.sojpt.com

在Spring Boot框架下使用Jfinal特性极速开发,可以在Spring
Boot中向使用Jfinal一样使用Enjoy、Aop、Controller等一系列方法(如: getFile(),
renderFile....),以及ActiveRecord

软件架构

基于 JFinal 与 Spring Boot制作, 实现Spring Boot与Jfinal的混合双打,使Spring
Boot下的开发者能够体验Jfinal的极速开发特性,有更多的时间去配恋人或家人。

安装教程

  1. 在Spring Boot 2.0以上项目中 加入maven坐标


          com.gitee.sohnny
          sojpt-boot-spring-boot-starter
          2.5.6-3.8
        

  2. 添加 SoJptBootConfig 配置类

    package com.sojpt.boot;

    import java.sql.Connection;
    import javax.servlet.ServletException;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.context.properties.EnableConfigurationProperties;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import com.alibaba.druid.filter.stat.StatFilter;
    import com.alibaba.druid.wall.WallFilter;
    import com.jfinal.config.Constants;
    import com.jfinal.config.Handlers;
    import com.jfinal.config.Interceptors;
    import com.jfinal.config.Plugins;
    import com.jfinal.core.JFinal;
    import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
    import com.jfinal.plugin.activerecord.dialect.MysqlDialect;
    import com.jfinal.plugin.druid.DruidPlugin;
    import com.jfinal.template.Engine;
    import com.jfinal.template.ext.spring.JFinalViewResolver;
    import com.jfinal.template.source.ClassPathSourceFactory;
    import com.sojpt.model._MappingKit;

    @Configuration(value = “SoJptBootConfig”)
    public class SoJptBootConfig extends SoJptConfig {

    @Autowired
    private ActiveRecordPluginProperties arpProperties;
    
    /**
     * 配置JFinal常量
     */
    @Override
    public void configConstant(Constants me) {
    
        // 设置当前是否为开发模式
        me.setDevMode(arpProperties.getIsDevMode());
        // me.setError404View("/index.html");
    }
    
    /**
     * 配置JFinal插件 数据库连接池 ORM 缓存等插件 自定义插件
     */
    @Override
    public void configPlugin(Plugins me) {
    
        DruidPlugin dp = new DruidPlugin(arpProperties.getJdbcUrl(), arpProperties.getUsername(), arpProperties.getPassword());
    
        dp.addFilter(new StatFilter());
        dp.setDriverClass("com.mysql.cj.jdbc.Driver");
        WallFilter wall = new WallFilter();
        dp.addFilter(wall);
        me.add(dp);
    
        ActiveRecordPlugin arp = new ActiveRecordPlugin(dp);
        arp.setTransactionLevel(Connection.TRANSACTION_READ_COMMITTED);
        arp.setShowSql(arpProperties.getIsDevMode());
        arp.setDialect(new MysqlDialect());
    
        // ******** 在此添加dao层sql文件 *********//*
        //arp.addSqlTemplate("sql/all_sqls.sql");
    
        _MappingKit.mapping(arp);
    
        // 初始化任务调度插件,参数为配置文件名
        // me.add(new Cron4jPlugin(sysProp));
    
        me.add(arp);
    }
    
    /**
     * 配置全局拦截器
     */
    @Override
    public void configInterceptor(Interceptors me) {
        // me.addGlobalActionInterceptor(new DuplicateLoginInterceptor());
    }
    
    /**
     * 配置全局处理器
     */
    @Override
    public void configHandler(Handlers me) {
        // druid 统计页面功能
        //me.add(DruidKit.getDruidStatViewHandler());
        //me.add(new JavaMelodyHandler("/monitoring.*", true));
    }
    
    @Override
    public void beforeJFinalStop() {
    }
    
    /**
     * 
     * 配置模板引擎
     */
    @Override
    public void configEngine(Engine me) {
        // 这里只有选择JFinal TPL的时候才用
        me.addSharedObject("RESOURCE_HOST", JFinal.me().getContextPath());
        me.addSharedObject("WEB_HOST", JFinal.me().getContextPath());
        // 配置共享函数模板
        // me.addSharedFunction("/view/common/layout.html")
    }
    
    @Override
    public void afterJFinalStart() {
        System.err.println("SoJpt Boot 启动成功!");
    }
    

    }

  3. 在 application.properties 配置文件中添加如下

    arp.jdbc-url = jdbc:mysql://127.0.0.1/sojpt?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false
    arp.username = root
    arp.password = 123456
    arp.is-dev-mode= true

  4. 在spring启动类中添加注解 @ComponentScan(“com.sojpt”), 如下:

    @ComponentScan(“com.sojpt”) //添加你定义的SoJptBootConfig类所在的包名称
    @SpringBootApplication
    public class SoJptSpringbootApplication {

    public static void main(String[] args) {
        SpringApplication.run(SoJptSpringbootApplication.class, args);
    }
    

    }

使用说明

  1. 案例一 返回json

    @RestController
    public class HelloController extends Controller { //不继承Controller,就是原生的Spring Boot,Jfinal的Aop也就不能用

    @Before(Tx.class) //事务的用法
    @RequestMapping("/list/jfinal")
    public void index() {
        System.out.println(getPara("id")); //获取参数示例
        SqlPara sqlPara = Db.getSqlPara("admin_log.select");
        Page<Record> page = Db.paginate(1, 10, sqlPara);
        renderJson(page);
    }
    

    }

  2. 案例二 文件下载

    @RestController
    public class HelloPageController extends Controller {

    @Clear
    @RequestMapping("/file")
    public void index() {
    
        setAttr("msg", "123123");
        renderFile(new File("d://test.txt"));
    }
    

    }

  3. 案例三 返回页面

    @Controller
    public class HelloPageController extends Controller {

    @Before(LoginInterceptor.class)
    @RequestMapping("/page/jfinal")
    public void index() {
    
        setAttr("msg", "123123");
    
        render("/view/index.html") //放在resources目录下
    }
    

    }

参与贡献

www.sojpt.com

捐赠