package com.myfarmer.provman.configuration; import java.util.Properties; import javax.sql.DataSource; import com.google.gson.Gson; import org.hibernate.SessionFactory; 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.PropertySource; import org.springframework.core.env.Environment; import org.springframework.jdbc.datasource.DriverManagerDataSource; import org.springframework.orm.hibernate5.HibernateTransactionManager; import org.springframework.orm.hibernate5.LocalSessionFactoryBean; import org.springframework.transaction.annotation.EnableTransactionManagement; @Configuration @EnableTransactionManagement @ComponentScan({ "com.myfarmer.provman.configuration" }) @PropertySource(value = { "classpath:jdbc.properties" }) public class HibernateConfig { private static final Gson GSON = new Gson(); @Autowired private Environment environment; @Bean public LocalSessionFactoryBean sessionFactory() { System.out.println("**INITIALIZING SESSION FACTORY3"); LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean(); sessionFactory.setDataSource(dataSource()); // where to load @Entity classes from sessionFactory.setPackagesToScan(new String[] { "com.myfarmer.provman.model" }); sessionFactory.setHibernateProperties(hibernateProperties()); return sessionFactory; } @Bean public DataSource dataSource() { DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setDriverClassName(environment.getRequiredProperty("jdbc.driverClassName")); dataSource.setUrl(System.getenv("ENDPOINT_URL")); dataSource.setUsername(System.getenv("DB_USERNAME")); dataSource.setPassword(GSON.fromJson(System.getenv("DB_PASSWORD"), DbCredentials.class).getPassword()); return dataSource; } private Properties hibernateProperties() { Properties properties = new Properties(); properties.put("hibernate.dialect", environment.getRequiredProperty("hibernate.dialect")); properties.put("hibernate.show_sql", environment.getRequiredProperty("hibernate.show_sql")); properties.put("hibernate.format_sql", environment.getRequiredProperty("hibernate.format_sql")); return properties; } @Bean @Autowired public HibernateTransactionManager transactionManager(SessionFactory s) { HibernateTransactionManager txManager = new HibernateTransactionManager(); txManager.setSessionFactory(s); return txManager; } }