JFinal根据URL参数如何动态设置数据源?

Dream422 发布于 2016/10/20 10:26
阅读 377
收藏 0

昨天已发了一贴,得到不同的热心网友的回复,非常感谢,原问题地址为:https://www.oschina.net/question/2257046_2201514

根据昨天的情况又百度了几次,最终感觉以我目前的情况,多个企业共用一套程序,独立数据库,这是最快的解决方案,到时候可根据访问的域名加公司标识,如A公司地址为:oa.com.cn/a,B公司为oa.com.cn/b,通过a与b的参数能实现动态连接不同的数据源。

这样的话,我目前的程序基本不需要动,后期企业希望分离的话,也容易独立,在扩展上的话,不同的企业可能有不同的需求,有需要的话,也可以独立部署与开发。

-------------------------------------------

现再想咨询下大神,在jfinal中如何能根据URL参数修改所要连接的数据库,最好在访问登录地址时,就能根据参数完成数据库的配置,这样就可以获取自己公司的LOGO之类的进行显示与验证。

现数据库连接如下:


@Override
	public void configPlugin(Plugins me) {
		//插件
		DruidPlugin druidPlugin = new DruidPlugin(PropKit.get("url"), PropKit.get("user"), PropKit.get("password").trim(),PropKit.get("driverClass"));
		me.add(druidPlugin);
}




加载中
0
天为之殇
天为之殇

首先这套程序要有个主数据库

服务启动后默认连接主数据库

然后添加一个全局拦截器,识别不同公司的URL(假如识别为A),并且setAttr("__DbName","A")

使用一个标识判断A的数据库有没有连接

没有就连接(自己new插件然后手动启动),有就略过~

然后使用数据库时 Db.use(getPara("__DbName"))

只是提供一个思路~

Dream422
Dream422
但是我现在不知道的是如何动态设置数据源
Dream422
Dream422
我现在的想法是不用主数据库,程序启动时默认不连接数据库,根据URL的参数连接对应的数据库,程序中用到了大量的DAO.XX方法,根据JFINAL的规范,就使用一个主数据源,不用辅助数据源
0
sky_zy
sky_zy
可以改写获取数据库连接的方法,在获取到连接后,根据参数切换schema
0
红薯的小黄瓜
红薯的小黄瓜

原来你还不知道怎么写...

先写一个handler,把地址重写为正常的后台地址

public void handle(
    String s,
    HttpServletRequest httpServletRequest,
    HttpServletResponse httpServletResponse,
    boolean[] booleen
  ) {
    String url = httpServletRequest.getRequestURI();
    int i = url.indexOf(47, 2);
    String u = url.substring(i);
    String companyName = url.split("/")[1];
    httpServletRequest.setAttribute("companyName", companyName);
    nextHandler.handle(u, httpServletRequest, httpServletResponse, booleen);
  }



控制器

public void add(){
    getModel(User.class).use(getRequest().getAttribute("companyName")+"").save();
  }



0
小豪哥哥丶
可以尝试的用魔方网表。BS构架,可以满足企业管理的需求,是一个平台系统。
返回顶部
顶部