2015-09-28 111 views
0

我的Spring應用程序依賴於在應用程序啓動之前需要設置的某些環境變量。拋出異常終止Spring應用程序啓動

例如,考慮以下控制器:

@Controller 
public class FileUploadController { 

    /** Path to which all data will be uploaded **/ 
    private Path appDataPath; 

    public FileUploadController(){ 
     // Extract the App Data path from environment variables 
     Map<String, String> environmentVariables = System.getenv(); 

     if (environmentVariables.containsKey("MYAPP_DATA_DIR")) { 
      String dataPath = environmentVariables.get("MYAPP_DATA_DIR"); 
      appDataPath = Paths.get(dataPath); 
     } else { 
      // TODO: Throw an exception to terminate app 
     } 
    } 
} 

我需要在上面的代碼中拋出什麼異常來終止應用程序啓動?

+1

不要在你的控制器中這麼做......只要使用'@ Value',應用程序在未設置時就會自動炸燬,你只是複雜的事情。 –

回答

2

你使事情複雜,或者簡單注入的路徑String和註釋與@Value或注入Environment和使用getRequiredProperty他們兩人都自動殺應用程序的啓動。

@Controller 
public class FileUploadController { 

    @Value("${MYAPP_DATA_DIR}" 
    private String dataPath; 

    private Path appDataPath; 


    @PostConstruct 
    public void init() { 
     appDataPath = Paths.get(dataPath); 
    } 
} 

或者乾脆用在@PostConstruct方法Environment抽象。

@Controller 
public class FileUploadController { 

    @Autowired 
    private Environment env; 

    private Path appDataPath; 

    @PostConstruct 
    public void init() { 
     appDataPath = Paths.get(env.getRequiredProperty("MYAPP_DATA_DIR")); 
    } 
} 

當屬性未定義時,兩者都會自動炸燬。

+0

正是我想要的!謝謝! – balajeerc

-1

Spring Framework是Java Enterprise Container的一個實現!

根據Java Enterprise Containers的定義,您需要拋出RuntimeException的子類!它們不需要由容器或調用代碼來處理。

如果你的強制環境變量沒有設置,你的應用程序根本無法啓動,那麼你需要通知並退出。

我會從RuntimeException創建一個SubClass異常並使用該Exception類!

如果您的Spring Framework實現有一些嚴格的要求(即RuntimeException,ApplicationException的一些Spring子類),那麼您可以繼承該類。但我不認爲春季在這個問題上是有限制的......

相關問題