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:
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?
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
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
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;
}
Utilisez le suivant
@PropertySource(value = "database.properties", ignoreResourceNotFound = true)
J'ai suivi les étapes suivantes pour exécuter votre application. Il fonctionne avec succès.
Accédez au dossier de votre projet où existe pom.xml.
Vous avez des erreurs et des avertissements sur pom.xml. J'ai tout clarifié.
Ouvrez la commande Invite et Exécuter mvn clean
Exécuter mvn clean install
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/
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! "}]
<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>
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>
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;
ont essayé l'approche suivante?
@Component
@PropertySource("database.properties")
public class DynamoClientMapper { ...}
ou
@Service
@PropertySource("database.properties")
public class DynamoClientMapper { ...}