我第一次在个人项目中使用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的类路径中加载的。
答案 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)
Spring还引入了新的@PropertySource批注,作为将属性源添加到环境的便捷机制。该注释将与基于Java的配置和@Configuration注释一起使用:
@配置 @PropertySource(“ classpath:foo.properties”) 公共类AppInitializer { // ... }
注册新属性文件的另一种非常有用的方法是使用占位符,以使您可以在运行时动态选择正确的文件。例如:
@PropertySource({ “ classpath:persistence-$ {envTarget:mysql} .properties” })
您可以在XML中使用,可以通过命名空间元素使Spring访问新的属性文件:
foo.properties文件应放在/ src / main / resources下,以便在运行时可在类路径上使用。