我負責的項目都是Jfinal的了,有必要寫一些學習知識,記錄下來。html
一、PropKit.use("config.txt", "UTF-8");java
PropKit 工具類用來操做外部配置文件。mysql
public class AppConfig extends JFinalConfig { public void configConstant(Constants me) { // 第一次使用use加載的配置將成爲主配置,能夠經過PropKit.get(...)直接取值 PropKit.use("a_little_config.txt"); me.setDevMode(PropKit.getBoolean("devMode")); } public void configPlugin(Plugins me) { // 非第一次使用use加載的配置,須要經過每次使用use來指定配置文件名再來取值 String redisHost = PropKit.use("redis_config.txt").get("host"); int redisPort = PropKit.use("redis_config.txt").getInt("port"); RedisPlugin rp = new RedisPlugin("myRedis", redisHost, redisPort); me.add(rp); // 非第一次使用 use加載的配置,也能夠先獲得一個Prop對象,再經過該對象來獲取值 Prop p = PropKit.use("db_config.txt"); DruidPlugin dp = new DruidPlugin(p.get("jdbcUrl"), p.get("user")…); me.add(dp); } }
二、Tx 事務攔截器redis
如下爲事務處理示例:sql
boolean succeed = Db.tx(new IAtom(){ public boolean run() throws SQLException { int count = Db.update("update account set cash = cash - ? where id = ?", 100, 123); int count2 = Db.update("update account set cash = cash + ? where id = ?", 100, 456); return count == 1 && count2 == 1; }}); }
以上兩次數據庫更新操做在一個事務中執行,若是執行過程當中發生異常或者 invoke()方法
返回 false,則自動回滾事務。數據庫
三、Jfinal基本配置代碼app
/** * API引導式配置 */ public class CommonConfig extends JFinalConfig { public static Properties p; /** * 配置常量 */ @Override public void configConstant(Constants me) { p = loadPropertyFile("project.txt"); // 加載少許必要配置,隨後可用getProperty(...)獲取值 me.setDevMode(getPropertyToBoolean("devMode", false)); me.setBaseViewPath("/WEB-INF/jsp/"); me.setViewType(ViewType.JSP); // 設置視圖類型爲Jsp,不然默認爲FreeMarker //me.setError404View("/error/error_404.html"); //me.setError500View("/error/error_500.html"); } /** * 配置路由 */ @Override public void configRoute(Routes me) { AutoBindRoutes auto = new AutoBindRoutes(); me.add(auto); } /** * 配置插件 */ @Override public void configPlugin(Plugins me) { /** * // 配置C3p0數據庫鏈接池插件 C3p0Plugin c3p0Plugin = new * C3p0Plugin(getProperty("jdbcUrl"), getProperty("user"), * getProperty("password").trim()); me.add(c3p0Plugin); * * // 配置ActiveRecord插件 ActiveRecordPlugin arp = new * ActiveRecordPlugin(c3p0Plugin); me.add(arp); arp.addMapping("blog", * Blog.class); // 映射blog 表到 Blog模型 */ DruidPlugin druidPlugin = new DruidPlugin(getProperty("jdbcUrl"), getProperty("user"), getProperty("password"), getProperty("driverClass")); druidPlugin.setValidationQuery("select 1 from dual"); druidPlugin.setTestOnBorrow(true); druidPlugin.setFilters("stat"); me.add(druidPlugin); AutoTableBindPlugin arp = new AutoTableBindPlugin(druidPlugin, SimpleNameStyles.UP_UNDERLINE); // arp.setDialect(new MysqlDialect()); //mysql的方言配置 arp.setDialect(new OracleDialect()); arp.setContainerFactory(new CaseInsensitiveContainerFactory()); arp.setShowSql(true);//輸出sql me.add(arp); QuartzPlugin quartzPlugin = new QuartzPlugin("job.properties"); me.add(quartzPlugin); } /** * 配置全局攔截器 */ @Override public void configInterceptor(Interceptors me) { me.add(new TxByRegex("save;delete;submit;update")); me.add(new AuthInterceptor()); //me.add(new ExceptionInterceptor()); } /** * 配置處理器 */ @Override public void configHandler(Handlers me) { me.add(new UrlSkipHandler("/hessian.*", false)); me.add(new BaseUrlHandler()); me.add(new ContextPathHandler("contextpath")); me.add(new DruidStatViewHandler("/druid")); } /** * 建議使用 JFinal 手冊推薦的方式啓動項目 運行此 main * 方法能夠啓動項目,此main方法能夠放置在任意的Class類定義中,不必定要放於此 */ public static void main(String[] args) { JFinal.start("WebRoot", 80, "/", 5); } }
/** * 配置常量 */ @Override public void configConstant(Constants me) { p = loadPropertyFile("project.txt"); // 加載少許必要配置,隨後可用getProperty(...)獲取值 me.setDevMode(getPropertyToBoolean("devMode", false)); me.setBaseViewPath("/WEB-INF/jsp/"); me.setViewType(ViewType.JSP); // 設置視圖類型爲Jsp,不然默認爲FreeMarker }
數據庫配置信息都這jsp
/WEB-INF/jsp/project.txt 裏了。