2017-10-17 169 views
-1

我用eclipse制作了一个web项目来在Tomcat v7上运行我的webservice。我有一个配置文件,必须定义一些变量,这些变量应该在Web服务器启动时更改,而无需重新启动它。问题是:我可以把这个文件放在哪里? 目前我已经把它放到“./”目录中,但似乎当我导出WAR文件并将其安装在网络服务器上时,它不起作用。有没有办法在WAR中创建这个文件并修改它的运行时?在Java导出的运行时创建配置文件WAR

这里是.class文件的访问配置文件

public class ToolConfigurations { 
    private static final Logger log = LogManager.getLogger(ToolConfigurations.class); //Oggetto logging 

    private static ToolConfigurations instance = null; //verificarne la necessità 

    private static String defaultServerName = null; 
    private static String defaultDbName = "postgres"; 
    private static String defaultDbUser = "postgres"; 
    private static String defaultDbPass = "password"; 
    private static int defaultDbMaxConnNum = 10; 

    private static String configFilePath = ".\\"; 
    private static String configFileName = "tool.properties"; 
    private String serverName = null; 
    private String dbName = null; 
    private String dbUser = null; 
    private String d`enter code here`bPass = null; 
    private int dbMaxConnNum = -1; 

    private ToolConfigurations() throws Exception { 
     File file = new File(configFilePath + configFileName); 
     if(file.exists()) { 
      //file configurazione esiste 
      FileReader in = new FileReader(file); 
      BufferedReader br = new BufferedReader(in); 
      String line = null; 

      while((line = br.readLine()) != null) { //Leggo riga per riga il file 
       String[] values = line.split(" "); 
       switch (values[0]) { 
        case "serverName": 
         serverName = values[1]; 
         break; 
        case "dbName": 
         dbName = values[1]; 
         break; 
        case "dbUser": 
         dbUser = values[1]; 
         break; 
        case "dbPass": 
         dbPass = values[1]; 
         break; 
        case "dbMaxConnNum": 
         dbMaxConnNum = Integer.parseInt(values[1]); 
         break; 
        default: 
         log.warn("Elemento inaspettato nel file di configurazione: " + values[0]); 
         break; 
       } 
      } 

      br.close(); 
      in.close(); 
     }else { 
      if(file.createNewFile() == false) { 
       //Errore creazione file 
       log.error("Errore creazione file di configurazione"); 
       throw new Exception("Errore creazione file configurazione"); 
      } 
      //CREO FILE CONFIGURAZIONE CON IMPOSTAZIONI DI DEFAULT 
      FileWriter fw = new FileWriter(file); 
      fw.write("dbName " + defaultDbName + "\r\n"); 
      fw.write("dbUser " + defaultDbUser + "\r\n"); 
      fw.write("dbPass " + defaultDbPass + "\r\n"); 
      fw.write("dbMaxConnNum " + defaultDbMaxConnNum + "\r\n"); 
      fw.flush(); 
      fw.close(); 
      log.warn("File di configurazione non trovato. Path: " + file.getAbsolutePath() + ". Creato nuovo file con configurazioni di default."); 
      //CARICO IMPOSTAZIONI DI DEFAULT 
      dbName = defaultDbName; 
      dbUser = defaultDbUser; 
      dbPass = defaultDbPass; 
      dbMaxConnNum = defaultDbMaxConnNum; 
     } 
    } 

    public static synchronized ToolConfigurations getInstance() throws Exception { 
     if(instance == null) { 
      instance = new ToolConfigurations(); 
     } 
     return instance; 
    } 
    ... 
+0

WAR的并不意在运行时进行修改。也就是说,你可以操纵爆炸(解压缩)的战争。我会建议反对它。您可能会发现将您的配置放在JNDI中是一个更好的主意。 –

+0

我需要一个地方放置并从我放置的环境中独立地访问我的配置文件。 –

回答

0

我发现的最佳解决方案是使用ClassLoader来搜索我以前在主目录中创建的配置文件。 使用的例子是:

ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); 
InputStream fileInput = classLoader.getResourceAsStream(configFileName); 
if(fileInput == null){ 
    //File not found 
}else{ 
    //File found 
    InputStreamReader sr = new InputStreamReader(fileInput); 
    BufferedReader br = new BufferedReader(sr); 
    try { 
     while((line = br.readLine()) != null) { 
      //Read file line by line 
     } 
    }catch (IOException e) { 
     throw new IOException("Error parsing file: " + e.getMessage()); 
    } 
} 

0

在Web服务器的部分代码,文件以外的.class直接由服务器所掌管。您不需要重新加载服务器。

但尝试使用.properties文件并检查部署在服务器上时WAR的结构。

+0

是的,我正在使用.properties文件,但问题是:如何链接相对它? –

+0

请特别注意你的代码的一部分,如何访问你的文件。 – Skykaza

+0

您可能会发现https://stackoverflow.com/q/1188400/53897有趣。 –