spring boot springjpa 支持多个数据源的实例代码
1.SpringBoot的程序启动类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.context.web.SpringBootServletInitializer;
import org.springframework.context.annotation.ComponentScan;
@ComponentScan
@EnableAutoConfiguration
//@EnableJpaRepositories(basePackages = "com.sonychina.backend.repository")
public class Application extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication app = new SpringApplication(Application.class);
app.run(args);
//SpringApplication.run(Application.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
}
2.双数据源配置类
import java.util.Map;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.autoconfigure.orm.jpa.EntityManagerFactoryBuilder;
import org.springframework.boot.autoconfigure.orm.jpa.JpaProperties;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import com.test.entity.statistic.SysUser;
import com.test.repository.system.SystemRepository;
@Configuration
@EnableJpaRepositories(entityManagerFactoryRef="entityManagerFactoryPrimary",
basePackageClasses= {SystemRepository.class})
public class GlobalDataConfiguration {
// @Autowired
// private DBConfig dbConfig;
@Autowired
private JpaProperties jpaProperties;
@Bean(name="primaryDataSource")
@Primary
@ConfigurationProperties(prefix="datasource.primary")
public DataSource primaryDataSource() {
System.out.println("-------------------- primaryDataSource init ---------------------");
return DataSourceBuilder.create().build();
}
@Bean(name="secondaryDataSource")
@ConfigurationProperties(prefix="datasource.secondary")
public DataSource secondaryDataSource() {
System.out.println("-------------------- secondaryDataSource init ---------------------");
// DataSourceBuilder factory = DataSourceBuilder
// .create(DBConfig.class.getClassLoader())
// .driverClassName(dbConfig.getDriver())
// .url(dbConfig.getUrl())
// .username(dbConfig.getUser())
// .password(dbConfig.getPassword());
// return factory.build();
return DataSourceBuilder.create().build();
}
// @Bean(name = "entityManagerPrimary")
// @Primary
// public EntityManager entityManager(EntityManagerFactoryBuilder builder) {
// return customerEntityManagerFactory(builder).getObject().createEntityManager();
// }
@Bean(name="entityManagerFactoryPrimary")
@Primary
public LocalContainerEntityManagerFactoryBean customerEntityManagerFactory(EntityManagerFactoryBuilder builder) {
return builder.dataSource(primaryDataSource())
.properties(getVendorProperties(primaryDataSource()))
.packages(SysUser.class)
.persistenceUnit("system")
.build();
}
private Map<String, String> getVendorProperties(DataSource dataSource) {
return jpaProperties.getHibernateProperties(dataSource);
}
}
3.第二个jpa实体管理器
import java.util.Map;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.orm.jpa.EntityManagerFactoryBuilder;
import org.springframework.boot.autoconfigure.orm.jpa.JpaProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
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 com.test.entity.manage.Banner;
import com.test.repository.manage.BannerRepository;
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(entityManagerFactoryRef="entityManagerFactorySecondary",
transactionManagerRef="transactionManagerSecondary",
basePackageClasses= {BannerRepository.class})
public class SecondEMFBConfig {
@Autowired
private JpaProperties jpaProperties;
@Autowired@Qualifier("secondaryDataSource")
private DataSource dataSource;
// @Bean(name = "entityManagerPrimary")
// @Primary
// public EntityManager entityManager(EntityManagerFactoryBuilder builder) {
// return customerEntityManagerFactory(builder).getObject().createEntityManager();
// }
@Bean(name="entityManagerFactorySecondary")
public LocalContainerEntityManagerFactoryBean customerEntityManagerFactory(EntityManagerFactoryBuilder builder) {
return builder.dataSource(dataSource)
.properties(getVendorProperties(dataSource))
.packages(Banner.class)
.persistenceUnit("customers")
.build();
}
private Map<String, String> getVendorProperties(DataSource dataSource) {
return jpaProperties.getHibernateProperties(dataSource);
}
@Bean(name = "transactionManagerSecondary")
PlatformTransactionManager transactionManagerSecondary(EntityManagerFactoryBuilder builder) {
return new JpaTransactionManager(customerEntityManagerFactory(builder).getObject());
}
}
4.repository类举例
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import com.test.entity.manage.Banner;
public interface BannerRepository extends JpaRepository<Banner, Long> {
@Modifying
@Query("update Banner m set m.name=?1 where m.id=?2")
public void update(String bannerName, Long id);
}
1.5.注意:对@Primary修饰的LocalContainerEntityManagerFactoryBean可以不用指定TransactionManager,spring上下文自动使用默认的JpaTransactionManager,但是对于第二个或第三个等等必须指定TransactionManager。可以参考springboot官方文档中的相关章节。
总结
以上所述是小编给大家介绍的spring boot springjpa 支持多个数据源的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对无名的支持!
同类资源
- superboot210.bin
superboot210.bin本文件感兴趣的可以参考一下,smart210光盘内文件,superboot210.bin。...
- Java基于springboot教务管理系统
Java基于springboot教务管理系统本文件感兴趣的可以参考一下,帮助学校管理教务系统,用一个帐号解决学校教务...
- Java EE企业级应用开发教程Spring+Spring MVC+MyBatis实验报告
JavaEE企业级应用开发教程Spring+SpringMVC+MyBatis实验报告本文件感兴趣的可以参考一下。...
- springBootNoMaven实现定时任务功能
springBootNoMaven本文件感兴趣的可以参考一下,不使用maven环境,创建springboot项目,实现了定时任务功能简单...
- agilebpm-base-spring-boot.rar
agilebpm-base-spring-boot.rar本文件感兴趣的可以参考一下,基于activiti实现的审批工作流web端项目。...
- zhjpabc模块1.67普通列表框右键可以选择表项
易语言zhjpabc模块1.67普通列表框右键可以选择表项例子,添加模块应用后直接可以查看具体的使用方法了,本次...
- zhjpabc模块2.0新增PE类,可做PEID和网卡类,取网卡信息或修改
易语言zhjpabc模块2.0新增PE类,可做PEID和网卡类,取网卡信息或修改例子,添加模块应用后直接可以查看具体的使...
- 数据库课设论文加源码mysql Java spring
数据库课设论文加源码mysqlJavaspring绿色版,数据库课程设计舍友信息管理系统,mysql,javaspring整篇论文。...
- 基于SpringMVC,Spring,Mybatis,BootStrap教务管理系统
基于SpringMVC,Spring,Mybatis,BootStrap教务管理系统绿色版,基础信息管理、系统权限管理、版本管理、子系统...
- Bootstrap点击弹出登录框
Bootstrap点击弹出登录框源代码,点击按钮弹出登录框。...
- Bootstrap前端开发框架
Bootstrap是最受欢迎的HTML、CSS和JS的前端开发框架,用于开发响应式布局、移动设备优先的WEB项目。...
- Bootstrap网页树形分类折叠菜单
Bootstrap网页树形分类折叠菜单源代码基于Bootstrap2.2.1制作,多级分类树形菜单。...