千家信息网

Springboot 2.1.5 配置JPA多数据源的方法

发表于:2025-01-26 作者:千家信息网编辑
千家信息网最后更新 2025年01月26日,这篇文章主要介绍"Springboot 2.1.5 配置JPA多数据源的方法",在日常操作中,相信很多人在Springboot 2.1.5 配置JPA多数据源的方法问题上存在疑惑,小编查阅了各式资料,
千家信息网最后更新 2025年01月26日Springboot 2.1.5 配置JPA多数据源的方法

这篇文章主要介绍"Springboot 2.1.5 配置JPA多数据源的方法",在日常操作中,相信很多人在Springboot 2.1.5 配置JPA多数据源的方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Springboot 2.1.5 配置JPA多数据源的方法"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

最近在学sprinJpa,照着网上博客想试着配一下Jpa的多数据源,但发现因为springboot版本太高的问题,网上的demo都不适用,导致找了很久才找到解决办法。现在把操作过程记录如下。

一、yml配置

spring:  datasource:    test1:      driver-class-name: com.mysql.jdbc.Driver      password: 123456      #url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false      #springboot2.0以上      jdbc-url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false      username: root    test2:      driver-class-name: com.mysql.jdbc.Driver      password: 123456      #url: jdbc:mysql://localhost:3306/test2?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false      #springboot2.0以上      jdbc-url: jdbc:mysql://localhost:3306/test2?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false      username: root  jpa:    ## 是否打印sql    show-sql: true    properties:      hibernate:        # 指定引擎为Innodb        dialect: org.hibernate.dialect.MySQL5InnoDBDialect        hbm2ddl:          # create: 每次加载 hibernate 时都会删除上一次的生成的表,          # 然后根据你的 model 类再重新来生成新表,哪怕两次没有任何改变也要这样执行,          # 这就是导致数据库表数据丢失的一个重要原因。          # create-drop :每次加载 hibernate 时根据 model 类生成表,但是 sessionFactory 一关闭,表就自动删除。          # update:最常用的属性,第一次加载 hibernate 时根据 model 类会自动建立起表的结构(前提是先建立好数据库),以后加载 hibernate 时根据 model 类自动更新表结构,即使表结构改变了但表中的行仍然存在不会删除以前的行。要注意的是当部署到服务器后,表结构是不会被马上建立起来的,是要等 应用第一次运行起来后才会。          # validate :每次加载 hibernate 时,验证创建数据库表结构,只会和数据库中的表进行比较,不会创建新表,但是会插入新值。          auto: update

二、注册datasource到spring容器

@Configurationpublic class DataSourceConfig {    @Bean(name = "primaryDataSource")    @Primary    @Qualifier("primaryDataSource")    @ConfigurationProperties(prefix = "spring.datasource.test1")    public DataSource primaryDataSource() {        System.out.println("-------------------- primaryDataSource初始化 ---------------------");        return DataSourceBuilder.create().build();    }    @Bean(name = "secondaryDataSource")    @Qualifier("secondaryDataSource")    @ConfigurationProperties(prefix = "spring.datasource.test2")    public DataSource secondaryDataSource() {        System.out.println("-------------------- secondaryDataSource初始化---------------------");        return DataSourceBuilder.create().build();    }}

三、注册jpa相关对象进入spring容器

数据源1:

@Configuration@EnableTransactionManagement@EnableJpaRepositories(        entityManagerFactoryRef="entityManagerFactoryPrimary",        transactionManagerRef="transactionManagerPrimary",        basePackages= { "com.czcstudy.springbootdemo.day1.dao.test1" }) //设置Repository所在位置public class RepositoryPrimaryConfig {    @Autowired    @Qualifier("primaryDataSource")    private DataSource primaryDataSource;    @Autowired    private JpaProperties jpaProperties;    @Autowired    private HibernateProperties hibernateProperties;    @Primary    @Bean(name = "entityManagerFactoryPrimary")    public LocalContainerEntityManagerFactoryBean entityManagerFactoryPrimary(            EntityManagerFactoryBuilder builder) {                //网上文章大多数都是jpaProperties.getHibernateProperties(dataSource);就直接得到了hibernate的配置map,                //但这个方法在springboot2.0+好像就舍弃了,所以这里改成这样。        Map properties = hibernateProperties.determineHibernateProperties(                jpaProperties.getProperties(), new HibernateSettings());        return builder.dataSource(primaryDataSource).properties(properties)                .packages("com.czcstudy.springbootdemo.day1.bean.po").build();//实体包路径    }    @Primary    @Bean(name = "transactionManagerPrimary")    public PlatformTransactionManager transactionManagerPrimary(EntityManagerFactoryBuilder builder) {        return new JpaTransactionManager(entityManagerFactoryPrimary(builder).getObject());    }

