论坛首页 Java企业应用论坛

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

浏览 14294 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (3) :: 隐藏帖 (6)
作者 正文
   发表时间:2011-07-05  
hi这是修改方式 供你参考。 你可以通过Spring容器获取当前bean当然可以修改其中所有可修改属性,当然如果系统在运行中,修改用户,密码,数据库连接 照成的影响是不可预估的啊,楼主三思

BoneCPDataSource bcpPool = (BoneCPDataSource) WebApplicationContextUtils.getWebApplicationContext(request.getSession().getServletContext()).getBean("dataSource");
  bcpPool.setMaxConnectionsPerPartition(160);
  bcpPool.setMinConnectionsPerPartition(30);
0 请登录后投票
   发表时间:2011-07-05  
你这样做的,可能connection pool的问题比较大,要每一个用户有一个pool了,而不是全局的pool
0 请登录后投票
   发表时间:2011-07-05   最后修改:2011-07-05

 

<bean id="propertyConfigurer" class="com.xx.util.PropertyConfigPwd">
    <property name="locations">
          <list>
               <value>classpath*:jdbc.properties</value>
           </list>
    </property>
</bean>


PropertyConfigPwd 自己定义个类
public class PropertyConfigPwd extends PropertyPlaceholderConfigurer 继承PropertyPlaceholderConfigurer
重写这个方法
protected String convertPropertyValue(String originalValue)
里面自己处理吧

希望对楼主有帮助
 

 

 

0 请登录后投票
   发表时间:2011-07-05  
配置Spring的多数据源,要让Spring一启动就加载所有数据源,比如DataSource1,DataSource2……,可以把所有配置的数据源注入到一个map中,然后在程序里面根据业务逻辑选择需要使用的数据源。

这个需求能不能绕过去呀,太别扭了
0 请登录后投票
   发表时间:2011-07-05  
没用过spring动态改变
用过jpa动态切换数据源的
我写过一个:http://vtrtbb.iteye.com/blog/674810

你看看是否有帮助

就是有一次不小心把格式弄没了,哪天整理个完整的上来
0 请登录后投票
   发表时间:2011-07-06  
动态注入datasource是可以实现的,但我真的想不明白什么需求能导致这样的设计。。。。。
0 请登录后投票
   发表时间:2011-07-06  
ywlqi 写道
动态注入datasource是可以实现的,但我真的想不明白什么需求能导致这样的设计。。。。。



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

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

按照你的方法,如何再创建一个jdbcTemplate对象,怎么样才能把你建的数据源加进去呢?

 

	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;
	}

 

 

 

上面的方法返回ComboPooledDataSource 这个其实是继承了DataSource

 

那这样我们调用一下方法申明一个DataSource ds = buildDataSource(...);

在重新定义jdbcTemplate = new JdbcTemplate(ds);  

就可以了

 

这样你可以用jdbcTemplate了~~~

0 请登录后投票
   发表时间:2011-07-06  
做项目的目的应该是简洁,如果实现起来很有问题,很麻烦,一定是你的设计出现了问题!
0 请登录后投票
   发表时间:2011-07-14  
楼主解决了吗,怎么解决的?能不能总结一下,最近也碰到这个问题了
0 请登录后投票
论坛首页 Java企业应用版

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