当前位置: 首页 > 知识库问答 >
问题:

Spring Boot Application.Properties值未填充且未读取

丰超
2023-03-14

但是,当我运行使用maven从命令行生成的jar时,它不会读取application.properties,默认情况下,tomcat是在8080上启动的,我无法识别上下文。其他的一切都很好。

在eclipse中,我将:VM参数提供为:-dext.prop.dir=e:/res/-dlog.name=d:/res/logback.xml

我文章和问题看起来很相似,我已经引用了这篇文章,只有我引用了Application.Properteis来配置spring boot应用程序的自定义上下文和端口。我也引用了这个链接,但我无法弄清楚当我从命令行运行jar时问题是什么。

相同的vm参数如下所示:

java -Dext.prop.dir=D:/res/ -jar com.drd.db.services-1.0.0.M1-jar-with-dependencies.jar 

并且我将application.properteis保存为d:/res/application.properteis。

下面是我的应用程序启动类和application.properties。

   package com.drd.application.configuration;
    import static com.drd.db.service.util.ServicesConstants.EXT_PROP_DIR;
    import static com.drd.db.service.util.ServicesConstants.LOG_BACK_XML_SYSTEM_PROPERTY;

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
    import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory;
    import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.PropertySource;
    import org.springframework.util.StringUtils;

    import com.drd.db.service.util.ServicesConstants;

    @ComponentScan(basePackages = { "com.drd.db" })
    @Configuration
    @PropertySource({"file:///${ext.prop.dir}application.properties"/*, "classpath:application.properties"*/})
    @EnableAutoConfiguration
    public class ApplicationRunner {


        private static final Logger LOG = LoggerFactory.getLogger(ApplicationRunner.class);

        public static void main(String[] args) throws Exception {
            String extPropDir=System.getProperty(EXT_PROP_DIR);
            if(StringUtils.isEmpty(extPropDir)){
                LOG.warn("Could not resolve  PropertyvSource placeholder 'ext.prop.dir' in string value file:///${ext.prop.dire}application.properties");
                LOG.warn("Could not finnd {} System property Please specify valid path for it ",ServicesConstants.EXT_PROP_DIR);
                return;
            }
            String logbackXMLPath=System.getProperty(LOG_BACK_XML_SYSTEM_PROPERTY);
            if(StringUtils.isEmpty(logbackXMLPath)){
                LOG.info("Could not finnd {} System property for loading logback.xml Please specify valid path for it proper loaggin ", LOG_BACK_XML_SYSTEM_PROPERTY);
            }
            LOG.info("ApplicationRunner Spring boot application start from this class");
            SpringApplication.run(ApplicationRunner.class, args);

        }
        @Bean
        public EmbeddedServletContainerFactory servletContainer() {
            TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory();
            return factory;
        }

    }
#All application Label properties configure if any.
server.context-path=/DBService
server.port=8085
hibernate.prop.dir=D:/main/resources/

还有一个问题是,如果我没有将application.properties放在d:/res/目录中,它会抛出如下Expeption,这意味着它正在读取属性文件:

例外情况:

 2016-08-07 14:40:09.435  INFO 18168 --- [           main] .b.l.ClasspathLoggingApplicationListener : Application failed to start with classpath: [file:/D:com.drd.db.services-1.0.0.M1-jar-with-dependencies.jar]
2016-08-07 14:40:09.445 ERROR 18168 --- [           main] o.s.boot.SpringApplication               : Application startup failed

org.springframework.beans.factory.BeanDefinitionStoreException: Failed to load bean class: com.drd.application.configuration.ApplicationRunner; nested exception
 is java.io.FileNotFoundException: D:\htl-properties\application.properties (The system cannot find the file specified)
        at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:159)
...
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:944)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:933)
        at com.drd.application.configuration.ApplicationRunner.main(ApplicationRunner.java:45)
Caused by: java.io.FileNotFoundException: D:\res\application.properties (The system cannot find the file specified)
        at java.io.FileInputStream.open(Native Method)
        at java.io.FileInputStream.<init>(FileInputStream.java:146)
        at java.io.FileInputStream.<init>(FileInputStream.java:101)
        at sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:90)
        at sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:188)

共有1个答案

卢嘉誉
2023-03-14

据我所知,您希望使用application.properties中的变量。

我遵循的方式是下面这条;

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

之后,还要在pom.xml中插入following标记

<build>
    <resources>
        <resource>
         <directory>src/main/resources</directory>
         <filtering>true</filtering>
         <includes>
            <include>**/*.properties</include>
         </includes>
         </resource>
    </resources>
</build>
 类似资料:
  • 我有一个非常简单的spring boot应用程序,我正在尝试使用一些外部配置。我试着按照spring boot文件上的信息去做,但是我遇到了一个障碍。 当我运行下面的应用程序时,application.properties文件中的外部配置不会填充到bean中的变量中。我肯定我在做傻事,谢谢你的建议。 mybean.Java(位于/src/main//foo/bar/中) application.J

  • 我有一个非常简单的Java/Spring应用程序来演示KStream的功能,但不幸的是,我无法使KStream加载数据。想法是创建一个KStream对象,并使用controller GET方法简单地检索其内容。示例代码: 问题-主题中有消息,但foreach(...)中的KStream枚举没有从中检索任何结果。KStream对象状态为“RUNning”,日志中没有错误。 生成随机应用程序ID并将A

  • 我有2个xml配置文件,如下所示 app-context.xml: test-cache.xml

  • 问题内容: 我目前正在尝试从用C#编写的WPF应用程序中的数据库中检索记录。我正在使用SQL数据读取器,它似乎可以正常连接,但以下内容给了我NullReferenceException: 同样,我似乎正在连接到数据库,但是如果我通过调试器运行,则数据表似乎不会被填充。 我的连接字符串,以防万一: 我当前使用的是带有两个记录的测试数据库,而不是最终数据库。我尝试使用Transact-SQL编辑器,但

  • //控制器类Mainguicontroller.java

  • 问题内容: 我正在使用Spring MVC建立一个完全宁静的Web应用程序。当我有一个PUT方法时,不会填充我的@ModelAttribute表单bean(所有值都为null)。如果我使用POST方法,则所有内容都会正确填充。 我用邮递员([https://chrome.google.com / webstore / detail / postman-rest- 客户/ fdmmgilgnpjig