Репозиторий сохранить производительность убийства Загрузка ЦП - PullRequest
0 голосов
/ 11 февраля 2019

В моем весеннем загрузочном приложении у меня есть ThreadPoolExecutor со 100 фиксированными потоками.Я настроил источник данных как:

    @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 секунд на сохранение.

Кроме того, загрузка ЦП резко возрастает до 90%.

Может кто-нибудь, пожалуйста, помогите понять, чего мне не хватает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...