idea中定义utils和配置文件连接数据库,删除配置文件,修改utils中配置文件后程序依然运行?

idea中定义utils和配置文件连接数据库,删除配置文件,修改utils中配置文件后程序依然运行?,第1张

项目,需要访问多个数据库,而且需要在服务器运行不重新启动的情况下,动态的修改spring中配置的数据源datasource,在网上找了很多资料,最后找到了适合我的方法,下面总结一下。

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 database

oracleDriver=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


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10000482.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存