首页>代码>JFinal-layui极速开发企业应用系统-专业版>/Jfinal-layui/src/main/java/com/qinhailin/common/config/MainConfig.java
/** * Copyright 2019-2021 覃海林(qinhaisenlin@163.com). * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.qinhailin.common.config; 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.JFinalConfig; import com.jfinal.config.Plugins; import com.jfinal.config.Routes; import com.jfinal.core.JFinal; import com.jfinal.kit.Prop; import com.jfinal.kit.PropKit; import com.jfinal.template.Engine; import com.jfinal.template.source.ClassPathSourceFactory; import com.qinhailin.common.directive.MyNowDirective; import com.qinhailin.common.filter.MyDruidFilter; import com.qinhailin.common.handler.CommonHandler; import com.qinhailin.common.intercepor.ExceptionInterceptor; import com.qinhailin.common.intercepor.LoggerInterceptor; import com.qinhailin.common.intercepor.SessionInterceptor; import com.qinhailin.common.intercepor.TokenInterceptor; import com.qinhailin.common.kit.DruidKit; import com.qinhailin.common.kit.IdKit; import com.qinhailin.common.model._MappingKit; import com.qinhailin.common.safe.XssHandler; import com.jfinal.ext.handler.UrlSkipHandler; import com.jfinal.ext.interceptor.SessionInViewInterceptor; import com.jfinal.json.FastJsonFactory; import com.jfinal.plugin.druid.DruidPlugin; import com.jfinal.plugin.ehcache.EhCachePlugin; import com.jfinal.server.undertow.UndertowServer; import com.jfinal.plugin.activerecord.ActiveRecordPlugin; import com.jfinal.plugin.activerecord.CaseInsensitiveContainerFactory; import com.jfinal.plugin.activerecord.dialect.MysqlDialect; import com.jfinal.plugin.activerecord.dialect.OracleDialect; public class MainConfig extends JFinalConfig { /** *运行main方法启动项目 */ public static void main(String[] args) { // 加载配置文件 loadConfig(); // 启动ureport2报表插件 if(p.getBoolean("startUreport2",false)){ UndertowServer.create(MainConfig.class) .configWeb( builder -> { // 配置 UReport2 Servlet builder.addServlet("ureportServlet", "com.bstek.ureport.console.UReportServlet"); builder.addServletMapping("ureportServlet", "/ureport/*"); // 配置 Listener builder.addListener("org.springframework.web.context.ContextLoaderListener"); }) .start(); }else{ UndertowServer.start(MainConfig.class); } } // 使用 jfinal-undertow 时此处仅保留声明,不能有加载代码 private static Prop p; // 先加载开发环境配置,再追加生产环境的少量配置覆盖掉开发环境配置 static void loadConfig() { if (p == null) { p = PropKit.use("config-dev.txt").appendIfExists("config-pro.txt"); } } /** * 配置JFinal常量 */ @Override public void configConstant(Constants me) { //加载配置文件 loadConfig(); // 设置当前是否为开发模式 me.setDevMode(p.getBoolean("devMode")); // 设置默认上传文件保存路径 getFile等使用 me.setBaseUploadPath(WebContant.baseUploadPath); // 设置默认下载文件路径 renderFile使用 me.setBaseDownloadPath(WebContant.baseDownloadPath); // 设置error渲染视图 me.setError403View(WebContant.error403View); me.setError404View(WebContant.error404View); me.setError500View(WebContant.error500View); // me.setJsonFactory(FastJsonFactory.me()); //开启依赖注入 me.setInjectDependency(true); //附件上传大小设置100M me.setMaxPostSize(WebContant.maxPostSize); } /** * 配置JFinal路由映射 */ @Override public void configRoute(Routes me) { me.scan(WebContant.scanPackageName); me.setBaseViewPath(WebContant.baseViewPath); } /** * 获取数据库插件 * 抽取成独立的方法,便于重用该方法,减少代码冗余 */ public static DruidPlugin createDruidPlugin() { loadConfig(); return new DruidPlugin(p.get("jdbcUrl"), p.get("user"), p.get("password").trim()); } /** * 配置JFinal插件 数据库连接池 ORM 缓存等插件 自定义插件 */ @Override public void configPlugin(Plugins me) { // 配置数据库连接池插件 DruidPlugin dbPlugin = createDruidPlugin(); /** 配置druid监控 **/ dbPlugin.addFilter(new StatFilter()); WallFilter wall = new WallFilter(); wall.setDbType(p.get("dbType")); dbPlugin.addFilter(wall); // orm映射 配置ActiveRecord插件 ActiveRecordPlugin arp=new ActiveRecordPlugin(dbPlugin); //sql模板 arp.getEngine().setSourceFactory(new ClassPathSourceFactory()); arp.addSqlTemplate(WebContant.sqlTemplate); // 代码器模板 arp.addSqlTemplate(WebContant.codeTemplate); //处理SQL参数 dbPlugin.addFilter(new MyDruidFilter()); if("oracle".equals(p.get("dbType"))){ // 配置属性名(字段名)大小写,true:小写,false:大写,统一小写,切换oracle数据库的时候可以不用改页面字段 arp.setContainerFactory(new CaseInsensitiveContainerFactory(true)); arp.setDialect(new OracleDialect()); }else { arp.setDialect(new MysqlDialect()); } /******** 在此添加数据库 表-Model 映射 *********/ _MappingKit.mapping(arp); // 添加到插件列表中 me.add(dbPlugin); me.add(arp); /******** 多数据源配置,接入第三方库进行登录或者业务开发 *********/ // oracleDb(me); // 配置缓存插件 me.add(new EhCachePlugin()); } /** * oracle 数据源 * @param me */ public void oracleDb(Plugins me){ DruidPlugin dbPluginOracle = new DruidPlugin(p.get("oracle.jdbcUrl"), p.get("oracle.user"), p.get("oracle.password").trim()); me.add(dbPluginOracle); dbPluginOracle.addFilter(new StatFilter()); WallFilter wallOracle = new WallFilter(); wallOracle.setDbType(p.get("oracle.dbType")); dbPluginOracle.addFilter(wallOracle); // oracle ActiveRecrodPlugin 实例,并指定configName为 oracle ActiveRecordPlugin arpOracle = new ActiveRecordPlugin("oracle", dbPluginOracle); arpOracle.setDialect(new OracleDialect()); me.add(arpOracle); } /** * 配置全局拦截器 */ @Override public void configInterceptor(Interceptors me) { me.addGlobalActionInterceptor(new SessionInViewInterceptor()); me.addGlobalActionInterceptor(new SessionInterceptor()); me.addGlobalActionInterceptor(new ExceptionInterceptor()); me.addGlobalActionInterceptor(new TokenInterceptor()); me.addGlobalActionInterceptor(new LoggerInterceptor()); } /** * 配置全局处理器 */ @Override public void configHandler(Handlers me) { /** 配置druid监控 **/ me.add(DruidKit.getDruidStatViewHandler()); // 路由处理 me.add(new CommonHandler()); // XSS过滤 me.add(new XssHandler("^\\/portal/form/view.*")); // 放开/ureport/开头的请求 me.add(new UrlSkipHandler("^\\/ureport.*", true)); } /** * 配置模板引擎 */ @Override public void configEngine(Engine me) { // 这里只有选择JFinal TPL的时候才用 me.setDevMode(p.getBoolean("engineDevMode")); // 当前时间指令 me.addDirective("now", MyNowDirective.class); // 项目根路径 me.addSharedObject("path", JFinal.me().getContextPath()); // 项目名称 me.addSharedObject("projectName", p.get("projectName")); // 项目版权 me.addSharedObject("copyright", p.get("copyright")); // 配置共享函数模板 me.addSharedFunction(WebContant.functionTemp); // 附件在线预览服务 me.addSharedObject("onlinePreview", p.getBoolean("onlinePreview")); me.addSharedObject("onlinePreviewUrl", p.get("onlinePreviewUrl")); //允许上传文件类型 me.addSharedObject("allowUploadFile", WebContant.allowUploadFile); //用于前端调用静态方法,创建id me.addSharedStaticMethod(IdKit.class); } }
最近下载更多
z875152686 LV8
2023年11月2日
2602275348 LV12
2022年4月8日
zcl02036716 LV17
2022年2月28日
微量的记忆 LV10
2022年2月11日
最代码官方 LV168
2021年10月5日
最近浏览更多
Frank_F
7月5日
暂无贡献等级
myfz0662 LV10
5月8日
云破月 LV8
4月12日
akittyboy LV9
3月31日
z875152686 LV8
2023年11月2日
abc562311934 LV4
2022年10月8日
1986王志飞 LV6
2022年8月12日
bluesky2016 LV15
2022年6月10日
a318888331 LV13
2022年4月11日
2602275348 LV12
2022年3月31日