125 lines
6.4 KiB
Java
125 lines
6.4 KiB
Java
package com.myoa.engineering.crawl.ppomppu.processor.configuration;
|
|
|
|
import com.myoa.engineering.crawl.ppomppu.processor.configuration.properties.DatasourceProperties;
|
|
import com.myoa.engineering.crawl.ppomppu.processor.configuration.properties.DatasourceProperties.DataSourcePropertiesUnit;
|
|
import com.myoa.engineering.crawl.ppomppu.processor.configuration.properties.HibernateProperties;
|
|
import com.myoa.engineering.crawl.ppomppu.processor.configuration.properties.HikariProperties;
|
|
import com.myoa.engineering.crawl.ppomppu.processor.domain.BaseScanDomain;
|
|
import com.myoa.engineering.crawl.ppomppu.processor.infrastructure.repository.BaseScanRepository;
|
|
import com.zaxxer.hikari.HikariConfig;
|
|
import com.zaxxer.hikari.HikariDataSource;
|
|
import java.util.Enumeration;
|
|
import java.util.HashMap;
|
|
import java.util.Map;
|
|
import java.util.Properties;
|
|
import javax.persistence.EntityManagerFactory;
|
|
import javax.sql.DataSource;
|
|
import lombok.NonNull;
|
|
import org.hibernate.cfg.AvailableSettings;
|
|
import org.springframework.beans.factory.annotation.Qualifier;
|
|
import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
|
|
import org.springframework.context.annotation.Bean;
|
|
import org.springframework.context.annotation.Configuration;
|
|
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
|
|
import org.springframework.orm.jpa.JpaTransactionManager;
|
|
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
|
|
import org.springframework.transaction.PlatformTransactionManager;
|
|
|
|
@Configuration
|
|
@EnableJpaRepositories(basePackageClasses = BaseScanRepository.class,
|
|
entityManagerFactoryRef = "ppomppuNotifierProcessorEntityManagerFactory",
|
|
transactionManagerRef = "ppomppuNotifierProcessorTransactionManager"
|
|
)
|
|
public class PpomppuDatasourceConfiguration {
|
|
|
|
private static final String DATA_SOURCE_UNIT_NAME = "ppomppu";
|
|
|
|
private final DatasourceProperties dataSourceProeprties;
|
|
private final HikariProperties hikariProperties;
|
|
private final HibernateProperties hibernateProperties;
|
|
|
|
public PpomppuDatasourceConfiguration(DatasourceProperties dataSourceProeprties,
|
|
HikariProperties hikariProperties,
|
|
HibernateProperties hibernateProperties) {
|
|
this.dataSourceProeprties = dataSourceProeprties;
|
|
this.hikariProperties = hikariProperties;
|
|
this.hibernateProperties = hibernateProperties;
|
|
}
|
|
|
|
@Bean(name = "ppomppuNotifierProcessorDataSource")
|
|
public DataSource dataSource() {
|
|
DataSourcePropertiesUnit dataSourcePropertiesUnit = dataSourceProeprties.find(DATA_SOURCE_UNIT_NAME);
|
|
|
|
final HikariConfig hikariConfig = new HikariConfig();
|
|
hikariConfig.setJdbcUrl(dataSourcePropertiesUnit.toCompletedJdbcUrl());
|
|
hikariConfig.setUsername("sa");
|
|
hikariConfig.setPassword("sa");
|
|
hikariConfig.setAutoCommit(hikariProperties.getAutoCommit());
|
|
hikariConfig.setMaximumPoolSize(hikariProperties.getMaximumPoolSize());
|
|
hikariConfig.setMinimumIdle(hikariProperties.getMinimumIdle());
|
|
if (hikariProperties.getMaximumPoolSize() > hikariProperties.getMinimumIdle()) {
|
|
hikariConfig.setIdleTimeout(hikariProperties.getIdleTimeout());
|
|
}
|
|
hikariConfig.setValidationTimeout(hikariProperties.getValidationTimeout());
|
|
hikariConfig.setConnectionTimeout(hikariProperties.getConnectionTimeout());
|
|
hikariConfig.setMaxLifetime(hikariProperties.getMaxLifetime());
|
|
|
|
final DataSource dataSource = new HikariDataSource(hikariConfig);
|
|
return dataSource;
|
|
}
|
|
|
|
@Bean("ppomppuNotifierProcessorEntityManagerFactory")
|
|
public LocalContainerEntityManagerFactoryBean entityManagerFactory(
|
|
EntityManagerFactoryBuilder builder,
|
|
@Qualifier("ppomppuNotifierProcessorDataSource") DataSource dataSource) {
|
|
return builder.dataSource(dataSource)
|
|
.packages(BaseScanDomain.class)
|
|
.properties(getPropsMap(DATA_SOURCE_UNIT_NAME))
|
|
.build();
|
|
}
|
|
|
|
@Bean("ppomppuNotifierProcessorTransactionManager")
|
|
public PlatformTransactionManager transactionManager(
|
|
@Qualifier("ppomppuNotifierProcessorEntityManagerFactory") EntityManagerFactory entityManagerFactory) {
|
|
return new JpaTransactionManager(entityManagerFactory);
|
|
}
|
|
|
|
public static Properties getProps(@NonNull HibernateProperties.HibernatePropertiesUnit hibernateProperties) {
|
|
Properties properties = new Properties();
|
|
properties.put(AvailableSettings.DIALECT, hibernateProperties.getDialect());
|
|
properties.put(AvailableSettings.FORMAT_SQL, hibernateProperties.getFormatSql());
|
|
properties.put(AvailableSettings.SHOW_SQL, hibernateProperties.getShowSql());
|
|
properties.put(AvailableSettings.HBM2DDL_AUTO, hibernateProperties.getHbm2ddlAuto());
|
|
properties.put(AvailableSettings.CONNECTION_PROVIDER_DISABLES_AUTOCOMMIT,
|
|
hibernateProperties.getDisableAutoCommit());
|
|
properties.put(AvailableSettings.IMPLICIT_NAMING_STRATEGY,
|
|
"org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy");
|
|
properties.put(AvailableSettings.PHYSICAL_NAMING_STRATEGY,
|
|
"org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy");
|
|
properties.put(AvailableSettings.GENERATE_STATISTICS, "false");
|
|
properties.put(AvailableSettings.GLOBALLY_QUOTED_IDENTIFIERS, "true");
|
|
properties.put(AvailableSettings.GLOBALLY_QUOTED_IDENTIFIERS_SKIP_COLUMN_DEFINITIONS, "true");
|
|
properties.put(AvailableSettings.STATEMENT_BATCH_SIZE, "20");
|
|
properties.put(AvailableSettings.ORDER_INSERTS, "true");
|
|
properties.put(AvailableSettings.ORDER_UPDATES, "true");
|
|
properties.put(AvailableSettings.BATCH_VERSIONED_DATA, "true");
|
|
properties.put(AvailableSettings.USE_NEW_ID_GENERATOR_MAPPINGS, "false");
|
|
return properties;
|
|
}
|
|
|
|
public Map<String, String> getPropsMap(@NonNull String unitName) {
|
|
return convertPropertiestoMaps(getProps(hibernateProperties.find(unitName)));
|
|
}
|
|
|
|
public Map<String, String> convertPropertiestoMaps(Properties properties) {
|
|
Map<String, String> propertiesMap = new HashMap<>();
|
|
|
|
for (Enumeration<?> e = properties.propertyNames(); e.hasMoreElements(); ) {
|
|
String key = (String) e.nextElement();
|
|
propertiesMap.put(key, properties.getProperty(key));
|
|
}
|
|
return propertiesMap;
|
|
}
|
|
|
|
}
|