package de.mlessmann.certassist.config; import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.env.Environment; import org.springframework.data.jpa.repository.config.EnableJpaRepositories; import org.springframework.jdbc.datasource.DriverManagerDataSource; import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter; import javax.sql.DataSource; import java.util.Objects; import java.util.Properties; @Configuration @RequiredArgsConstructor @EnableJpaRepositories(basePackages = "de.mlessmann.certassist.repositories") public class DatabaseConfig { private static final String HIBERNATE_DIALECT_PROPERTY = "hibernate.dialect"; private static final String HIBERNATE_HBM_2_DDL_AUTO_PROPERTY = "hibernate.hbm2ddl.auto"; private static final String HIBERNATE_SHOW_SQL_PROPERTY = "hibernate.show_sql"; final Environment env; @Bean public DataSource dataSource() { final DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setDriverClassName(Objects.requireNonNull(env.getProperty("driverClassName"))); dataSource.setUrl(Objects.requireNonNull(env.getProperty("url"))); dataSource.setUsername(Objects.requireNonNull(env.getProperty("username"))); dataSource.setPassword(Objects.requireNonNull(env.getProperty("password"))); return dataSource; } @Bean public LocalContainerEntityManagerFactoryBean entityManagerFactory() { final LocalContainerEntityManagerFactoryBean entityManagerFactory = new LocalContainerEntityManagerFactoryBean(); entityManagerFactory.setDataSource(dataSource()); entityManagerFactory.setPackagesToScan("de.mlessmann.certassist.models"); entityManagerFactory.setJpaVendorAdapter(new HibernateJpaVendorAdapter()); entityManagerFactory.setJpaProperties(additionalProperties()); return entityManagerFactory; } private Properties additionalProperties() { final Properties hibernateProperties = new Properties(); if (env.getProperty(HIBERNATE_HBM_2_DDL_AUTO_PROPERTY) != null) { hibernateProperties.setProperty(HIBERNATE_HBM_2_DDL_AUTO_PROPERTY, env.getProperty(HIBERNATE_HBM_2_DDL_AUTO_PROPERTY)); } if (env.getProperty(HIBERNATE_DIALECT_PROPERTY) != null) { hibernateProperties.setProperty(HIBERNATE_DIALECT_PROPERTY, env.getProperty(HIBERNATE_DIALECT_PROPERTY)); } if (env.getProperty(HIBERNATE_SHOW_SQL_PROPERTY) != null) { hibernateProperties.setProperty(HIBERNATE_SHOW_SQL_PROPERTY, env.getProperty(HIBERNATE_SHOW_SQL_PROPERTY)); } return hibernateProperties; } }