spring boot jpa配置数据源

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

猜你喜欢

转载自www.cnblogs.com/yjwfcs/p/12660712.html