Commit 941936d1 authored by huriarte's avatar huriarte

Multitenant

parent 8ab9c3c7
package com.bytesw.bytebot.config;
import com.bytesw.xdf.multitenant.config.ByteDataSourceProperties;
import com.zaxxer.hikari.HikariDataSource;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.ComponentScans;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
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.persistence.EntityManagerFactory;
import javax.persistence.PersistenceContext;
import javax.sql.DataSource;
import java.util.Properties;
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
basePackages = {
"com.bytesw.xdf.dao",
"com.bytesw.xdf.coreweb.repository",
"com.bytesw.bytebot.repository"
},
entityManagerFactoryRef = "bytebotEntityManagerFactory",
transactionManagerRef = "bytebotTransactionManager")
@ComponentScans(value = {
@ComponentScan("com.bytesw.bytebot.service")
})
public class JPAConfig {
@Value("${spring.datasource.schemaName}")
private String schema;
@Bean("bytebotDataSource")
public HikariDataSource dataSource(@Qualifier("dataSourceProperties") ByteDataSourceProperties dataSourceProperties) {
HikariDataSource datasource = (HikariDataSource) dataSourceProperties.initializeDataSourceBuilder().type(HikariDataSource.class).build();
datasource.setRegisterMbeans(true);
return datasource;
}
@PersistenceContext(unitName = "bytebotPU")
@Bean(name = "bytebotEntityManagerFactory")
public LocalContainerEntityManagerFactoryBean entityManagerFactory(@Qualifier("bytebotDataSource") DataSource dataSource) {
LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
em.setPersistenceUnitName("bytebotPU");
em.setDataSource(dataSource);
em.setPackagesToScan(new String[]{
"com.bytesw.xdf.model",
"com.bytesw.bytebot.model"
});
em.setJpaVendorAdapter(new HibernateJpaVendorAdapter());
em.setJpaProperties(additionalProperties());
return em;
}
@Bean(name = "bytebotTransactionManager")
public PlatformTransactionManager transactionManager(@Qualifier("bytebotEntityManagerFactory") EntityManagerFactory emf) {
final JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(emf);
return transactionManager;
}
private Properties additionalProperties() {
Properties properties = new Properties();
properties.setProperty("hibernate.default_schema", schema);
properties.setProperty("hibernate.enable_lazy_load_no_trans", "true");
return properties;
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment