当前位置:   article > 正文

SpringBoot+JPA数据源配置&解决springboot2.1.x之后jpaProperties报错的问题_jpaproperties.gethibernateproperties

jpaproperties.gethibernateproperties

springboot2.1.x之后整合JPA配置多数据源时

HibernateSettings hibernateSettings = new HibernateSettings();

jpaProperties.getHibernateProperties(hibernateSettings)报错

 

(springboot2.1.x之后不再包含此方法)

 

解决此报错:

1. 将jpaProperties.getHibernateProperties所在方法getVendorProperties()注释掉;

2. 注入:

@Autowired

private HibernateProperties hibernateProperties;

3.更改properties()方法参数: 

将原getVendorProperties()改为:

Map<String, Object> properties = hibernateProperties.determineHibernateProperties(jpaProperties.getProperties(), new HibernateSettings());

  1. @Primary
  2. @Bean(name = "entityManagerFactory")
  3. public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean(EntityManagerFactoryBuilder entityManagerFactoryBuilder)
  4. {
  5. // 解决2.1.x版本jpaProperties.getHibernateProperties(hibernateSettings);失效的问题
  6. Map<String, Object> properties =
  7. hibernateProperties.determineHibernateProperties(jpaProperties.getProperties(), new
  8. HibernateSettings());
  9. return entityManagerFactoryBuilder.dataSource(dataSource())
  10. // .properties(getVendorProperties()) // 2.1.X后不可用
  11. .properties(properties)// 更改为此方式
  12. .packages("com.api.jpa.entity") // 实体类位置
  13. .persistenceUnit("persistenceUnit")// 持久性单元的名称。
  14. .build();
  15. }

 

 

附上JPA数据源配置代码:

  1. @Configuration
  2. //jpa配置
  3. @EnableJpaRepositories(entityManagerFactoryRef = "fastApiEntityManagerFactory", // 实体工厂
  4. transactionManagerRef = "transcationManagementFastApi", // 事务
  5. basePackages = {"com.api.jpa.repository"} // Repository 位置
  6. )
  7. public class DBConfig
  8. {
  9. @Resource
  10. private JpaProperties jpaProperties;
  11. @Autowired
  12. private HibernateProperties hibernateProperties;// 解决2.1.x版本jpaProperties.getHibernateProperties(hibernateSettings);失效的问题
  13. @Bean(name = "jdbcTemplate")
  14. public JdbcTemplate jdbcTemplateStation(DataSource dataSource)
  15. {
  16. return new JdbcTemplate(dataSource);
  17. }
  18. @Bean
  19. @ConfigurationProperties(prefix = "spring.datasource.fastapi")
  20. public DataSource dataSource()
  21. {
  22. return DataSourceBuilder.create().build();
  23. }
  24. @Primary
  25. @Bean(name = "transcationManagementFastApi")
  26. public PlatformTransactionManager primaryTransactionManage(DataSource dataSource)
  27. {
  28. return new DataSourceTransactionManager(dataSource);
  29. }
  30. /**
  31. *
  32. * @title 配置sessionFactory
  33. * @Describtion
  34. * @Date 2018年12月19日 下午1:38:24
  35. * @author zch
  36. * @param emf
  37. * @return
  38. */
  39. @Bean(name = "fastApiSessionFactory")
  40. public SessionFactory sessionFactory(@Qualifier("fastApiEntityManagerFactory") EntityManagerFactory emf)
  41. {
  42. return emf.unwrap(SessionFactory.class);
  43. }
  44. /**
  45. *
  46. * @title 实体类管理配置,类似于hibernate的session
  47. * @Describtion
  48. * @Date 2019年10月23日 下午3:20:56
  49. * @author zch
  50. * @return
  51. */
  52. @Primary
  53. @Bean(name = "fastApiEntityManager")
  54. public EntityManager entityManager(EntityManagerFactoryBuilder entityManagerFactoryBuilder)
  55. {
  56. return entityManagerFactoryBean(entityManagerFactoryBuilder).getObject().createEntityManager();
  57. }
  58. /**
  59. * 实体类管理工厂,类似于hibernate的sessionFactory
  60. *
  61. * @title
  62. * @Describtion
  63. * @Date 2019年10月23日 下午3:33:46
  64. * @author zch
  65. * @param entityManagerFactoryBuilder * persistenceUnit 持久性单元的名称。 如果只建立一个EntityManagerFactory,你可以省略这个,但是如果在同一个应用程序中有多个,你应该给它们不同的名字 properties 标准JPA或供应商特定配置的通用属性。 这些属性覆盖构造函数中提供的任何值。
  66. * @return
  67. */
  68. @Primary
  69. @Bean(name = "fastApiEntityManagerFactory")
  70. public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean(EntityManagerFactoryBuilder entityManagerFactoryBuilder)
  71. {
  72. // 解决2.1.x版本jpaProperties.getHibernateProperties(hibernateSettings);失效的问题
  73. Map<String, Object> properties = hibernateProperties.determineHibernateProperties(jpaProperties.getProperties(), new HibernateSettings());
  74. return entityManagerFactoryBuilder.dataSource(dataSource())
  75. // .properties(getVendorProperties())
  76. .properties(properties)
  77. .packages("com.api.jpa.entity") // 实体类位置
  78. .persistenceUnit("fastApiPersistenceUnit")// 持久性单元的名称。
  79. .build();
  80. }
  81. /**
  82. *
  83. * @title 获取hibernate配置
  84. * @Describtion
  85. * @Date 2019年10月23日 下午3:42:48
  86. * @author zch
  87. * @return
  88. */
  89. // private Map<String, Object> getVendorProperties()
  90. // {
  91. // HibernateSettings hibernateSettings = new HibernateSettings();
  92. // return jpaProperties.getHibernateProperties(hibernateSettings);// (springboot2.1.x后失效)
  93. // }
  94. }

application.yml中datasource:

datasource:
    fastapi:
      jdbc-url: 
      username: 
      password: 
      driver-class-name:  com.mysql.cj.jdbc.Driver
      validationQuery: SELECT 1
      type: org.apache.commons.dbcp2.BasicDataSource
  jpa: #统一JPA配置
    database: MYSQL
    show-sql: true
    properties: 
      hibernate:  
        dialect: org.hibernate.dialect.MySQL5Dialect
    database-platform: org.hibernate.dialect.MySQL5InnoDBDialect

  # db2: 配置多数据源

 多数据源配置:

配置新的DataSource

配置新的事务管理

配置新的entityManagerFactory(配置新的sessionFactory,配置新的entityManager)

配置JPA:

@EnableJpaRepositories(entityManagerFactoryRef = "", // 实体工厂
    transactionManagerRef = "", // 事务
    basePackages = {""} // Repository 位置
)

(注意设置默认数据源@Primary不要冲突)

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/52319
推荐阅读
相关标签
  

闽ICP备14008679号