论坛首页 Java企业应用论坛

struts2+spring3,spring3有没有办法动态改到datasourse中的user及password

浏览 14280 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (3) :: 隐藏帖 (6)
作者 正文
   发表时间:2011-07-04  
以前做过这么一个项目,对连接池的源代码进行过改动:
1、不管spring怎么弄,一般情况下,是要通过连接池获取实际的数据库连接;
2、在连接池管理器中,实现动态创建新的连接功能,譬如,我这边改造的proxool连接池
0 请登录后投票
   发表时间:2011-07-04  
能不能把你的代码贴出来,看下
0 请登录后投票
   发表时间:2011-07-04  
newstong1 写道
kyan54 写道
cheng888qi 写道
继承下com.mchange.v2.c3p0.ComboPooledDataSource,覆盖setUser, setPassword,自己从数据库读取不行吗?

 

 

 

 

属性文件可以自己动态创建吧?

下面代码应该可以实现你说的这种

 

 

	private ComboPooledDataSource buildDataSource(Properties property)
			throws PropertyVetoException {
		ComboPooledDataSource ds = new ComboPooledDataSource();
		   //加载DataSource驱动
	      ds.setDriverClass(property.getProperty(DRIVER_CLASS));
	      //设置连接数据库的url
	      ds.setJdbcUrl(property.getProperty(JDBC_URL));
	      //设置数据库用户名
	      ds.setUser(property.getProperty(USER));
	      //设置数据库密码
	      
	      ds.setPassword(property.getProperty(PASSWORD));
	      //设置池的最大连接数
	      
	      ds.setMaxPoolSize(Integer.parseInt(property.getProperty(MAX_POOL_SIZE)));
	      //设置池的最小连接数
	      ds.setMinPoolSize(Integer.parseInt(property.getProperty(MIN_POOL_SIZE)));
	      ds.setMaxStatements(Integer.parseInt(property.getProperty(MAX_STATEMENTS)));
	      ds.setMaxIdleTime(Integer.parseInt(property.getProperty(MAX_IDLETIME)));
	      ds.setInitialPoolSize(Integer.parseInt(property.getProperty(INITIAL_POOLSIZE)));
	      ds.setCheckoutTimeout(Integer.parseInt(property.getProperty(CHECKOUT_TIMEOUT)));
	      ds.setIdleConnectionTestPeriod(Integer.parseInt(property.getProperty(IDLECONNECTIONTESTPERIOD)));
		return ds;
	}

 

如果按照这样写法,我原来的super.getJdbcTemplate().queryForInt( )这种方法是不是不能用了

 


可以用,我这个方法返回一个数据源,你在创建一个jdbcTemplate对象,就可以用了

0 请登录后投票
   发表时间:2011-07-04  
如果按照这样写法,我原来的super.getJdbcTemplate().queryForInt( )这种方法是不是不能用了
可以用,我这个方法返回一个数据源,你在创建一个jdbcTemplate对象,就可以用了

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

按照你的方法,如何再创建一个jdbcTemplate对象,怎么样才能把你建的数据源加进去呢?
0 请登录后投票
   发表时间:2011-07-04   最后修改:2011-07-04
用连接池就是为了能共享连接,如果这样的话还使用连接池
其实真正的目的是为了切换schema,而不是切换用户,所以可以加一个过滤器,根据当前用户对应的schema切换过去,在过滤器中执行sql
alter session set current_schema=schema_name
来改变当前session的schema
0 请登录后投票
   发表时间:2011-07-04  
说实在的,每个用户登录的时候切换数据库这种方式非常不安全
0 请登录后投票
   发表时间:2011-07-04  
我见过太多的用户登录切换数据库的系统,让程序充满不确定性,让维护的人员崩溃,呵呵
0 请登录后投票
   发表时间:2011-07-04  
这都是门外汉设计的程序,用一种很业余的办法控制权限!!!!!!!!!!!!!!!!
0 请登录后投票
   发表时间:2011-07-04  
难为了这么多为楼主出谋划策的高人啊
0 请登录后投票
   发表时间:2011-07-05  
hsiss 写道
用连接池就是为了能共享连接,如果这样的话还使用连接池
其实真正的目的是为了切换schema,而不是切换用户,所以可以加一个过滤器,根据当前用户对应的schema切换过去,在过滤器中执行sql
alter session set current_schema=schema_name
来改变当前session的schema



这是什么意思??
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics