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