web-dev-qa-db-fra.com

Spring Boot ne reconnaît pas le fichier application.properties

J'essaie de configurer un client DynamoDb avec Spring Boot et ai placé mes points de terminaison et mes informations de configuration dans mon fichier resources/application.properties. Cependant, Spring Boot ne semble pas avoir ces propriétés. Il récupère la clé "server.default" que j'ai enregistrée dans le même fichier, il reconnaît donc le fichier lui-même. 

Voici mon fichier application.properties et la classe dans laquelle je tente de charger des propriétés dans (DynamoDBClientMapper):

Amazon.dynamodb.endpoint=http://localhost:8000/
Amazon.dynamodb.region=us-west-1
Amazon.aws.accesskey=key
Amazon.aws.secretkey=key2

server.port=8080

Voici la structure de mon projet:  enter image description here

Voici la classe pertinente dans laquelle j'essaie de charger des propriétés. J'ai essayé l'annotation @PropertySource avec un nouveau fichier de propriétés, ainsi que EnableAutoConfiguration, mais ni l'un ni l'autre n'enregistrent le ou les fichiers de propriétés.

@PropertySource("database.properties")
public class DynamoClientMapper {

    @Value("${Amazon.dynamodb.endpoint}")
    private String amazonDynamoDBEndpoint;

    @Value("${Amazon.aws.accesskey}")
    private String amazonAWSAccessKey;

    @Value("${Amazon.aws.secretkey}")
    private String amazonAWSSecretKey;

    @Value("${Amazon.aws.region}")
    private String amazonAWSRegion;

Voici mon App.Java:

@SpringBootApplication
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class})
public class App {

//    private static final Logger logger = Logger.getLogger(App.class.toString());

    public static void main(String[] args){
        SpringApplication.run(App.class, args);
    }
}

Voici la trace de la pile:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dynamoClientMapper' defined in file [C:\Users\ychen4\Desktop\DiningApplication\target\classes\main\Java\com\dining\dao\DynamoClientMapper.class]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [main.Java.com.dining.dao.DynamoClientMapper$$EnhancerBySpringCGLIB$$f4ba10ad]: Constructor threw exception; nested exception is Java.lang.IllegalArgumentException: endpoint cannot be null
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.Java:1155) ~[spring-beans-4.3.7.RELEASE.jar:4.3.7.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.Java:1099) ~[spring-beans-4.3.7.RELEASE.jar:4.3.7.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.Java:513) ~[spring-beans-4.3.7.RELEASE.jar:4.3.7.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.Java:483) ~[spring-beans-4.3.7.RELEASE.jar:4.3.7.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.Java:306) ~[spring-beans-4.3.7.RELEASE.jar:4.3.7.RELEASE]
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.Java:230) ~[spring-beans-4.3.7.RELEASE.jar:4.3.7.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.Java:302) ~[spring-beans-4.3.7.RELEASE.jar:4.3.7.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.Java:197) ~[spring-beans-4.3.7.RELEASE.jar:4.3.7.RELEASE]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.Java:761) ~[spring-beans-4.3.7.RELEASE.jar:4.3.7.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.Java:866) ~[spring-context-4.3.7.RELEASE.jar:4.3.7.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.Java:542) ~[spring-context-4.3.7.RELEASE.jar:4.3.7.RELEASE]
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.Java:122) ~[spring-boot-1.5.2.RELEASE.jar:1.5.2.RELEASE]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.Java:737) [spring-boot-1.5.2.RELEASE.jar:1.5.2.RELEASE]
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.Java:370) [spring-boot-1.5.2.RELEASE.jar:1.5.2.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.Java:314) [spring-boot-1.5.2.RELEASE.jar:1.5.2.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.Java:1162) [spring-boot-1.5.2.RELEASE.jar:1.5.2.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.Java:1151) [spring-boot-1.5.2.RELEASE.jar:1.5.2.RELEASE]
    at main.Java.com.dining.App.main(App.Java:18) [classes/:na]
    at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_121]
    at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:62) ~[na:1.8.0_121]
    at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43) ~[na:1.8.0_121]
    at Java.lang.reflect.Method.invoke(Method.Java:498) ~[na:1.8.0_121]
    at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.Java:49) [spring-boot-devtools-1.5.2.RELEASE.jar:1.5.2.RELEASE]
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [main.Java.com.dining.dao.DynamoClientMapper$$EnhancerBySpringCGLIB$$f4ba10ad]: Constructor threw exception; nested exception is Java.lang.IllegalArgumentException: endpoint cannot be null
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.Java:154) ~[spring-beans-4.3.7.RELEASE.jar:4.3.7.RELEASE]
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.Java:89) ~[spring-beans-4.3.7.RELEASE.jar:4.3.7.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.Java:1147) ~[spring-beans-4.3.7.RELEASE.jar:4.3.7.RELEASE]
    ... 22 common frames omitted
