通常情況下,我們通過JDBC連接數據庫的時候,不會將數據庫相關配置寫死,因為到時候數據庫一有改動,就要重新打包部署到服務器或者替換相關的.class文件,這樣非常不靈活。因此,咱們一般會通過讀取配置文件的方式來加載數據庫相關配置,這樣到時候只改動配置文件就可以啦,非常的方便。
直接上代碼,下面是java文件:
1 public class SyncDataFn { 2 3 private static String driver; 4 private static String url; 5 private static String username; 6 private static String password; 7 8 static { 9 try { 10 // 1.通過當前類獲取類加載器 11 ClassLoader classLoader = SyncDataFn.class.getClassLoader(); 12 // 2.通過類加載器的方法獲得一個輸入流 13 InputStream in = classLoader.getResourceAsStream("../config/jdbc-interface.properties"); 14 // 3.創建一個properties對象 15 Properties props = new Properties(); 16 // 4.加載輸入流 17 props.load(in); 18 // 5.獲取相關參數的值 19 driver = props.getProperty("driverClassName"); 20 url = props.getProperty("url"); 21 username = props.getProperty("username"); 22 password = props.getProperty("password"); 23 } catch (IOException e) { 24 e.printStackTrace(); 25 } 26 27 } 28 29 public int jxJson() throws Exception { 30 // 創建Statement用於執行SQL語句 31 Statement stmt = null; 32 String strSQL = ""; 33 Connection connection = null; 34 35 //定義同步數據的條數 36 int count = 0; 37 38 try { 39 Class.forName(driver); 40 connection = DriverManager.getConnection(url, username, password); 41 } catch (ClassNotFoundException e) { 42 e.printStackTrace(); 43 } catch (SQLException e) { 44 e.printStackTrace(); 45 } 46 47 // 先關閉Statement 48 if (stmt != null) 49 try { 50 stmt.close(); 51 } catch (SQLException e) { 52 e.printStackTrace(); 53 } 54 // 后關閉Connection 55 if (connection != null) 56 try { 57 connection.close(); 58 } catch (SQLException e) { 59 e.printStackTrace(); 60 } 61 log.info("當前時間===" + new Date()); 62 log.info("同步結束"); 63 log.info("共更新了"+ count + "條數據"); 64 return count; 65 } 66 }
下面是properties文件:
1 driverClassName=oracle.jdbc.OracleDriver 2 url=jdbc:oracle:thin:@172.16.35.35:1521:ecard 3 username=ecard 4 password=ecard
其中有個坑是調用classLoader.getResourceAsStream()獲取properties文件路徑的時候,剛開始怎么也獲取不到,后來問了度娘才知道,他的起始路徑是基於.class的。
總結:如果你想獲得配置文件,你得從最終生成的.class文件為着手點,不要以.java文件的路徑為出發點,因為真正使用的就是.class文件。