Приложение имеет 3 разных файла application.properties
application.properties
application-aws.properties
application-local.properties
по умолчанию:
spring.profiles.active=@spring.profiles.active@
по другим 2
amazon.access.key=accesskey
amazon.access.secret-key=secretkey
amazon.region=local
amazon.end-point.url=localhost:8000
В конфигурациикласс:
@Configuration
public Class AmazonConfig(){
@Value("${amazon.access.key}")
private String awsAccessKey;
@Value("${amazon.access.secret-key}")
private String awsSecretKey;
@Value("${amazon.region}")
private String awsRegion;
@Value("${amazon.end-point.url}")
private String awsDynamoDbEndPoint;
...
}
В pom.xml
<build>
<finalName>${project.name}</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
...
<profiles>
<profile>
<id>local</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<spring.profile.active>local</spring.profile.active>
</properties>
</profile>
<profile>
<id>aws</id>
<properties>
<spring.profile.active>aws</spring.profile.active>
</properties>
</profile>
</profiles>
При попытке создать приложение с помощью mvn spring-boot:run -P aws/local
Я получаю следующую ошибку на аннотированных атрибутах @Value
INFO: The following profiles are active: @spring.profiles.active@
WARN: IllegalArgumentException - Injection of autowired dependencies failed - Could not resolve placeholder 'amazon.access.key' in value "${amazon.access.key}"
В некоторых ссылках здесь говорится, что после $ есть пробел, например:
@Value("${amazon.access.key}")
на это:
@Value("$ {amazon.access.key}")
Мое намерение состоит в том, чтобы иметь возможность запускать «локальные» конфигурации, чтобы он обращался к моему локальному контейнеру с помощью
mvn spring-boot:run -P local
и когда я хочу проверить конфигурацию AWS
mvn spring-boot:run -P aws