package com.github.jbai; import java.util.HashMap; import java.util.Map; import javax.persistence.EntityManagerFactory; import javax.sql.DataSource; import org.apache.commons.dbcp.BasicDataSource; import org.hibernate.dialect.MySQL5Dialect; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; import org.springframework.data.jpa.repository.config.EnableJpaRepositories; import org.springframework.orm.jpa.JpaDialect; import org.springframework.orm.jpa.JpaTransactionManager; import org.springframework.orm.jpa.JpaVendorAdapter; import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; import org.springframework.orm.jpa.vendor.Database; import org.springframework.orm.jpa.vendor.HibernateJpaDialect; import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.annotation.EnableTransactionManagement; @Configuration @PropertySource("classpath:META-INF/spring/config.properties") @ComponentScan(basePackages = "com.github.jbai.service") @EnableJpaRepositories(basePackages={"com.github.jbai.repository"}) @EnableTransactionManagement public class AppConfig { private @Value("${database.driverClassName}") String driver; private @Value("${database.url}") String url; private @Value("${database.username}") String username; private @Value("${database.password}") String password; @Bean public static PropertySourcesPlaceholderConfigurer propertyPlaceholderConfigurer() { return new PropertySourcesPlaceholderConfigurer(); } @Bean(destroyMethod="close") public DataSource dataSource() { BasicDataSource dataSource = new BasicDataSource(); dataSource.setDriverClassName(driver); dataSource.setUrl(url); dataSource.setUsername(username); dataSource.setPassword(password); return dataSource; } @Bean public PlatformTransactionManager transactionManager() { JpaTransactionManager txManager = new JpaTransactionManager(); txManager.setEntityManagerFactory(entityManagerFactory()); return txManager; } @Bean public Map<String, Object> jpaProperties() { Map<String, Object> props = new HashMap<String, Object>(); props.put("hibernate.dialect", MySQL5Dialect.class.getName()); props.put("hibernate.hbm2ddl.auto", "update"); props.put("hibernate.show_sql", "true"); props.put("hibernate.format_sql", "true"); props.put("hibernate.connection.charSet", "UTF-8"); return props; } @Bean public JpaDialect jpaDialect() { return new HibernateJpaDialect(); } @Bean public JpaVendorAdapter jpaVendorAdapter() { HibernateJpaVendorAdapter hibernateJpaVendorAdapter = new HibernateJpaVendorAdapter(); hibernateJpaVendorAdapter.setShowSql(true); hibernateJpaVendorAdapter.setGenerateDdl(true); hibernateJpaVendorAdapter.setDatabase(Database.MYSQL); return hibernateJpaVendorAdapter; } private LocalContainerEntityManagerFactoryBean localContainerEntityManagerFactoryBean() { LocalContainerEntityManagerFactoryBean lef = new LocalContainerEntityManagerFactoryBean(); lef.setPersistenceUnitName("persistenceUnit"); lef.setDataSource(this.dataSource()); lef.setJpaPropertyMap(this.jpaProperties()); lef.setJpaVendorAdapter(this.jpaVendorAdapter()); lef.setPackagesToScan("com.github.jbai.entity"); return lef; } @Bean public EntityManagerFactory entityManagerFactory() { LocalContainerEntityManagerFactoryBean factory = this.localContainerEntityManagerFactoryBean(); factory.afterPropertiesSet(); return factory.getObject(); } }