精华帖 (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); |
|
返回顶楼 | |
发表时间:2011-07-05
你这样做的,可能connection pool的问题比较大,要每一个用户有一个pool了,而不是全局的pool
|
|
返回顶楼 | |
发表时间: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) 里面自己处理吧 希望对楼主有帮助
|
|
返回顶楼 | |
发表时间:2011-07-05
配置Spring的多数据源,要让Spring一启动就加载所有数据源,比如DataSource1,DataSource2……,可以把所有配置的数据源注入到一个map中,然后在程序里面根据业务逻辑选择需要使用的数据源。
这个需求能不能绕过去呀,太别扭了 |
|
返回顶楼 | |
发表时间:2011-07-05
没用过spring动态改变
用过jpa动态切换数据源的 我写过一个:http://vtrtbb.iteye.com/blog/674810 你看看是否有帮助 就是有一次不小心把格式弄没了,哪天整理个完整的上来 |
|
返回顶楼 | |
发表时间:2011-07-06
动态注入datasource是可以实现的,但我真的想不明白什么需求能导致这样的设计。。。。。
|
|
返回顶楼 | |
发表时间:2011-07-06
ywlqi 写道 动态注入datasource是可以实现的,但我真的想不明白什么需求能导致这样的设计。。。。。
如何动态注入datasource呢?? |
|
返回顶楼 | |
发表时间: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了~~~ |
|
返回顶楼 | |
发表时间:2011-07-06
做项目的目的应该是简洁,如果实现起来很有问题,很麻烦,一定是你的设计出现了问题!
|
|
返回顶楼 | |
发表时间:2011-07-14
楼主解决了吗,怎么解决的?能不能总结一下,最近也碰到这个问题了
|
|
返回顶楼 | |