Java tutorial
/* * Licensed to JIVR under one or more contributor * license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright * ownership. JIVR licenses this file to you under * the Apache License, Version 2.0 (the "License"); you may * not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package me.bulat.jivr.webmin.config; import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.HikariDataSource; import org.hibernate.cfg.Environment; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.*; import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder; import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType; import org.springframework.orm.jpa.JpaTransactionManager; import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.annotation.EnableTransactionManagement; import javax.sql.DataSource; import java.util.Properties; /** * @author Alex Bogatikov * Created on 27/08/16. */ @Configuration @ComponentScan("me.bulat.jivr.webmin.data") @PropertySource("classpath:spring/db-access.properties") @EnableTransactionManagement public class DataAppConfig { private @Value("${jdbc.driverClassName}") String driverClassName; private @Value("${jdbc.url}") String url; private @Value("${jdbc.username}") String username; private @Value("${jdbc.password}") String password; @Value("${jdbc.hibernate.dialect}") private String dialect; @Value("${jdbc.hibernate.hbm2ddl.auto}") private String hbm2ddlAuto; @Value("${jpa.showSql}") private String showSql; @Profile("default") @Bean(name = "dataSource", destroyMethod = "close") DataSource dataSource() { HikariConfig config = new HikariConfig(); config.setDriverClassName(driverClassName); config.setJdbcUrl(url); config.setUsername(username); config.setPassword(password); config.setConnectionTestQuery("SELECT 1"); config.setPoolName("springHikariCP"); config.addDataSourceProperty("cachePrepStmts", "true"); config.addDataSourceProperty("prepStmtCacheSize", "250"); config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048"); return new HikariDataSource(config); } @Profile("default") @Bean(name = "userEntityManagerFactory") public LocalContainerEntityManagerFactoryBean configureEntityManagerFactory() { LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean(); entityManagerFactoryBean.setDataSource(dataSource()); entityManagerFactoryBean.setPackagesToScan("me.bulat.jivr.webmin.data.*"); entityManagerFactoryBean.setJpaVendorAdapter(new HibernateJpaVendorAdapter()); Properties jpaProperties = new Properties(); jpaProperties.put(org.hibernate.cfg.Environment.DIALECT, dialect); jpaProperties.put(org.hibernate.cfg.Environment.HBM2DDL_AUTO, hbm2ddlAuto); jpaProperties.put(Environment.SHOW_SQL, showSql); entityManagerFactoryBean.setJpaProperties(jpaProperties); return entityManagerFactoryBean; } @Bean(name = "myTransactionManager") public PlatformTransactionManager annotationDrivenTransactionManager() { return new JpaTransactionManager(); } @Profile("test") @Bean(name = "hsqlDataSource") public DataSource getEmbeddedDataSource() { return new EmbeddedDatabaseBuilder().setType(EmbeddedDatabaseType.HSQL).addScript("classpath:schema.sql") .addScript("classpath:test-data.sql").build(); } @Profile("test") @Bean(name = "hsqldbUserEntityManagerFactory") public LocalContainerEntityManagerFactoryBean configureH2EntityManagerFactory() { LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean(); entityManagerFactoryBean.setDataSource(getEmbeddedDataSource()); entityManagerFactoryBean.setPackagesToScan("me.bulat.jivr.webmin.data.*"); entityManagerFactoryBean.setJpaVendorAdapter(new HibernateJpaVendorAdapter()); Properties jpaProperties = new Properties(); jpaProperties.put(Environment.DIALECT, "org.hibernate.dialect.HSQLDialect"); jpaProperties.put(Environment.HBM2DDL_AUTO, "update"); jpaProperties.put(Environment.SHOW_SQL, "true"); entityManagerFactoryBean.setJpaProperties(jpaProperties); return entityManagerFactoryBean; } }