Caused by: Java.lang.IllegalArgumentException: endpoint cannot be null
    at com.amazonaws.util.RuntimeHttpUtils.toUri(RuntimeHttpUtils.Java:182) ~[aws-Java-sdk-core-1.11.125.jar:na]
    at com.amazonaws.util.RuntimeHttpUtils.toUri(RuntimeHttpUtils.Java:171) ~[aws-Java-sdk-core-1.11.125.jar:na]
    at com.amazonaws.AmazonWebServiceClient.toURI(AmazonWebServiceClient.Java:238) ~[aws-Java-sdk-core-1.11.125.jar:na]
    at com.amazonaws.AmazonWebServiceClient.setEndpoint(AmazonWebServiceClient.Java:228) ~[aws-Java-sdk-core-1.11.125.jar:na]
    at com.amazonaws.client.builder.AwsClientBuilder.setRegion(AwsClientBuilder.Java:362) ~[aws-Java-sdk-core-1.11.125.jar:na]
    at com.amazonaws.client.builder.AwsClientBuilder.configureMutableProperties(AwsClientBuilder.Java:337) ~[aws-Java-sdk-core-1.11.125.jar:na]
    at com.amazonaws.client.builder.AwsSyncClientBuilder.build(AwsSyncClientBuilder.Java:46) ~[aws-Java-sdk-core-1.11.125.jar:na]
    at main.Java.com.dining.dao.DynamoClientMapper.<init>(DynamoClientMapper.Java:32) ~[classes/:na]
    at main.Java.com.dining.dao.DynamoClientMapper$$EnhancerBySpringCGLIB$$f4ba10ad.<init>(<generated>) ~[classes/:na]
    at Sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.8.0_121]
    at Sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.Java:62) ~[na:1.8.0_121]
    at Sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.Java:45) ~[na:1.8.0_121]
    at Java.lang.reflect.Constructor.newInstance(Constructor.Java:423) ~[na:1.8.0_121]
    at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.Java:142) ~[spring-beans-4.3.7.RELEASE.jar:4.3.7.RELEASE]
    ... 24 common frames omitted

J'ai essayé de créer un autre fichier database.properties distinct, mais Spring Boot ne le reconnaît pas non plus. Qu'est-ce que je fais mal?

12
Yu Chen

Vous pouvez essayer de définir la balise resources dans la section build de votre fichier pom.xml. Définir le chemin du répertoire de ressources où est application.properties

<build>
        <resources>
            <resource>
                <directory>resources</directory>
                <targetPath>${project.build.outputDirectory}</targetPath>
                <includes>
                    <include>application.properties</include>
                </includes>
            </resource>
        </resources>
</build>

Lien de ressource: https://stackoverflow.com/a/30595114/2293534

Une autre approche:

Si vous utilisez la version Spring 3.X, vous pouvez ajouter @PropertySource("application.properties")

@Configuration
@PropertySource(value = "classpath:application.properties")
public class ApplicationConfig {

    // more configuration ...
}

Si vous utilisez la version 4 du printemps, vous ajoutez 2 fichier de propriétés en utilisant une nouvelle annotation appelée @PropertySources qui vous permet de déclarer des annotations @PropertySource répétées:

