[英]sharing object across different classes
我需要一些“設計”建議。 我有靜態JDBC對象和“主條目類”,它們在其他類之間共享。
我的MainClass
看起來像這樣:
public static Jdbc db1;
public static Jdbc db2;
connectDb(makeDirectConnection) // depending on runtime passed argument
public static connectDb(boolean makeDirectConnection) {
if(makeDirectConnection) // use direct connection
db1 = JdbcFactory.getInstance("db/config/main/db1.properties");
db2 = JdbcFactory.getInstance("db/config/main/db2.properties");
} else { // connect using via SSH tunnel (different host and port)
db1 = JdbcFactory.getInstance("db/config/tunnel/db1.properties");
db2 = JdbcFactory.getInstance("db/config/tunnel/db2.properties");
}
JdbcFactory
維護實例Map
。
挺好的,但是如果我想對正在使用db1
或db2
類進行單元測試,則如果從單元測試中不執行MainClass.dbConnect()
則會得到空指針異常
更糟糕的是-從測試類中,我什至需要一個不同的數據庫設置,因此在Test.class
我需要:
Main.db1 = JdbcFactory.getInstance("db/config/test/db1.properties");
總的來說,這很混亂,我不喜歡。 沒有更好的方法共享db1
和db2
嗎?
另外,從java run參數定義的boolean makeDirectConnection
阻止我使用final
db1
和db2
。 任何建議如何解決此問題? (這取決於執行程序的環境-但我不想使其依賴於主機名或其他操作系統。
我不會提供布爾值作為jvm參數來區別您的兩種(或三種)情況。 相反,我將通過參數提供數據庫URL。 在這種情況下,您還可以使用“ test-db.properties”在測試中調用您的方法。
由於需要為測試和部署分別設置默認實例。 因此,創建一個屬性文件 ,其中提到應使用哪個文件來創建db1
和db2
默認實例。
要消除從單元測試代碼中調用MainClass.dbConnect()
的需要,只需創建一個靜態塊,然后在此處使用默認值初始化db1
和db2
。 例如,如果屬性文件是defaultDB.properties
並且具有以下內容:
DB1=db/config/test/db1.properties
DB2=db/config/test/db2.properties
然后使用以下命令:
static private Properties prop;
static {
prop = new Properties();
prop.load(new FileInputStream("defaultDB.properties"));
db1 = JdbcFactory.getInstance(prop.getProperty("DB1"));
db2 = JdbcFactory.getInstance(prop.getProperty("DB2"));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.