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); }*/ }