当TomCat启动后能不能更改Spring的数据库连接,如何改

当TomCat启动后能不能更改Spring的数据库连接,如何改?
[b]问题补充:[/b]
问题描述:
当进入系统前会有一个数据库连接选择,其中主要是改变连接的用户名和密码,但每次服务一启动,就自动加载了applicationContext.xml,不论你怎么改用户名,都只是前一次的,如何做才能达到我想要的?
[b]问题补充:[/b]
我用的是spring+jpa+flex
[b]问题补充:[/b]
手动加载spring的配置文件:
具体如何实现?
[b]问题补充:[/b]
ContextLoader contextLoader = new ContextLoader();
contextLoader.initWebApplicationContext(request.getSession().getServletContext());

找不到applicationContext.xml,它给的路径是/WEB-INF/applicationContext.xml,而我的是在/WEB-INF/classes/applicationContext.xml下的,怎样改啊?
[b]问题补充:[/b]
但是它出错啦,当刷新页面,切换数据库时:
Cannot initialize context because there is already a root application context present - check whether you have multiple ContextLoader* definitions in your web.xml

10个回答

spring把WebApplicationContext作为ServletContext的一个属性存放着,
所以你得把contextLoader 作为ServletContext的一个属性存放着
你得判断下嘛,如果存在,就不进行contextLoader.initWebApplicationContext(request.getSession().getServletContext()); ,如果要切换数据库,再就用contextLoader.closeWebApplicationContext(request.getSession().getServletContext()));
再重新contextLoader.initWebApplicationContext(request.getSession().getServletContext());

动态修改了数据库连接,除非你重新让spring加载所有bean,不然, 使用的还是之前的数据库连接

同时配置多个数据源,然后每个数据源给配置一个类似于JdbcTemplate一样的封装对象,这样如果有切换数据库的需求时,切换成不同的jdbcTemplate;这样应该可以满足需求吧?

一般都是选择了以后,还需要重新启动一次的.

那就配置一个跟JdbcTemplate地位相同的SessionFactory不就OK了吗?唯一的问题就是多启动了一个数据库而已,如果你不介意这点损失的话应该OK;要不就动态修改XML配置文件,然后重启下Spring;

那你就不要在web.xml里配置spring的加载listener或servlet,

在当进入系统前会有一个数据库连接选择之后,你手动加载spring的配置文件,就行了

参考ContextLoaderListener类里的初始化方法,就行了

不要用tomcat的连接池了,自己写一个datasource实现,用代理模式,启动的时候再把用户名口令传进去

MyDataSource implements DataSource {
private String username;
private String password;

public void setUsername(...)...
public void setPassword(...)...

public Connection getConnection() {
if (username==null || password==null)
throw new SQLException...
return DriverManager.getConnection("", "", username, password);
}
}

进入系统前会有一个数据库连接选择,改变连接的用户名和密码之后,
用dom4j去操作spring配置文件把相应的连接的用户名和密码设置到相应位置,不过最好是spring配置文件里的连接的用户名和密码是以占位符的形式,然后就只要新建一个properties文件把连接的用户名和密码写到里面就完成配置文件的修改了,

接下来,就是要用手动去加载spring的配置文件了
在servlet里调用
ContextLoader contextLoader = new ContextLoader();
contextLoader.initWebApplicationContext(request.getSession().getServletContext());

你把applicationContext.xml文件拷过去不就行了

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问