package com.config;
import java.util.Map;
import javax.persistence.EntityManager;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.orm.jpa.HibernateProperties;
import org.springframework.boot.autoconfigure.orm.jpa.HibernateSettings;
import org.springframework.boot.autoconfigure.orm.jpa.JpaProperties;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import me.snowdrop.boot.narayana.autoconfigure.NarayanaConfiguration;
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
entityManagerFactoryRef = "entityManagerFactorySec",
transactionManagerRef="transactionManagerSec",
basePackages = {"com.my.repository"}) //设置Repository所在位置
@AutoConfigureAfter(NarayanaConfiguration.class)
@Import(NarayanaConfiguration.class)
public class DataSourceConfig {
@Autowired
private JpaProperties jpaProperties;
@Autowired
private HibernateProperties hibernateProperties;
@Bean(name="axaDataSource")
@Qualifier("axaDataSource")
@ConfigurationProperties(prefix="spring.datasource.sec")
public DataSource axaDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "entityManagerSec")
public EntityManager entityManager(EntityManagerFactoryBuilder builder) {
return entityManagerFactorySec(builder).getObject().createEntityManager();
}
@Bean(name = "entityManagerFactorySec")
public LocalContainerEntityManagerFactoryBean entityManagerFactorySec(EntityManagerFactoryBuilder builder) {
Map<String, Object> properties = hibernateProperties.determineHibernateProperties(jpaProperties.getProperties(), new HibernateSettings());
return builder.dataSource(axaDataSource())
.properties(properties)
.packages("com.my.entity") //设置实体类所在位置
.persistenceUnit("secPersistenceUnit")
.build();
}
@Bean(name="transactionManagerSec")
PlatformTransactionManager transactionManagerSec(EntityManagerFactoryBuilder builder){
return new JpaTransactionManager(entityManagerFactorySec(builder).getObject());
}
}
spring.datasource.sec.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.sec.jdbc-url=jdbc:mysql://localhost:3306/demo?characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=GMT%2B8
spring.datasource.sec.username=root
spring.datasource.sec.password=root
spring.datasource.sec.type=org.apache.tomcat.jdbc.pool.XADataSource