```package kr.co.korbit.config ::: @Configuratio...
# spring
k
Copy code
package 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())
    }
}