2014-02-19 65 views
1

在Java應用程序中存儲MySQL登錄配置設置的最佳方式是什麼?以Java存儲MySQL登錄信息的最佳方式

我想用在Java中的MySQL連接,併成爲好奇

主機/數據庫/登錄/密碼

存儲。我的程序打算成爲多線程,並向每個班級寫入固定的登錄信息看起來不太好。 存儲可以多次使用的驗證數據的最佳方式是什麼?

在PHP中,例如,通常創建帶有全局變量的mysqlinfo.php幷包含在每個文件中。如果某些數據發生更改,則只需修改mysqlinfo.php即可。

但是Java呢?我應該使用全局變量還是應該存儲登錄名/密碼/等。在每個班級的私人字符串?

+0

這是桌面應用程序(在UNIX系統中運行),沒有任何與網絡。 – Tigran

回答

3

如果它是一個服務器應用程序(運行在應用程序或Web服務器中),則可以使用JNDI數據源。或者,您可以將它們存儲在環境變量中。

對於桌面應用程序,您可以使用屬性文件並從中讀取值。再一次,從環境變量中讀取它們是另一種選擇。

+0

使用gloabal變量很好嗎? – Tigran

+2

沒有全局變量這樣的事情。您可以使用靜態屬性創建一個類,以便在應用程序啓動時從屬性文件或環境中讀取所有這些變量。然後,在你需要它們的地方,你可以從類的靜態字段(通過公共getter方法)讀取它們。 –

+0

另外,請確保這些靜態字段保持私密。從本質上講,確保你的類是不可變的。一旦它讀取值,它不應該讓任何其他代碼來改變它。 –

2

答案可能取決於您正在製作的應用程序的種類。既然你提到的PHP我想你想要一個基於Web的應用程序。對於基於Web的應用程序,我寧願將它用作JNDI數據源。使用JNDI,您不會在代碼中存儲任何用戶標識,密碼等。

1

在Java中,對於全局變量,只需創建一個公共類並將其中的全局屬性定義爲static並調用此類。

例如:

public class Globals{ 
public static String a; 
public static int b; 
} 

它可以通過調用Globals.a & Globals.b,但它不是很好的編碼方式像使用全局變量。爲了更好的安全性,使用Amir和Kumar提到的JNDI。

1

這一切都取決於登錄信息是否應該保密。對於桌面應用程序,JNDI似乎有點矯枉過正,因爲您需要自己管理它。

基本上,你有2種選擇:

  1. 保留設置的屬性文件。如果登錄信息需要保密,您可以對這些數據進行加密,以確保人們不能只讀取它並使用該信息。
  2. 把信息固定在你的代碼中。這不是一個非常便攜的解決方案,因爲當您想要更改任何這些信息時,您必須重新編譯所有內容。
1

通常,您希望管理應用程序的外部連接信息,例如在配置文件中。然後,您可以完全控制應用程序可以連接到哪個數據庫,而不必使用硬編碼的數據庫。如果我無法將應用程序掛接到測試數據庫或故障轉移數據庫,而無需構建它的新版本,我將非常不高興!

再加上也許更重要的是:那麼有人可以管理,而不需要知道應用程序的內部;你希望自己處於可以構建應用程序的位置,然後讓其他人擔心支持它。

相關問題