gpt4 book ai didi

Spring 4,JPA,关闭控制台调试消息

转载 作者:行者123 更新时间:2023-12-02 02:34:41 62 4
gpt4 key购买 nike

我有一个基本的 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 项目。如果我能弄清楚如何处理登录,我可以将该信息转化为我的实际项目。

-- 编辑 - 甚至更多信息 - 已修复!

好吧,这很有趣......我更改了我的应用程序类,问题就消失了。因此,使用此应用程序(相对于上面发布的应用程序)并且日志记录问题现在可以了 - 谁可以评论为什么它会这样工作?

@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 提供的解决方案都非常有效!

请注意,无论哪种方式,您仍然可以设置 setJpaProperties,如我的配置所示(请参阅上面的 Bean)来控制是否要查看 Hibernate 的 SQL 等。

最佳答案

我最近也遇到了同样的问题。看来 Spring 4 使用 logback 库进行日志记录,而我的应用程序只有一个 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>

关于Spring 4,JPA,关闭控制台调试消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23572274/

62 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com