我尝试使用Sping Boot 配置DynamoDb客户端,并将端点和配置信息放置在resources/application.properties文件中。但是,Spring Boot似乎并不拾取这些属性。它确实拾取了我存储在同一文件中的“server.default”键,因此它肯定能够识别文件本身。
下面是我的application.properties文件和我试图将属性加载到其中的类(DynamoDBClientMapper):
amazon.dynamodb.endpoint=http://localhost:8000/
amazon.dynamodb.region=us-west-1
amazon.aws.accesskey=key
amazon.aws.secretkey=key2
server.port=8080
下面是我的项目结构:
下面是我尝试加载属性的相关类。我尝试了**@PropertySource注解和EnableAutoConfiguration**,但都没有注册属性文件。
@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;
这里是我的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);
}
}
下面是堆栈跟踪:
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
我试着创建另一个单独的database.properties文件,但是Sping Boot 也不能识别它。我做错了什么?
9条答案
按热度按时间7d7tgy0s1#
您可以尝试在pom.xml文件的build部分定义resources标记。设置资源目录的路径,其中是
application.properties
资源链接:https://stackoverflow.com/a/30595114/2293534
另一种方法:
如果您使用的是spring 3.X版本,您可以添加
@PropertySource("application.properties")
如果您使用spring 4版本,则使用名为
@PropertySources
的新注解添加2个属性文件,该注解允许您声明重复的@PropertySource
注解:这里给出的细节是我的另一个回答:https://stackoverflow.com/a/43659158/2293534
更新#1:
将
App.java
类替换为以下类对于
java.io.FileNotFoundException
:请使用以下
更新#2:
我已经按照以下步骤运行了您的应用程序。它运行成功。
1.转到
pom.xml
所在的项目文件夹。1.你在
pom.xml
上有一些错误和警告。我已经全部澄清了。1.打开命令提示符并运行
mvn clean
1.运行
mvn clean install
1.最后
mvn spring-boot:run
然后在浏览器中运行
http://localhost:8080/
它成功地打开了项目。我还搜索了其他页面也成功打开。
第一页如下所示
http://localhost:8080/
所有审查页面如下所示:
http://localhost:8080/api/reviews
因此,请替换您的
pom.xml
错误和解决方案:
问题#1:
解决方案1:
问题#2:
解决方案2:
问题#3:
解决方案3:
问题4:
解决方案4:
问题#5:
解决方案5:
iq3niunx2#
使用@Configuration代替@EnableAutoConfiguration,如下所示。此外,您还需要修复aws区域属性,因为属性文件和代码之间的名称不同- [amazon.dynamodb.region vs amazon.aws.region] -在以下更改后,一旦它开始拾取属性文件,就会引发错误。
o3imoua43#
请仔细检查您的maven-pom是否使用此 Package :
如果将其设置为
pom
或类似值,您的IDE可能无法识别模块的“Spring”特性(我在IntelliJ 2018中遇到过这种情况)。pinkon5k4#
是否尝试过以下方法?
或
b1zrtrql5#
您也可以使用固定路径。
在您想要使用不同属性文件的开发过程中非常有用。
u0njafvf6#
一个问题也可能是你有
spring-data-jpa
的依赖关系在依赖关系的层次结构中重复,所以这样你就有了2组不同的环境配置文件,当运行应用程序时,运行者正在使用一组不需要的环境。所以我建议检查项目模块,如果在一个层次结构中有多个依赖项下载的定义。虽然没有必要删除重新出现或重复的定义,但有必要注解和取消注解它们以重新同步,并使spring runner获得所需的环境集。
1.注解相依性
1.同步行程
1.取消注解依赖项
1.同步行程
1.运行应用程序
GL语言
zte4gxcn7#
我遇到了类似的问题,我通过将我的appliation.properties文件添加到pom.xml中来解决它,如下所示:https://maven.apache.org/plugins/maven-resources-plugin/examples/resource-directory.html
ddrv8njm8#
我将告诉你什么对我有效。我在SpringBoot依赖项之前加载JPA依赖项,只是将其转换过来,瞧。尝试禁用/更改pom.xml中依赖项的顺序。
xoefb8l89#
对于从Sping Boot 1.x到2.x的(非常晚的)升级:
使用包含除resources/application.properties之外的www.example.com的其他目录位置application.properties
而不是 Boot ,后者在文件名方面更灵活,可以同时读取资源/application.properties和spring.config.location:
Sping Boot 2.x仍然可以识别spring.config.位置,但不再是附加的,请参见https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0-Migration-Guide#configuration-location和https://docs.spring.io/spring-boot/docs/2.1.9.RELEASE/reference/html/boot-features-external-config.html