Tomcat8 Springboot不读取application.properties

时间:2019-01-02 04:18:05

标签: java spring logging application.properties

我第一次在个人项目中使用java spring,但似乎无法使application.properties中的任何属性正常工作。我已经将其简化为这个测试用例,它似乎没有做任何事情:

application.properties

logging.level.root=WARN

AppInitalizer.java:

import javax.servlet.Filter;

import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


@SpringBootApplication
@ConfigurationProperties
public class AppInitializer
    extends AbstractAnnotationConfigDispatcherServletInitializer {

    private static final Logger log = LoggerFactory.getLogger(AppInitializer.class);

    @Override
    protected Class<?>[] getRootConfigClasses() {
        log.debug("This is a debug message");
        log.error("This is an error message");
        return new Class[] {};
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[] {};
    }

    @Override
    protected String[] getServletMappings() {
        return new String[] { "/" };
    }

    @Override
    protected Filter[] getServletFilters() {
        return new Filter[] {};
    }
}

部署后登录:

20:08:26.113 [http-nio-8080-exec-32] DEBUG AppInitializer - This is a debug message
20:08:26.114 [http-nio-8080-exec-32] ERROR AppInitializer - This is an error message

这两个文件被部署到类路径根目录下的同一目录中。

仅应显示第二条日志消息,但我无法处理第一条日志。

相关的ivy.xml配置:

<!-- Spring Framework -->
<dependency org="org.springframework"
            name="spring-webmvc" rev="5.0.9.RELEASE"/>
<!-- Logging -->
<dependency org="log4j" name="log4j" rev="1.2.17"/>

编辑:我将记录器切换为slf4j,但仍然不走运。

Edit2:添加了依赖性

Edit3:我正在浏览他的日志并找到了它:

10:28:22.628 [http-nio-8080-exec-114] INFO org.springframework.web.context.ContextLoader - Root WebApplicationContext: initialization started
10:28:22.634 [http-nio-8080-exec-114] DEBUG org.springframework.web.context.support.StandardServletEnvironment - Adding PropertySource 'servletConfigInitParams' with lowest search precedence
10:28:22.634 [http-nio-8080-exec-114] DEBUG org.springframework.web.context.support.StandardServletEnvironment - Adding PropertySource 'servletContextInitParams' with lowest search precedence
10:28:22.636 [http-nio-8080-exec-114] DEBUG org.springframework.web.context.support.StandardServletEnvironment - Adding PropertySource 'jndiProperties' with lowest search precedence
10:28:22.636 [http-nio-8080-exec-114] DEBUG org.springframework.web.context.support.StandardServletEnvironment - Adding PropertySource 'systemProperties' with lowest search precedence
10:28:22.636 [http-nio-8080-exec-114] DEBUG org.springframework.web.context.support.StandardServletEnvironment - Adding PropertySource 'systemEnvironment' with lowest search precedence
10:28:22.636 [http-nio-8080-exec-114] DEBUG org.springframework.web.context.support.StandardServletEnvironment - Initialized StandardServletEnvironment with PropertySources [StubPropertySource@36449077 {name='servletConfigInitParams', properties=java.lang.Object@24214aae}, StubPropertySource@1983551321 {name='servletContextInitParams', properties=java.lang.Object@6e836355}, JndiPropertySource@219519027 {name='jndiProperties', properties=org.springframework.jndi.JndiLocatorDelegate@234fc705}, MapPropertySource@23923818 {name='systemProperties', properties={awt.toolkit=sun.awt.X11.XToolkit, java.specification.version=10, file.encoding.pkg=sun.io, sun.cpu.isalist=, sun.jnu.encoding=UTF-8, java.class.path=/usr/share/tomcat8/bin/bootstrap.jar:/usr/share/tomcat8/bin/tomcat-juli.jar, java.vm.vendor=Oracle Corporation, sun.arch.data.model=64, java.vendor.url=http://java.oracle.com/, catalina.useNaming=true, user.timezone=America/Los_Angeles, os.name=Linux, java.vm.specification.version=10, sun.java.launcher=SUN_STANDARD, user.country=US, sun.boot.library.path=/usr/lib/jvm/java-11-openjdk-amd64/lib, sun.java.command=org.apache.catalina.startup.Bootstrap start, jdk.debug=release, sun.cpu.endian=little, user.home=/var/lib/tomcat8, user.language=en, java.specification.vendor=Oracle Corporation, java.naming.factory.url.pkgs=org.apache.naming, java.version.date=2018-07-17, java.home=/usr/lib/jvm/java-11-openjdk-amd64, ignore.endorsed.dirs=, file.separator=/, java.vm.compressedOopsMode=32-bit, line.separator=
10:28:22.639 [http-nio-8080-exec-114] DEBUG org.springframework.web.context.support.StandardServletEnvironment - Replacing PropertySource 'servletContextInitParams' with 'servletContextInitParams'
10:28:22.639 [http-nio-8080-exec-114] INFO org.springframework.web.context.support.AnnotationConfigWebApplicationContext - Refreshing Root WebApplicationContext: startup date [Tue Jan 15 10:28:22 PST 2019]; root of context hierarchy

似乎没有一个属性源是从我拥有application.properties的类路径中加载的。

3 个答案:

答案 0 :(得分:1)

请通过apache.commons.logging使用slf4j.Logger

答案 1 :(得分:1)

使用slf4j的LoggerFactory代替org.apache.commons.logging.LogFactory

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

private final Logger log = LoggerFactory.getLogger(this.getClass());

或静态记录器:

private static final Logger log = LoggerFactory.getLogger(AppInitializer.class);

答案 2 :(得分:-1)

  1. Spring还引入了新的@PropertySource批注,作为将属性源添加到环境的便捷机制。该注释将与基于Java的配置和@Configuration注释一起使用:

    @配置 @PropertySource(“ classpath:foo.properties”) 公共类AppInitializer {     // ... }

  2. 注册新属性文件的另一种非常有用的方法是使用占位符,以使您可以在运行时动态选择正确的文件。例如:

    @PropertySource({       “ classpath:persistence-$ {envTarget:mysql} .properties”    })

  3. 您可以在XML中使用,可以通过命名空间元素使Spring访问新的属性文件:

foo.properties文件应放在/ src / main / resources下,以便在运行时可在类路径上使用。