起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

123
返回列表 发新帖
楼主: teky

[结贴] wex3.3如果动态连接数据源

[复制链接]
发表于 2016-1-12 09:57:25 | 显示全部楼层
teky 发表于 2016-1-11 20:31
不想引用3.2.1的baas,这个版本有个存储方面的问题没解决。
3.3版本的数据源方面连接的服务没找到,麻烦 ...

因为数据源的连接,在服务器启动的时候就连接上了!
如果是自己写数据库连接的话,只能用原生的jdbc 来写了!
3.2.1版本其实就是jdbc代码封装了一下!而且是开源的!你完全可以看看他源码,然后在3.3版本中自己实现了

再请问下,你的ip地址是固定的吗??如果会变化,树在几个固定ip之间变化吗??
如果是,你可以在数据源中多定义几个不同数据源的action,然后访问后台action的时候,先判断ip地址是那个?然后再去调用对应ip地址的action请求!通过这种枚举的方式解决

但是,如果ip地址不是固定的几个!那就只能自己写jdbc来动态链接数据库了!代码参考3.2.1的baas ,需要自己写
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

66

主题

350

帖子

2017

积分

金牌会员

Rank: 6Rank: 6

积分
2017
 楼主| 发表于 2016-1-12 13:36:29 | 显示全部楼层
liangyongfei 发表于 2016-1-12 09:57
因为数据源的连接,在服务器启动的时候就连接上了!
如果是自己写数据库连接的话,只能用原生的jdbc 来写 ...

数据库IP不是固定的,数量也不定,如果能固定我添加不同数据源就能解决问题。
3.3创建Connection是先读取context.xml配置文件,比如
String source = ""jdbc:mysql://127.0.0.1:3306/takeout", "root", "x5"";
//处理source
if (需要处理的条件){
对source 中的字符进行替换,如127.0.0.1处理为192.168.0.11,root处理为guest
source  = ""jdbc:mysql://192.168.0.11:3306/takeout", "guest", "x5"";
}
Connection conn = DriverManager.getConnection(source );
现在就要找到3.3中读取数据源配置的方法,以便修改它。(单独写服务可以实现,但是现在用3.3的baas写完,只差这个数据库IP切换的问题,先不考虑单独写服务,重新服务相当于重建项目)
3.3数据源连接方法是封装在baasserver里面的jar包baas-api.jar里面,目前只找到ConnectionWrapper方法与数据源相关,请问获取数据源配置的方法是哪个?
回复 支持 反对

使用道具 举报

发表于 2016-1-12 16:57:30 | 显示全部楼层
teky 发表于 2016-1-12 13:36
数据库IP不是固定的,数量也不定,如果能固定我添加不同数据源就能解决问题。
3.3创建Connection是先读取c ...

目前baas没有处理数据源连接,这部分交给了web容器处理;
如果要动态创建数据连接,需要开发者自己管理数据源连接池;源码可以看source下的baas-api;
public static Connection getConnection(String name) {
  InitialContext initCtx;
  try {
   initCtx = new InitialContext();
   DataSource ds = (DataSource) initCtx.lookup(name);
   Connection conn = ds.getConnection();
   return conn;
  } catch (NamingException | SQLException e) {
   throw new com.justep.baas.data.sql.SQLException("获取数据库["+name+"]连接失败,可能原因:数据库已经关闭或者数据源配置错误", e);
  }
}
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

66

主题

350

帖子

2017

积分

金牌会员

Rank: 6Rank: 6

积分
2017
 楼主| 发表于 2016-1-13 15:29:15 | 显示全部楼层
liangyongfei 发表于 2016-1-12 16:57
目前baas没有处理数据源连接,这部分交给了web容器处理;
如果要动态创建数据连接,需要开发者自己管理数 ...

你说的动态创建数据连接是哪个类?具体路径是?
我找到个ActionContext类,但是写方法和你的不一样。
// 获取一个原生连接,需要开发者管理
        public Connection newConnection(String datasource) throws SQLException, NamingException {
                String name = datasource;
                if (null != DBConfig && DBConfig.containsKey(name))
                        name = DBConfig.getString(name);
                System.out.println("ActionContext的newConnection=" + name);
                return DataUtils.getConnection(name);
        }
回复 支持 反对

使用道具 举报

66

主题

350

帖子

2017

积分

金牌会员

Rank: 6Rank: 6

积分
2017
 楼主| 发表于 2016-1-14 19:21:59 | 显示全部楼层
teky 发表于 2016-1-13 15:29
你说的动态创建数据连接是哪个类?具体路径是?
我找到个ActionContext类,但是写方法和你的不一样。
//  ...

结了吧,只能自己写服务解决。
回复 支持 反对

使用道具 举报

1

主题

7

帖子

19

积分

新手上路

Rank: 1

积分
19
QQ
发表于 2016-5-20 16:15:48 | 显示全部楼层
一个新手的思路。
在config.xml中配两个数据源。第一个用于读i第二个数据源的ip,第二个做为动态数据源
在创建时所有action 都使用第二个创建。我们在进入页面时先读第一个数据库读出第二个数据源的ip然后通过后端代码读写config.xml文件,判断第二个数据源的ip.如果一样不写,如果不一样,重写第二个数据源的IP。然后就可以进入以第二个做数据源的程序了。
代码我不会写。以前学过点asp,就以asp的思路说的。就是你发布后。在前面加一个页面判断读写就可以了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2024-5-19 15:55 , Processed in 0.057784 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表