@PropertySources({
    @PropertySource("default.properties"),
    @PropertySource("overriding.properties")
})

Les détails sont donnés ici dans ma autre réponse: https://stackoverflow.com/a/43659158/2293534

MISE À JOUR # 1:

Remplacez votre classe App.Java par la classe suivante

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.context.web.SpringBootServletInitializer;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

//@SpringBootApplication
@Configuration
@ComponentScan
@EnableAutoConfiguration
public class Application extends SpringBootServletInitializer {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }


    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(applicationClass);
    }

    private static Class<Application> applicationClass = Application.class;
}

Pour Java.io.FileNotFoundException:

Utilisez le suivant

@PropertySource(value = "database.properties", ignoreResourceNotFound = true)

MISE À JOUR # 2:

J'ai suivi les étapes suivantes pour exécuter votre application. Il fonctionne avec succès.

  1. Accédez au dossier de votre projet où existe pom.xml.

  2. Vous avez des erreurs et des avertissements sur pom.xml. J'ai tout clarifié.

  3. Ouvrez la commande Invite et Exécuter mvn clean

  4. Exécuter mvn clean install

  5. Au dernier mvn spring-boot:run

Puis, dans le navigateur, je lance " http: // localhost: 8080 / "

Il ouvre le projet avec succès. J'ai également cherché d'autres pages également ouvertes avec succès.

La première page ressemble à ci-dessous http://localhost:8080/enter image description here

Vérifiez toutes les pages comme ci-dessous: http://localhost:8080/api/reviews

[{"id": 1, "userName": "ychennay", "reviewText": "Ce restaurant était génial!"}, {"id": 2, "userName": "david", "reviewText": "This restaurant était correct! "}, {" id ": 3," userName ":" ben "," reviewText ":" Ce restaurant était médiocre! "}, {" id ": 4," userName ":" leon "," reviewText ":" Ce restaurant était affreux! "}, {" id ": 5," userName ":" lawrence "," reviewText ":" Ce restaurant était déroutant! "}]

Alors remplacez votre pom.xml

<project xmlns="http://maven.Apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.Apache.org/POM/4.0.0 http://maven.Apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.diningapp</groupId>
    <artifactId>Dining</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>
    <properties>
        <jackson.version>2.7.5</jackson.version>
        <spring-version>4.3.7.RELEASE</spring-version>
        <dynamodb-local.port>8000</dynamodb-local.port>
        <dynamodb-local.endpoint>http://localhost:${dynamodb-local.port}</dynamodb-local.endpoint>
        <spring-boot-version>1.5.2.RELEASE</spring-boot-version>
        <aws-sdk-Java-version>1.11.124</aws-sdk-Java-version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <!-- For UTF-8 support -->
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <!-- For UTF-8 support -->
    </properties>


    <build>
        <sourceDirectory>src</sourceDirectory>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.5.1</version>
                <configuration>
                    <source>1.7</source> <!-- Used Java7 -->
                    <target>1.7</target> <!-- Used Java7 -->
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring-boot-version}</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.0.0</version>
                <configuration>
                    <warSourceDirectory>WebContent</warSourceDirectory>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <repositories>
        <repository>
            <id>dynamodb-local-oregon</id>
            <name>DynamoDB Local Release Repository</name>
            <url>https://s3-us-west-2.amazonaws.com/dynamodb-local/release</url>
        </repository>
    </repositories>







    <dependencies>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-releasetrain</artifactId>
            <version>Hopper-SR10</version>
            <type>pom</type>
            <!-- <scope>import</scope> -->
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <version>${spring-boot-version}</version> <!-- You have missed to add this version -->
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <version>${spring-boot-version}</version> <!-- You have missed to add this version -->
            <optional>true</optional>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>${spring-boot-version}</version>
        </dependency>
        <dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-Java-sdk-dynamodb</artifactId>
            <version>${aws-sdk-Java-version}</version>
        </dependency>
        <dependency>
            <groupId>com.github.derjust</groupId>
            <artifactId>spring-data-dynamodb</artifactId>
            <version>4.3.1</version>
        </dependency>

        <dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-Java-sdk-bom</artifactId>
            <version>${aws-sdk-Java-version}</version>
            <type>pom</type>
            <!-- <scope>import</scope> -->
            <scope>provided</scope> <!-- changed import to provided -->
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-Tomcat</artifactId>
            <version>${spring-boot-version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring-version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring-version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring-version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring-version}</version>
        </dependency>
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>${spring-version}</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>${jackson.version}</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-Java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-Java</artifactId>
            <version>5.1.38</version> <!-- You have missed to add this version -->
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-security -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
            <version>${spring-boot-version}</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.0.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.10</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
