猿问

为什么 Hibernate 在每次请求时都会创建新的数据库连接?

我有 Java - Spring Boot - Hibernate - Postgres 应用程序。Hibernate 在每次请求时都会创建数据库连接,为什么?有可配置的吗?例如,一次会议持续 10 分钟?


我的休眠配置:


@Autowired

private Environment environment;


@Bean

public LocalSessionFactoryBean sessionFactory() {

    LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();

    sessionFactory.setDataSource(dataSource());

    sessionFactory.setPackagesToScan(new String[] { "monitoring" });

    sessionFactory.setHibernateProperties(hibernateProperties());

    return sessionFactory;

}


@Bean

public DataSource dataSource() {

    DriverManagerDataSource dataSource = new DriverManagerDataSource();

    dataSource.setDriverClassName("org.postgresql.Driver");

    dataSource.setUrl(environment.getRequiredProperty("spring.datasource.url"));

    dataSource.setUsername(environment.getRequiredProperty("spring.datasource.username"));

    dataSource.setPassword(environment.getRequiredProperty("spring.datasource.password"));

    return dataSource;

}


private Properties hibernateProperties() {

    Properties properties = new Properties();

    properties.put("hibernate.dialect", environment.getRequiredProperty("spring.jpa.properties.hibernate.dialect"));

    properties.put("hibernate.show_sql", environment.getRequiredProperty("spring.jpa.hibernate.show-sql"));

    properties.put("hibernate.format_sql", "false");

    properties.put("hibernate.jdbc.lob.non_contextual_creation", "true");

    return properties;

}

我收到的每个请求都包含以下日志:


11:19:13.584 [http-nio-8080-exec-2] DEBUG o.s.j.d.DriverManagerDataSource - Creating new JDBC DriverManager Connection to [jdbc:postgresql://localhost:5432/monit]


为什么?我怎样才能改变它?


鸿蒙传说
浏览 122回答 1
1回答

绝地无双

由于定义了数据源,因此需要手动配置连接池。来自Spring 官方文档:如果您定义自己的 DataSource bean,则不会发生自动配置。从 spring boot 2 开始,HikariCP默认连接池嵌入了 spring boot starter (spring-boot-starter-jdbc和spring-boot-starter-data-jpa)。您可以使用以下配置来配置最大池大小HikariCPspring.datasource.hikari.maximum-pool-size= 10
随时随地看视频慕课网APP

相关分类

Java
我要回答