Использование профилей maven для настройки кода на основе приложения Spring
У меня есть приложение Spring, которое полностью настроено на основе кода. И я пытаюсь объединить профили Maven для настройки моих соединений БД. Я определил некоторые свойства для локальных, живых и постановочных задач. Теперь я пытаюсь получить контроль над профилями Maven. Каждый профиль определяет мои параметры соединения MySql db. Вот моя текущая настройка:
local.properties-файл:
mysql.username=test
mysql.password=test
mysql.databaseUrl=jdbc:mysql://localhost:3306/test
mysql.databaseDriver=com.mysql.jdbc.Driver
pom.xml
...
<profiles>
<profile>
<id>live</id>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
<properties>
<filterFile>src/main/config/live.properties</filterFile>
</properties>
</profile>
<profile>
<id>local</id>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
<properties>
<filterFile>src/main/config/local.properties</filterFile>
</properties>
</profile>
<profile>
<id>staging</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<filterFile>src/main/config/staging.properties</filterFile>
</properties>
</profile>
</profiles>
...
ApplicationConfig
...
@Value("${mysql.username}")
private String username;
@Bean
public DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setUsername(username);
..
return dataSource;
}
...
Проблема здесь в том, что мои свойства не загружены!
1 ответ
Вы устанавливаете свойство под названием filterFile
во время сборки maven, но на самом деле вам нужно получить значение в ваше приложение, которое затем вам нужно будет использовать для поиска файла для загрузки.
Потенциально лучший способ сделать это - определить значения переменных как свойства в вашем pom:
<profiles>
<profile>
<id>live</id>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
<properties>
<mysql.username>test</mysql.username>
<mysql.password>test</mysql.password>
<mysql.databaseUrl>jdbc:mysql://localhost:3306/test</mysql.databaseUrl>
</properties>
</profile>
<!-- ... -->
</profiles>
Затем включите фильтрацию ресурсов:
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
Например, в файле persistence.properties
:
mysql.username=${mysql.username}
mysql.password=${mysql.password}
mysql.databaseUrl=${mysql.databaseUrl}
mysql.databaseDriver=com.mysql.jdbc.Driver
Наконец, загрузите файл свойств и создайте свой источник данных:
@PropertySource({"classpath:persistence.properties"})
public class DatabaseConfig {
@Autowired
private Environment env;
@Bean
public DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setUsername(env.getProperty("mysql.username"));
// ...
return dataSource;
}
}