Java tutorial
package com.musala.configuration; /* * Copyright 2013 the original author or authors. * * Licensed 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 * * Created by dinyo.dinev on 2014. */ import com.google.common.base.Preconditions; import com.musala.cron.RefreshDbTask; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.EnableAspectJAutoProxy; import org.springframework.context.annotation.PropertySource; import org.springframework.context.support.ConversionServiceFactoryBean; import org.springframework.core.convert.ConversionService; import org.springframework.core.convert.converter.Converter; import org.springframework.core.env.Environment; import org.springframework.core.io.ClassPathResource; import org.springframework.data.jpa.repository.config.EnableJpaRepositories; import org.springframework.jdbc.datasource.DriverManagerDataSource; import org.springframework.jdbc.datasource.init.DatabasePopulator; import org.springframework.jdbc.datasource.init.DatabasePopulatorUtils; import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator; import org.springframework.orm.jpa.JpaTransactionManager; import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.annotation.EnableTransactionManagement; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import javax.persistence.EntityManagerFactory; import javax.sql.DataSource; import java.sql.SQLException; import java.util.Properties; import java.util.Set; @Configuration @EnableAspectJAutoProxy @EnableTransactionManagement @EnableWebMvc @EnableJpaRepositories(basePackages = "com.musala.repository") @ComponentScan(basePackages = { "com.musala.service", "com.musala.core", "com.musala.converter", "com.musala.controller", "com.musala.aspects", "com.musala.cron" }) @PropertySource({ "classpath:persistence-h2.properties" }) @EnableScheduling public class RssAplicationConfiguration { @Autowired private Environment env; @Autowired private Set<Converter<?, ?>> converters; @Bean(name = "dataSource") public DataSource dataSource() throws SQLException { DataSource dataSource = createDataSource(); DatabasePopulatorUtils.execute(createDatabasePopulator(), dataSource); System.out.println(dataSource.getConnection()); return dataSource; } private DatabasePopulator createDatabasePopulator() { ResourceDatabasePopulator databasePopulator = new ResourceDatabasePopulator(); databasePopulator.setContinueOnError(false); databasePopulator.addScript(new ClassPathResource("sql/rss-schema.ddl")); databasePopulator.addScript(new ClassPathResource("sql/test-data.sql")); return databasePopulator; } private DataSource createDataSource() { final DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setDriverClassName(Preconditions.checkNotNull(env.getProperty("jdbc.driverClassName"))); dataSource.setUrl(Preconditions.checkNotNull(env.getProperty("jdbc.url"))); return dataSource; } @Bean(name = "entityManagerFactory") public EntityManagerFactory entityManagerFactory() throws SQLException { HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter(); LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean(); factory.setDataSource(dataSource()); factory.setPackagesToScan("com.musala.db"); //factory.setPersistenceUnitName("persistenceUnit"); //TODO check why use it factory.setJpaVendorAdapter(vendorAdapter); factory.setJpaProperties(additionalProperties()); factory.afterPropertiesSet(); return factory.getObject(); } final Properties additionalProperties() { final Properties hibernateProperties = new Properties(); hibernateProperties.setProperty("hibernate.hbm2ddl.auto", env.getProperty("hibernate.hbm2ddl.auto")); hibernateProperties.setProperty("hibernate.dialect", env.getProperty("hibernate.dialect")); hibernateProperties.setProperty("hibernate.show_sql", env.getProperty("hibernate.show_sql")); hibernateProperties.setProperty("hibernate.hbm2ddl.import_files", env.getProperty("hibernate.hbm2ddl.import_files")); return hibernateProperties; } @Bean public PlatformTransactionManager transactionManager() throws SQLException { JpaTransactionManager txManager = new JpaTransactionManager(); txManager.setEntityManagerFactory(entityManagerFactory()); return txManager; } @Bean public ConversionService conversionService() { ConversionServiceFactoryBean bean = new ConversionServiceFactoryBean(); bean.setConverters(converters); bean.afterPropertiesSet(); return bean.getObject(); } }