Spring启动application.properties hibernate.generate_statistics

时间:2017-03-16 09:10:10

标签: spring hibernate spring-boot spring-data-jpa

按照各种示例并阅读弹簧启动文档后,我仍然无法启用hibernate统计信息。我在application.properties文件中设置了属性。通过集成测试运行spring boot应用程序或Application.java不会生成任何统计信息。

我的application.properties文件。

    spring.datasource.jdbcUrl=jdbc:postgresql://localhost:5432/postgres
    spring.datasource.username = postgres
    spring.datasource.password = password

    spring.datasource.driver-class-name=org.postgresql.Driver
    spring.datasource.platform=postgres

    spring.datasource.testWhileIdle = true
    spring.datasource.validationQuery = SELECT 1

    spring.jpa.properties.hibernate.show_sql=true
    spring.jpa.properties.hibernate.format_sql=true
    spring.jpa.properties.hibernate.generate_statistics=true

    logging.level.org.hibernate.SQL=TRACE
    logging.level.org.hibernate.stat=TRACE

    logging.file=transaction-app.log

的logback-spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/defaults.xml" />
    <property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}/}spring.log}"/>
    <include resource="org/springframework/boot/logging/logback/file-appender.xml" />
    <root level="INFO">
        <appender-ref ref="FILE" />
    </root>
</configuration>

我的集成测试

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class SqlMappingTest {

    @Autowired
    PlanService planService;

    @org.junit.Test
    public void findAll() {
        List<Plan> plans = planService.findAll();
        Assert.assertEquals(1, plans.size());

    }
}

我错过了什么?

3 个答案:

答案 0 :(得分:2)

不确定以下内容是否正确,但是确实有效。 我强制将属性放到我的LocalContainerEntityManagerFactoryBean上进行构建。

DatabaseConfig片段:

    @Configuration
    @EnableTransactionManagement
    @ConfigurationProperties(prefix = "spring.datasource")
    public class DatabaseConfig extends HikariConfig {

        @Autowired
        @Bean
        public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource, Environment env) {
            LocalContainerEntityManagerFactoryBean entityManagerFactory = new LocalContainerEntityManagerFactoryBean();

            entityManagerFactory.setDataSource(dataSource);

            // Classpath scanning of @Component, @Service, etc annotated class
            entityManagerFactory.setPackagesToScan(new String[]{"com.test"});

            // Vendor adapter
            HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
            entityManagerFactory.setJpaVendorAdapter(vendorAdapter);

            Properties jpaProperties = new Properties();

            jpaProperties.put("hibernate.show_sql",
                    env.getRequiredProperty("spring.jpa.properties.hibernate.show_sql")
            );

            jpaProperties.put("hibernate.format_sql",
                    env.getRequiredProperty("spring.jpa.properties.hibernate.format_sql")
            );
            jpaProperties.put("hibernate.generate_statistics",
                    env.getRequiredProperty("spring.jpa.properties.hibernate.generate_statistics")
            );

            entityManagerFactory.setJpaProperties(jpaProperties);
            return entityManagerFactory;
        }
    }

配置后

2017-03-16 11:41:02.881 DEBUG 7884 --- [main] o.h.s.internal.ConcurrentStatisticsImpl  : HHH000117: HQL: select up from UserPlan up, time: 48ms, rows: 1
2017-03-16 11:41:02.885  INFO 7884 --- [main] i.StatisticalLoggingSessionEventListener : Session Metrics {
    939077 nanoseconds spent acquiring 1 JDBC connections;
    0 nanoseconds spent releasing 0 JDBC connections;
    2848386 nanoseconds spent preparing 1 JDBC statements;
    12205063 nanoseconds spent executing 1 JDBC statements;
    0 nanoseconds spent executing 0 JDBC batches;
    0 nanoseconds spent performing 0 L2C puts;
    0 nanoseconds spent performing 0 L2C hits;
    0 nanoseconds spent performing 0 L2C misses;
    0 nanoseconds spent executing 0 flushes (flushing a total of 0 entities and 0 collections);
    18693 nanoseconds spent executing 1 partial-flushes (flushing a total of 0 entities and 0 collections)
}

答案 1 :(得分:1)

它对我有用(使用Spring Boot 2.1.6.RELEASE)。

a)在文件application.properties中:

spring.jpa.properties.hibernate.generate_statistics=true

b)确保“ org.hibernate.stat”的运行时调试级别至少为DEBUG:

curl -i -X POST -H 'Content-Type: application/json' -d '{"configuredLevel": "DEBUG"}' http://localhost:8080/actuator/loggers/org.hibernate.stat

c)检查日志,例如:

2019-07-03 21:27:27.739 DEBUG 11797 --- [nio-8080-exec-3] o.h.stat.internal.StatisticsImpl         : HHH000117: HQL: select count(*) from AppRequest x WHERE x.uuid = :uuid, time: 1ms, rows: 1    

答案 2 :(得分:0)

hibernate.generate_statistics=true文件中定义属性hibernate.properties