通过前台页面修改数据源的配置信息,并在不重启服务的情况下生效!
config.properties的内容:
jdbc.url=jdbc:oracle:thin:@192.168.0.1:1521:orcl
jdbc.username=ormer
jdbc.password=ormerSpring中applicationContext.xml配置
<bean id="configBean" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
           <property name="location"><value>classpath:config.properties</value></property>
</bean>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close"> 
<!-- Connection Info -->
<property name="driverClassName">
<value>oracle.jdbc.driver.OracleDriver</value>
</property>
<property name="url">
<value>${jdbc.url}<value>
</property>
<property name="username">
<value>${jdbc.username}</value>
</property>
<property name="password">
<value>${jdbc.password}</value>
</property>
</bean>
修改数据源的action:
ApplicationContext applicationContext = WebApplicationContextUtils
.getWebApplicationContext(request.getSession()
.getServletContext());
BasicDataSource ds = (BasicDataSource) applicationContext
.getBean("dataSource");
try {
ds.close();// 这里需要先关闭数据源,才可以使新的数据源设置生效
} catch (SQLException e1) {
e1.printStackTrace();
}
ds.setUrl(url);
ds.setUsername(name);
ds.setPassword(password);
需要注意的地方:参数-HttpServletRequest必须的
必须是的WebApplicationContextUtils这获取的是内存中的数据源,set后再次访问的时候数据源就会变的。
动态数据源的实现:修改了内存中的数据源的同时也修改config.properties文件,前提是config文件修改后服务不重启。当下次启动的时候加载的是修改后的config文件,如果不重启当前的数据源也是改变了。spring