Spring Boot无法识别application.properties文件

时间:2017-05-06 08:15:40

标签: java spring spring-boot

我正在尝试使用Spring 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

这是我的项目结构: enter image description here

这是我正在尝试加载属性的相关类。我尝试使用新的属性文件 @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文件,但Spring Boot也没有认识到这一点。我做错了什么?

8 个答案:

答案 0 :(得分:18)

您可以尝试在pom.xml文件的build部分中定义resources标记。设置资源目录的路径,其中application.properties

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

资源链接:https://stackoverflow.com/a/30595114/2293534

另一种方法:

如果您使用spring 3.X版本,则可以添加@PropertySource("application.properties")

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

    // more configuration ...
}

如果您使用spring 4版本,则使用名为@PropertySources的新注释添加2个属性文件,该注释允许您声明重复的@PropertySource注释:

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

详细信息在我的另一个答案中给出:https://stackoverflow.com/a/43659158/2293534

更新#1:

将App.java类替换为以下类

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;
}

对于java.io.FileNotFoundException:

使用以下

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

更新#2:

我已按照以下步骤运行您的应用程序。它运行成功。

  1. 转到存在pom.xml的项目文件夹。

  2. pom.xml上有一些错误和警告。我澄清了一切。

  3. 打开命令提示符并运行mvn clean

  4. 运行mvn clean install

  5. 最后mvn spring-boot:run

  6. 然后在浏览器中,我运行&#34; http://localhost:8080/&#34;

    成功打开项目。我也搜索了其他页面也成功打开了。

    首页如下http://localhost:8080/ enter image description here

    查看以下所有网页:http://localhost:8080/api/reviews

      

    [{&#34; id&#34;:1,&#34; userName&#34;:&#34; ychennay&#34;,&#34; reviewText&#34;:&#34;这家餐厅是!了不起#&34;},{&#34; ID&#34;:2&#34;用户名&#34;:&#34;大卫&#34;&#34; reviewText&#34;:&#34这家餐厅   没关系!&#34;},{&#34; id&#34;:3,&#34; userName&#34;:&#34; ben&#34;,&#34; reviewText&#34;:&# 34;这家餐厅是   !平庸#&34;},{&#34; ID&#34:4,&#34;用户名&#34;:&#34;莱昂&#34;&#34; reviewText&#34;:&#34这家餐厅   很糟糕!&#34;},{&#34; id&#34;:5,&#34; userName&#34;:&#34; lawrence&#34;,&#34; reviewText&#34;:&# 34;此   餐厅很混乱!&#34;}]

    所以替换你的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>
    

    错误和解决方案:

    <强>问题#1:

      

    [警告]&#39; dependencies.dependency.scope&#39;对于org.springframework.data:spring-data-releasetrain:pom必须是其中之一   [提供,编译,运行时,测试,系统]但是“导入”#。 @第70行,   第18栏

    <强>溶液#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>
    

    <强>问题#2:

      

    [ERROR]&#39; dependencies.dependency.version&#39;对于org.springframework.boot:spring-boot-devtools:jar丢失了。 @ line   73,第19栏

    <强>溶液#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>
    

    <强>问题#3:

      

    [ERROR]&#39; dependencies.dependency.version&#39;对于org.springframework.boot:spring-boot-configuration-processor:jar是   失踪。 @第78行,第19栏

    <强>解决方案#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>
    

    <强>问题#4:

      

    [警告]&#39; dependencies.dependency.scope&#39;对于com.amazonaws:aws-java-sdk-bom:pom必须是[提供,编译,   运行时,测试,系统]但是“导入”#。 @第105行,第18栏

    <强>溶液#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>
    

    <强>问题#5:

      

    [ERROR]&#39; dependencies.dependency.version&#39;对于mysql:mysql-connector-java:jar丢失了。 @第148行,第19栏

    <强>解决方案#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>
    

答案 1 :(得分:2)

而不是@EnableAutoConfiguration,使用@Configuration,如下所示。此外,您将需要修复aws region属性,因为它在prop文件和代码之间的名称不同 - [amazon.dynamodb.region vs amazon.aws.region] - 一旦它在下面的更改后开始拾取属性文件,这将抛出错误。

@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 :(得分:0)

尝试了以下方法吗?

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

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

答案 3 :(得分:0)

在屏幕截图中,您似乎正在使用Intellij。如果是这样,您可以清楚地看到您的resources文件夹未声明为Test Ressources Root。执行此操作,然后重新编译。

enter image description here

答案 4 :(得分:0)

请仔细检查,您的maven-pom是否使用此包装:

<packaging>war</packaging>

如果将其设置为pom或类似名称,则您的IDE可能无法识别模块的“ Spring”性质(在IntelliJ 2018中发生在我身上)。

答案 5 :(得分:0)

您也可以使用固定路径。

@PropertySource(“文件:$ {C:/ Development / workspace / Project / resources /} / application.properties”)

在使用不同属性文件的开发过程中很有用。

答案 6 :(得分:0)

问题可能还在于,您的spring-data-jpa的依赖项在依赖项的层次结构中重复,因此,对于环境,您有2套不同的配置文件,运行该应用程序时,运行程序正在使用一套有害环境。

api("org.springframework.data", "spring-data-jpa", "2.3.4.RELEASE")

因此,我建议检查项目模块,如果在一个层次结构中不只一个定义的依赖项下载。尽管没有必要删除重新出现或重复的内容,但有必要注释和取消注释它们以重新同步,并使SpringRunner能够采用所需的一组环境。

  1. 评论依赖
  2. 同步
  3. 取消注释依赖
  4. 同步
  5. 运行应用

Gradle的东西

GL

答案 7 :(得分:0)

确保属性文件末尾没有 .txt 扩展名。