数据源2:

@Configuration@EnableTransactionManagement@EnableJpaRepositories(        entityManagerFactoryRef="entityManagerFactorySecondary",        transactionManagerRef="transactionManagerSecondary",        basePackages= { "com.czcstudy.springbootdemo.day1.dao.test2" }) //设置Repository所在位置public class RepositorySecondaryConfig {    @Autowired    @Qualifier("secondaryDataSource")    private DataSource secondaryDataSource;    @Autowired    private JpaProperties jpaProperties;    @Autowired    private HibernateProperties hibernateProperties;    @Bean(name = "entityManagerFactorySecondary")    public LocalContainerEntityManagerFactoryBean entityManagerFactorySecondary(            EntityManagerFactoryBuilder builder) {                //网上文章大多数都是jpaProperties.getHibernateProperties(dataSource);就直接得到了hibernate的配置map,                //但这个方法在springboot2.0+好像就舍弃了,所以这里改成这样。        Map properties = hibernateProperties.determineHibernateProperties(                jpaProperties.getProperties(), new HibernateSettings());        return builder.dataSource(secondaryDataSource).properties(properties)                .packages("com.czcstudy.springbootdemo.day1.bean.po").build();//实体的包路径    }    @Bean(name = "transactionManagerSecondary")    public PlatformTransactionManager transactionManagerPrimary(EntityManagerFactoryBuilder builder) {        return new JpaTransactionManager(entityManagerFactorySecondary(builder).getObject());    }}

四、使用spring事务例

@Servicepublic class JpaTestServiceImpl implements JpaTestService {    @Autowired    private UserJpaTest2Dao userRepository2;    @Override    @Transactional(value = "transactionManagerSecondary",rollbackFor = RuntimeException.class)    public void test(){        List userJpaTestList  = userRepository2.findAll();        System.out.println(userJpaTestList);    }}

其中指定的value就是前面注册的PlatformTransactionManager对象名称,多数据源时需要指定。

五、小结

以上就是springboot2.1.5 配置jpa多数据源的方法,启动项目我们可以看到

HikariPool连接池已经启动了,这是springboot的默认数据库连接池,所以连接池我们这里就不自己配了。

到此,关于"Springboot 2.1.5 配置JPA多数据源的方法"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

数据 数据源 方法 配置 数据库 结构 学习 就是 文章 生成 位置 实体 容器 对象 所在 更多 第一次 路径 问题 帮助 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 信息与网络技术专业就业 关闭网站是不是要关闭服务器 数据库技术和智能设备 国泰君安后端软件开发工资 有关网络安全的诗歌20字 网络安全资产管理agent 网络安全宣传活动情况汇报 我国网络安全大事记 网络安全实训的目的与意义 安卓软件开发证书 储存服务器维修费需要多少钱 南雄市网络安全手册 nba2k21服务器断开 数据存储磁盘阵列属于服务器吗 数据库应用技术最高成绩 成为网络安全员应该先学什么 农业银行软件开发中心 帝宏软件开发有限公司怎么样 汽车应用层应用软件开发 网络安全宣传周在哪举办 java创建ftp服务器 珠海视频会议服务器报价 富文本编辑器怎么进入数据库 大话西游神兽哪个服务器最便宜 访问服务器在国外的网址 校园网络安全拓扑 国家网络安全宣传活动小报 微信微博互联网科技背景 网络安全攻防中心介绍 数据库间视图映射
0