@Value: Исключение при Spring Injection автоматических зависимостей с application-'profile'.properties - PullRequest
0 голосов
/ 02 октября 2019

Приложение имеет 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

Ответы [ 2 ]

0 голосов
/ 02 октября 2019

Я пропустил плагин maven:

<build>
 <plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-resources-plugin</artifactId>
        <version>3.1.0</version>
    </plugin>
 </plugins>
</builds>
0 голосов
/ 02 октября 2019

В вашем стандартном application.properties я думаю, что вы хотите следующее:

spring.profiles.active=@activatedProperties@

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...