我有一个基本的Spring 4 JPA应用程序。我使用所有Java配置(根本没有XML)。我想关闭控制台调试消息。我已经看到了很多这方面的问题并尝试了解决方案,但我仍然看到了所有的消息。
控制台消息如下所示:
14:58:29.301 [main] DEBUG o.h.loader.entity.plan.EntityLoader....
14:58:29.328 [main] INFO o.h.tool.hbm2ddl.SchemaUpdate....
....
14:58:29.905 [main] DEBUG o.h.h.i.ast.QueryTranslatorImpl - --- HQL AST ---
\-[QUERY] Node: 'query'
\-[SELECT_FROM] Node: 'SELECT_FROM'
+-[FROM] Node: 'from'
| \-[RANGE] Node: 'RANGE'
| +-[DOT] Node: '.'
| | +-[IDENT] Node: 'hello'
| | \-[IDENT] Node: 'Customer'
| \-[ALIAS] Node: 'generatedAlias0'
\-[SELECT] Node: 'select'
\-[IDENT] Node: 'generatedAlias0'
....
Hundreds of lines more....
我试图在HibernateJpaVendorAdapter和LocalContainerEntityManagerFactoryBean中设置show_sql,如下所示:
@Bean
public EntityManagerFactory entityManagerFactory() throws SQLException {
HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
vendorAdapter.setGenerateDdl(true);
vendorAdapter.setShowSql(false);
LocalContainerEntityManagerFactoryBean factory = new
LocalContainerEntityManagerFactoryBean();
factory.setJpaVendorAdapter(vendorAdapter);
factory.setPackagesToScan("hello");
factory.setDataSource(dataSource());
Properties jpaProperties = new Properties();
jpaProperties.put( "hibernate.dialect", "org.hibernate.dialect.MySQLDialect" );
jpaProperties.put( "hibernate.show_sql", false );
jpaProperties.put( "show_sql", false );
jpaProperties.put( "hibernate.generate_statistics", false );
factory.setJpaProperties(jpaProperties);
factory.afterPropertiesSet();
return factory.getObject();
}
感谢你对此有任何想法!
- 修改 - 更多信息
我所做的是使用Spring Tools Suite创建一个Spring Starter项目,然后选择JPA。然后我将MySQL添加到我的pom.xml。
作为测试,我有一个基本的Customer和CustomerRepository类以及我在上面提到的JPA配置。
我的申请类:
@Configuration
@EnableAutoConfiguration
public class Application {
public static void main(String[] args) {
AbstractApplicationContext context = new
AnnotationConfigApplicationContext(JPAConfiguration.class);
CustomerRepository repository = context.getBean(CustomerRepository.class);
//use the repository.....
((AbstractApplicationContext) context).close();
context.close();
}
}
就是这样 - 一个用Spring Tools Suite创建的非常基本的JPA Spring Starter项目。如果我能弄清楚如何处理登录,我可以将该信息翻译成我的实际项目。
- 编辑 - 更多信息 - 并且已修复!
好的,这很有意思...... 我改变了我的Application类,问题就消失了。 因此,使用此应用程序(与上面发布的应用程序相比)和日志记录问题现在可以了 - 任何可以评论为什么这样工作的人都会这样做?
@Configuration
@ComponentScan
@EnableAutoConfiguration
public class Application {
public static void main(String[] args) {
ConfigurableApplicationContext context =
SpringApplication.run(Application.class);
CustomerRepository repository = context.getBean(CustomerRepository.class);
//use the repository.....
context.close();
}
}
请注意,Alan Hay在下面提供的解决方案也很有用,无论我如何使用Application类!
请注意,无论哪种方式,您仍然可以设置setJpaProperties,如我所示的配置(参见上面的Bean)来控制是否要查看Hibernate的SQL等。
答案 0 :(得分:9)
我最近遇到了同样的问题。看来Spring 4使用logback库进行日志记录,而我的app只有一个log4j配置文件。为logback添加额外的日志记录配置文件解决了这个问题。
如果你有一个现有的log4j配置文件,那么有一个工具可以将其转换为logback格式:
http://logback.qos.ch/translator/
如果没有尝试将名为logback.xml的文件添加到类路径的根目录:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="A1" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{dd MMM yyyy HH:mm:ss} %-4r [%t] %-5p %c %x - %m%n</pattern>
</encoder>
</appender>
<logger name="org.springframework" level="ERROR"/>
<logger name="org.hibernate" level="ERROR"/>
<root level="DEBUG">
<appender-ref ref="A1"/>
</root>
</configuration>