</project>

Erreurs et solutions:

Numéro 1:

[AVERTISSEMENT] 'dependencies.dependency.scope' pour org.springframework.data:spring-data-releasetrain:pom doit être l'un des [fourni, compile, exécution, test, système] mais est 'importé'. @ ligne 70, colonne 18

Solution n ° 1:

<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-releasetrain</artifactId>
    <version>Hopper-SR10</version>
    <type>pom</type>
    <!-- <scope>import</scope> -->
    <scope>provided</scope>  <!-- changed import to provided -->
</dependency>

Numéro 2:

[ERREUR] 'dependencies.dependency.version' pour org.springframework.boot: spring-boot-devtools: le fichier jar est manquant. @ ligne 73, colonne 19

Solution n ° 2:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <version>${spring-boot-version}</version> <!-- You have missed to add this version -->
    <optional>true</optional>
</dependency>

Numéro 3:

[ERREUR] 'dependencies.dependency.version' pour org.springframework.boot: spring-boot-configuration-processeur: jar est manquant. @ ligne 78, colonne 19

Solution n ° 3:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <version>${spring-boot-version}</version> <!-- You have missed to add this version -->
    <optional>true</optional>
</dependency>

Numéro 4:

[WARNING] 'dependencies.dependency.scope' pour com.amazonaws: aws-Java-sdk-bom: pom doit être l'un des [fourni, compiler, runtime, test, system] mais est 'import'. @ ligne 105, colonne 18

Solution n ° 4:

<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-Java-sdk-bom</artifactId>
    <version>${aws-sdk-Java-version}</version>
    <type>pom</type>
    <!-- <scope>import</scope> -->
    <scope>provided</scope> <!-- changed import to provided -->
</dependency>

Numéro 5:

[ERROR] 'dependencies.dependency.version' pour mysql: mysql-connector-Java: le fichier jar est manquant. @ ligne 148, colonne 19

Solution n ° 5:

<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-Java -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-Java</artifactId>
    <version>5.1.38</version> <!-- You have missed to add this version -->
</dependency>
15
SkyWalker

Au lieu de @EnableAutoConfiguration, utilisez @Configuration comme ci-dessous. En outre, vous devrez corriger la propriété de région aws car son nom diffère entre le fichier prop et le code - [Amazon.dynamodb.region vs Amazon.aws.region] - cela produira une erreur une fois que le fichier de propriété aura été repris après la modification ci-dessous. 

@Configuration
@PropertySource("database.properties")
public class DynamoClientMapper {

    @Value("${Amazon.dynamodb.endpoint}")
    private String amazonDynamoDBEndpoint;

    @Value("${Amazon.aws.accesskey}")
    private String amazonAWSAccessKey;

    @Value("${Amazon.aws.secretkey}")
    private String amazonAWSSecretKey;

    @Value("${Amazon.aws.region}")
    private String amazonAWSRegion;
2
jshcode

ont essayé l'approche suivante?

@Component
@PropertySource("database.properties")
public class DynamoClientMapper { ...}

ou 

 @Service
 @PropertySource("database.properties")
 public class DynamoClientMapper { ...}
0
georges van

Dans votre capture d'écran, il semble que vous utilisiez Intellij. Si tel est le cas, vous pouvez voir clairement que votre dossier resources n’est pas déclaré en tant que Test Ressources Root. Faites ceci et recompilez.

 enter image description here

0
Torsten