Springboot spring data jpa 多数据源的配置01

Springboot spring data jpa 多数据源的配置 (说明:这只是引入了多个数据源,他们各自管理各自的事务,并没有实现统一的事务控制)

例: user数据库   global 数据库 

 

1 .application.properties

#database edi configuration
spring.edi.datasource.jdbc-url=jdbc:mysql:///USER?autoReconnect=true&useSSL=false
spring.edi.datasource.driverClassName=com.mysql.jdbc.Driver
spring.edi.datasource.name=root
spring.edi.datasource.password=XXXXX
spring.edi.datasource.validation-query=SELECT 1;
spring.edi.datasource.initial-size=2
spring.edi.datasource.sql-script-encoding=UTF-8

# Show all queries
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true

spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.hibernate.naming.physical-strategy =com.icil.milestone.push.query.strategy.UpperTableStrategy
扫描二维码关注公众号,回复: 3272188 查看本文章

2.配置:  (下面为User数据库的配置)

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
        entityManagerFactoryRef = "ediEntityManagerFactory", 
        transactionManagerRef = "ediTransactionManager1", 
        basePackages = "com.sea.user.repository" //不同的库指定不同的路径,否则会报错
)
public class EDIDbConfig {
    @Primary
    @Bean
    @ConfigurationProperties(prefix = "spring.user.datasource")
    public DataSource mysqlEdiDataSource() {
        return DataSourceBuilder
                    .create()
                    .build();
    }

    @Primary
    @Bean(name = "ediEntityManagerFactory")
    public LocalContainerEntityManagerFactoryBean mysqlEdiEntityManagerFactory(EntityManagerFactoryBuilder builder) {
        return builder
                    .dataSource(mysqlEdiDataSource())
                    //.properties(hibernateProperties())
                    .packages("com.sea.user.user.entries")  //不同的库指定不同的路径,否则会报错
 
 
 
 
.persistenceUnit("userPU") .build(); } 


@Primary
@Bean(name
= "userTransactionManager1")

public PlatformTransactionManager mysqlEdiTransactionManager(@Qualifier("ediEntityManagerFactory") EntityManagerFactory entityManagerFactory)
{
return new JpaTransactionManager(entityManagerFactory); }



private Map hibernateProperties() { Resource resource = new ClassPathResource("application.properties");

try { Properties properties = PropertiesLoaderUtils.loadProperties(resource);

return properties.entrySet().stream() .collect(Collectors.toMap( e -> e.getKey().toString(), e -> e.getValue()) );
}
catch (IOException e) { return new HashMap(); } }


/*private Map<String, String> getVendorProperties(DataSource dataSource) { return jpaProperties.getHibernateProperties(dataSource); }*/ }

配置:  (下面为global数据库的配置--和上面一样)

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
        entityManagerFactoryRef = "globalEntityManagerFactory", 
        transactionManagerRef = "globalTransactionManager1", 
        basePackages = "com.sea.global.repository"
)
public class GlobalDbConfig {
    
    @Bean
    @ConfigurationProperties(prefix = "spring.global.datasource")
    public DataSource mysqlGlobalDataSource() {
        return DataSourceBuilder
                    .create()
                    .build();
    }

    @Bean(name = "globalEntityManagerFactory")
    public LocalContainerEntityManagerFactoryBean mysqlGlobalEntityManagerFactory(EntityManagerFactoryBuilder builder) {
        return builder
                    .dataSource(mysqlGlobalDataSource())
                    //.properties(hibernateProperties())
                    .packages("com.sea.global.entries")
                    .persistenceUnit("globalPU")
                    .build();
    }

    @Bean(name = "globalTransactionManager1")
    public PlatformTransactionManager mysqlGlobalTransactionManager(@Qualifier("globalEntityManagerFactory") EntityManagerFactory entityManagerFactory) {
        return new JpaTransactionManager(entityManagerFactory);
    }
    private Map hibernateProperties() {

        Resource resource = new ClassPathResource("application.properties");
        
        try {
            Properties properties = PropertiesLoaderUtils.loadProperties(resource);
            
            return properties.entrySet().stream()
                                            .collect(Collectors.toMap(
                                                        e -> e.getKey().toString(),
                                                        e -> e.getValue())
                                                    );
        } catch (IOException e) {
            return new HashMap();
        }
    }
    /*private Map<String, String> getVendorProperties(DataSource dataSource) {
        return jpaProperties.getHibernateProperties(dataSource);
    }*/
}

猜你喜欢

转载自www.cnblogs.com/lshan/p/9687451.html