spring的配置文件是在容器启动的时候就加载到内存中的,如果手动改了application.xml,我们必须要重新启动服务器配置文件才会生效。而在spring中提供了一个类WebApplicationContext,这个类可以让你获得一些bean,可以修改内存中的信息,我就是通过这个类来实现的。下面是我具体的代码。
package com.southdigital.hospital
import java.io.IOException
import javax.servlet.ServletContext
import javax.servlet.ServletException
import javax.servlet.http.HttpServlet
import javax.servlet.http.HttpServletRequest
import javax.servlet.http.HttpServletResponse
import org.springframework.web.context.WebApplicationContext
import org.springframework.web.context.support.WebApplicationContextUtils
import com.mchange.v2.c3p0.ComboPooledDataSource
public class ChangeSpringConfig extends HttpServlet
{
private String ipAddress = "127.0.0.1"
/**
* The doGet method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to get.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
doPost(request, response)
}
/**
* The doPost method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to post.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
//先取得servleContext对象,提供给spring的WebApplicationUtils来动态修改applicationContext.xml
ipAddress = request.getParameter("ipAddress")
System.out.println(ipAddress)
ServletContext servletContext = this.getServletContext()
WebApplicationContext applicationContext = WebApplicationContextUtils.getWebApplicationContext(servletContext)
ComboPooledDataSource cpds = (ComboPooledDataSource) applicationContext.getBean("dataSource")
cpds.setJdbcUrl("jdbc:mysql://"+ipAddress+":3306/ssh")
}
}
注意:通过这种方法修改applicationContext.xml文件的时候用c3p0,而不可以用dbcp,dbcp不支持动态修改读取到内存里面的数据。
spring 3.1已经支持了。
你是说properties文件吗?
// 读取配置文件DbUtil.properties,这里的DbUtil是此文件里的一个类,就是当前类p.load(DbUtil.class.getClassLoader().getResourceAsStream("DbUtil.properties"))
// 获取配置文件中的相关参数值
driver = p.getProperty("mysqlDriver")
url = p.getProperty("mysqlUrl")
user = p.getProperty("mysqlUser")
password = p.getProperty("mysqlPassword")
这里是DbUtil.properties文件里的内容:
##oracle databaseoracleDriver=oracle.jdbc.driver.OracleDriver
oracleUrl=jdbc\:oracle\:thin\:@localhost\:1521\:orcl
oracleUser=scott
oraclePassword=tiger
##mysql database
mysqlDriver=com.mysql.jdbc.Driver
mysqlUrl=jdbc\:mysql\://localhost\:3306/db_test
mysqlUser=root
mysqlPassword=root
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)