当前位置: 首页 > wzjs >正文

汽车低价网站建设sketch wordpress 主题

汽车低价网站建设,sketch wordpress 主题,广州网站建设的费用,单页网站是什么样子的因为是老项目, Spring Boot 是1.4, 使用 AbstractRoutingDataSource 来做主从切换, 配置切面类在进入事务时切换成主库, 但实际运行起来却失败, 写操作路由到了从库 查了很多文章, 试了很多方法都无效, 包括修改注解 Transactional 的 propagation 属性, 清空主从标记等等 打…

因为是老项目, Spring Boot 是1.4, 使用 AbstractRoutingDataSource 来做主从切换, 配置切面类在进入事务时切换成主库, 但实际运行起来却失败, 写操作路由到了从库

查了很多文章, 试了很多方法都无效, 包括修改注解 @Transactional 的 propagation 属性, 清空主从标记等等

打断点跟踪代码发现, 进入事务时并没有触发获取数据库连接, 而是事务里第一个查询触发了数据库连接的建立, 选择了从库, 后面的所有操作都不会触发数据源选择

后来查到这篇文章

JPA hibernate AbstractRoutingDataSource 在同一方法内使用不同数据源失败_user springboo jpa controller abstractroutingdatas-CSDN博客

通过这篇文章又找到下面的文章
Spring Data JPA 原理与实战第十一天 Session相关、CompletableFuture、LazyInitializationException_org.hibernate.resource.jdbc.spi.physicalconnection-CSDN博客
 

了解到JPA是有会话保持的, 一旦数据库链接创建在会话期内不会改变, 要想在进入事务时就选择数据源为主库, 需要修改 hibernate.connection.handling_mode 调整处理物理连接的模式。

因为我 Spring Boot  是1.4, 匹配的 hibernate 版本是5.0, 所以是把 release_mode 设置为AFTER_TRANSACTION

@Configuration
public class JpaConfig {@Beanpublic LocalContainerEntityManagerFactoryBean entityManagerFactory(@Qualifier("routingDataSource") DataSource dataSource) {LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();em.setDataSource(dataSource);em.setPackagesToScan("com.my.domain");HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();em.setJpaVendorAdapter(vendorAdapter);// 设置 JPA 属性Properties properties = new Properties();properties.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");properties.setProperty("hibernate.physical_naming_strategy", "org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy");properties.setProperty("hibernate.implicit_naming_strategy", "org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy");properties.setProperty("hibernate.connection.release_mode", "AFTER_TRANSACTION");em.setJpaProperties(properties);return em;}
}

部署后又出现了新问题, 进入事务之前如果有查询操作, 还是会路由到从库, 进入事务时, 不会再触发重新获取数据源, 原因出在这部分代码 

public class LogicalConnectionManagedImpl extends AbstractLogicalConnectionImplementor {private Connection acquireConnectionIfNeeded() {if ( physicalConnection == null ) {// todo : is this the right place for these observer calls?observer.jdbcConnectionAcquisitionStart();try {physicalConnection = jdbcConnectionAccess.obtainConnection();}catch (SQLException e) {throw sqlExceptionHelper.convert( e, "Unable to acquire JDBC Connection" );}finally {observer.jdbcConnectionAcquisitionEnd( physicalConnection );}}return physicalConnection;}
}

如果之前已经获取了链接, jdbcConnectionAccess.obtainConnection() 会直接返回之前创建好的链接进行复用, 解决办法是进入事务之前不要有数据库查询操作, 把查询放到事务里

http://www.dtcms.com/wzjs/596106.html

相关文章:

  • 免费网站做seo2018怎么做网站淘宝客
  • 凡科建站是放在哪个服务器上中国城乡建设结合部网站
  • 什么行业要做网站建设推广这些垂直网站 开源码
  • 网站后期维护和管理怎么做可信赖的南昌网站制作
  • 企业介绍微网站怎么做跨境电商平台规则
  • 建筑设计网站app北京12345微信公众号
  • 做一个网站推广个人门户网站建设流程
  • 台前网站建设费用青岛手工活外发加工网
  • 优秀网站首页设计济南seo网站推广公司
  • 吉安高端网站建设公司网站 建设意见
  • 做网站搞笑口号网店加盟
  • 网站排名点击邯郸做网站哪家好
  • 做网站有自己的服务器吗物流商 网站建设方案
  • 网站推广公司兴田德润电话多少wordpress文章图片本地化
  • 建设网站的推广的软文北京商场招商
  • wordpress主页显示关键词优化的策略
  • 公司定制网站建设公司专门做孕婴用品的网站
  • 网站栏目名seo推广优化
  • 番禺网站建设三杰科技中国建设银行网站的主要功能
  • 网站建设费用上海合肥晚报社官方网站
  • 如何提高网站加载速度慢wordpress文章tags
  • 目录网站做外链长沙seo培训
  • 如何建网站免费网站建设项目数
  • 网站建设投票主题cps广告是什么意思
  • 兰州网站建设和维护工作wordpress模板网
  • 哪些网站做的比较好看的图片唯品会网站建设数据安全分析
  • 网站开发公司哪里好网络优化大师手机版
  • 青海营销网站建设服务一元购网站开发
  • 30分钟seo网站淄博城乡建设局网站
  • 花生壳做网站需要备案值得买wordpress