Anton Kim
Anton Kim

Reputation: 953

class path resource [application.properties] cannot be opened because it does not exist

I saw many questions about this but can't seem to make it work: it either can't find properties file or throws Could not resolve placeholder ...

enter image description here

    @Slf4j
    @SpringBootApplication
    @ComponentScan(basePackages = "com.company")
    @PropertySource(value={"application.properties"})
    public class ConsumingRestApplication implements ApplicationRunner {
    
        @Autowired
        private ApplicationContext appContext;
    
        @Value("${origin}")
        private String origin;
    
        @Value("${destination}")
        private String destination;
...

I tried different paths, including absolute path for PropertySource and also ran without it at all.

My pom.xml includes resource and I tried without it also. Java is 11.0.7.

Any hints appreciated.

     <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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.company</groupId>
  <artifactId>armstrong</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>armstrong</name>
  <url>http://maven.apache.org</url>

  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.2.RELEASE</version>
  </parent>

    <dependency>
      <groupId>com.google.code.gson</groupId>
      <artifactId>gson</artifactId>
      <version>2.8.6</version>
    </dependency>

    <dependency>
      <groupId>com.konghq</groupId>
      <artifactId>unirest-java</artifactId>
      <version>3.7.04</version>
    </dependency>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
    </dependency>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
    </dependency>

    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.18.12</version>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-log4j2</artifactId>
    </dependency>

    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.7.30</version>
    </dependency>

    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>1.7.30</version>
<!--      <scope>test</scope>-->
    </dependency>
  </dependencies>

  <properties>
    <maven.compiler.source>1.11</maven.compiler.source>
    <maven.compiler.target>1.11</maven.compiler.target>
  </properties>

  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>

    <resources>
      <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
        <includes>
          <include>**/*.properties</include>
        </includes>
      </resource>
    </resources>
  </build>
</project>

Upvotes: 1

Views: 7089

Answers (2)

Valerio Vaudi
Valerio Vaudi

Reputation: 4542

Hi reading your config I can suggest you to:

  • use <properties>...<java.version>11</java.version> </properties> probably your maven settings works but in this configuration was what the spring boot project generator suggest me to use
  • delete <resources>....</resources> maven tag with @PropertySource annotation. your problem is somewhere else. In particular if you put your configuration inside application.properties those config was loaded in the Spring Environment abstraction and you do not need to add other stuff in order to get those configurations.
  • pay attention to your project tree I saw something of strange, application.properties is not brendized with the typical spring boot project and I saw that the src folder is under another folder I guess that some project setup issue are happened.

Can you share a screenshot more detailed of the your app three. Where is the pom.xml?

I tested a your similar scenario:

@SpringBootApplication
public class DemoApplication implements ApplicationRunner {

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

    @Value("${test}")
    private String test;

    @Override
    public void run(ApplicationArguments args) throws Exception {
        System.out.println(test);
    }
}

enter image description here enter image description here enter image description here

the pom is this:

<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

Upvotes: 2

DEV
DEV

Reputation: 1736

another alternative that can help you is :

@Autowired
private Environment env;
String origin = env.getProperty("origin");

Upvotes: 1

Related Questions