经理要求所有的取数推数接口全部封装在一个main函数中,然后打包写成bat批处理文件,但是里面的接口推数的数据库连接是不同的。同事们写的数据库连接都是公用同一个conn,每次执行哪个接口就修改数据库池的url,user和password。如果要包装成批处理文件,那么需要创建一个方法用于动态创建数据库连接。
首先,由于项目还是比较庞大的,不可能创建多个conn,然后修改代码神马的,唯一的办法就是要修改三个参数url,user和password。可是如果在数据库池java文件中将这三个参数设置为属性,然后每次调用的时候通过反射修改属性值,这样的可行性也是很差的。本来java就是面向对象的,修改属性显然就是破坏了它的封装。
其次,用try/catch捕获当视图不存在时切换数据库,这样明显三个漏洞:第一try/catch的本来目的就是捕获异常,而非做判断;第二这样速度非常的慢,显然也是不可以取;第三前提是保证每个数据库的对象是唯一的。
最后终于是在万恶的地铁上被人潮挤出了一丝思绪:配置一个数据库连接参数属性文件。
@ 在项目下创建【动态连接数据库配置文件.tex】
文本内容:jdbc:oracle:thin:@//xxx.xxx.xx.xxx:1521/orcl,user,pass,
@ 写两个方法:
1.读取文本文件的配置信息方法:String readTxtFile()
代码参考:
public static String readTxtFile() throws IOException{
String read;
bufread= new BufferedReader(new FileReader(filename));
while((read=bufread.readLine())!=null){
readStr=(readStr+read);
}
System.out.println("读取配置文件信息:"+readStr);
return readStr;
}
-------------------------------------------------------------
2.修改数据库连接配置信息的方法:replaceTxtByStr(String replaceStr)
代码参考:
public static void replaceTxtByStr(String replaceStr) throws IOException{
PrintWriter pw = new PrintWriter(new FileOutputStream(new File(path)));
pw.write(replaceStr);
pw.flush();
pw.close();
}
-----------------------------------------------------------------------------
@ 创建一个标志,用于读取不同字符串的信息
String writeABC,writeJQ,writeStr是不同数据库连接的配置信息
jdbc:oracle:thin:@//xxx.xxx.xx.xxx:1521/orcl,user,pass,
public static void writeTxtFile(String conn) throws IOException{
if(conn.equals("ABC")){
replaceTxtByStr(writeABC);
}else if(conn.equals("JQ")){
replaceTxtByStr(writeJQ);
}else if(conn.equals("0")){
replaceTxtByStr(writeStr);
}
}
---------------------------------------------------------------------
@ 而数据库池在接收参数时都是动态从文本中读取就无需用户每次手工指定了。
这样就完成了动态创建数据库的方法。
----------------------------------------------------------------------------
最后总结:
通过属性配置文件,可以实现数据库动态创建连接。
甚至是用户从前台传入的动态修改增加数据库连接都是可以通过这个方法实现的,非常灵活。
不过就是不知道读取配置文件的io操作对性能的影响有多大,我也是新手来的,要是有人有更好的方法请留言。