Kepha
07/01/2020, 7:48 AMpackage kr.co.korbit.config
:::
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(entityManagerFactoryRef = "jpaKorbitEntityManagerFactory",
transactionManagerRef = "jpaKorbitTransactionManager",
basePackages = ["kr.co.korbit.jpa.korbit.repository", "kr.co.korbit.jpa.korbit.repository.custom", "kr.co.korbit.jpa.korbit.repository.impl"])
class JpaKorbitConfig {
@Autowired(required = false)
private val persistenceUnitManager: PersistenceUnitManager? = null
@Bean(name = ["jpaKorbitDataSource"])
@ConfigurationProperties(prefix = "spring.datasource.korbit")
@Primary
fun jpaKorbitDataSource(): DataSource {
val dataSource = DataSourceBuilder.create().type(HikariDataSource::class.java).build()
//dataSource.connectionInitSql = "SET NAMES utf8mb4; set @@session.time_zone = '+00:00'"
return dataSource
}
@Bean(name = ["jpaKorbitEntityManagerFactoryBuilder"])
@Primary
fun jpaKorbitEntityManagerFactoryBuilder(): EntityManagerFactoryBuilder {
val adapter = HibernateJpaVendorAdapter()
adapter.setShowSql(true)
adapter.setPrepareConnection(true)
adapter.setDatabase(Database.MYSQL)
adapter.setDatabasePlatform(Env.dialect)
adapter.setGenerateDdl(false)
val properties = HashMap<String, String?>()
properties["hibernate.ddl-auto"] = Env.ddlAuto
properties["hibernate.default_batch_fetch_size"] = "300"
properties["show_sql"] = Env.showSqlFlag
properties["format_sql"] = "true"
properties["use_sql_comments"] = Env.useSqlCommentFlag
properties["hibernate.naming.implicit-strategy}"] = Env.implicitStrategy
properties["hibernate.naming.physical-strategy}"] = Env.physicalStrategy
properties["hibernate.use-new-id-generator-mappings"] = Env.useNewIdGeneratorMappingsFlag
//builder.setCallback(getVendorCallback());
return EntityManagerFactoryBuilder(
adapter, properties, persistenceUnitManager)
}
@Bean(name = ["jpaKorbitEntityManagerFactory"])
@Primary
fun jpaKorbitEntityManagerFactory(
@Qualifier("jpaKorbitEntityManagerFactoryBuilder") builder: EntityManagerFactoryBuilder,
@Qualifier("jpaKorbitDataSource") jpaKorbitDataSource: DataSource?): LocalContainerEntityManagerFactoryBean {
val factory = builder
.dataSource(jpaKorbitDataSource)
// .packages("kr.co.korbit.gia.jpa.kotbit.model")
.persistenceUnit("korbit")
.build()
factory.setPackagesToScan("kr.co.korbit.gia.jpa.korbit.model")
return factory
}
@Bean(name = ["jpaKorbitTransactionManager"])
@Primary
fun jpaKorbitTransactionManager(
@Qualifier("jpaKorbitEntityManagerFactory") jpaKorbitEntityManagerFactory: EntityManagerFactory): PlatformTransactionManager {
return JpaTransactionManager(jpaKorbitEntityManagerFactory)
}
@Bean(name = ["jpaKorbitQueryFactory"])
fun jpaKorbitQueryFactory(@Qualifier("jpaKorbitEntityManagerFactory") jpaKorbitEntityManagerFactory: EntityManagerFactory): JPAQueryFactory {
return JPAQueryFactory(jpaKorbitEntityManagerFactory.createEntityManager())
}
}