Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

[Resolved] Профиль maven не заменяет данные в Properties


(Alex) #1

Имеется следующий код:

ConfigProperties
***
public class ConfigProperties {
private static Properties PROPERTIES;
static {
	try {
		PROPERTIES = new Properties();
		PROPERTIES.load(new InputStreamReader(new FileInputStream("src/main/resources/config.properties"), "UTF-8"));
		}catch (IOException e){
		e.printStackTrace();
		}
}
public static String getProperty(String key){
	return PROPERTIES.getProperty(key);	
}
}
***
POM.xml
***
<name>SL_Frame</name>  
  	  	<properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  <aspectj.version>1.8.4</aspectj.version>
    <allure.version>1.3.9</allure.version>
  </properties>
  <profiles>
  <profile>
  <id>TestSuite</id>
   <properties>    
  	<login>admin</login>
  	<password>admin</password>	 
   </properties>
  <activation>
    <activeByDefault>true</activeByDefault>
   </activation>
  </profile>  
      </profiles>
  <build>
  <resources> 
	<resource>
	<directory>src/main/resources</directory>
	<filtering>true</filtering>
	</resource>
</resources>

***
TestExample
***
public class Example {
	public static void main(String[] args) {			
		String a = ConfigProperties.getProperty("login");		
		System.out.println(a);		
	}
}

В результате вывода на экран getProperty("login") мне выдает ${login}, почему?


(Sergey Korol) #2

Покажите содержимое файла с пропертями. Интересует именно блок с логином / паролем.


(Alex) #3

Файл config.properties

login=${login}
password=${password}

Следующий код заменяющий ConfigProperties решает проблему, но я не понимаю в чем была проблема:


public class ConfigProperties {
private static Properties PROPERTIES;
static {
	PROPERTIES = new Properties();
	URL props = ClassLoader.getSystemResource("config.properties");
	try {
		
		PROPERTIES.load(new InputStreamReader(props.openStream(), "UTF-8"));
		}catch (IOException e){			
		e.printStackTrace();
		}
}
public static String getProperty(String key){
	return PROPERTIES.getProperty(key);	
}
}

По сути произошла замена FileInputStream на

ClassLoader.getSystemResource("config.properties");

Если возможно поясните в чем может быть проблема использования FileInputStream?


(Sergey Korol) #4

Во втором случае вы подгрузили ресурс, который содержался в classpath, т.е. к нему применился resource filtering, указанный в pom, позволяющий распознавать переменные типа ${name} в пропертях. В первом же случае вы читали файл стандартным способом, т.е. фильтрация ресурсов тут просто не сработала.


(Taras) #5

а я такое spring-ом делаю, там есть специальний Property bean reader которий умеет с пропертями делать все что угодно


(Alex) #6

Спасибо за ответы.