在我的 Spring Boot 应用程序中,我有一个带有 100 个固定线程的 ThreadPoolExecutor。我已将数据源配置为:
@Bean
@Primary
public LocalContainerEntityManagerFactoryBean entityManager() throws IOException {
LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
em.setDataSource(dbDatasource());
em.setPackagesToScan(new String[]{"com.pkg"});
em.setPersistenceUnitName("dbEntityManager");
HibernatePersistenceProvider hibernatePersistenceProvider = new HibernatePersistenceProvider();
em.setPersistenceProvider( hibernatePersistenceProvider );
HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
em.setJpaVendorAdapter(vendorAdapter);
HashMap<String, Object> properties = new HashMap<>();
properties.put("hibernate.dialect", env.getProperty("hibernate.dialect"));
properties.put("hibernate.naming-strategy", env.getProperty("spring.jpa.hibernate.naming-strategy"));
properties.put("hibernate.show-sql", env.getProperty("jdbc.show-sql"));
properties.put("logging.level.org.hibernate.SQL", env.getProperty("logging.level.org.hibernate.SQL"));
properties.put("logging.level.org.hibernate.type", env.getProperty("logging.level.org.hibernate.type"));
em.setJpaPropertyMap(properties);
return em;
}
@Primary
@Bean
public DataSource dbDatasource() throws IOException {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(env.getProperty("spring.datasource.driverClassName"));
dataSource.setUrl(env.getProperty("spring.datasource.url"));
dataSource.setUsername(env.getProperty("spring.datasource.username"));
dataSource.setPassword("");
System.out.println("DATABASE:" + dataSource.getUrl() +" "+ dataSource.getUsername());
return dataSource;
}
@Primary
@Bean
public PlatformTransactionManager transactionManager() throws IOException{
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(entityManager().getObject());
return transactionManager;
}
repository.save(entity) (JpaRepository 的)是线程中发生的操作之一。第一次保存大约需要 222 毫秒,但由于有负载,我发现每个请求保存的时间增加了 50-100 毫秒,每次保存最多 10 秒。
此外,我的 CPU 利用率惊人地飙升至 90% 左右。
有人可以帮助了解我所缺少的吗?