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

用dw做网站怎么添加背景图片企业网站报价模板下载

用dw做网站怎么添加背景图片,企业网站报价模板下载,广西住房建设厅网站首页,为什么wordpress邮件发不出去引言 在微服务架构和复杂业务场景中,一个Spring Boot应用连接多个数据库的需求日益普遍。许多开发者尝试通过简单复制单数据源配置来实现多数据源,结果却遭遇了Bean冲突、事务失效、连接泄漏等隐蔽问题。本文将深入剖析Spring Boot自动配置的底层逻辑&a…

引言

在微服务架构和复杂业务场景中,一个Spring Boot应用连接多个数据库的需求日益普遍。许多开发者尝试通过简单复制单数据源配置来实现多数据源,结果却遭遇了Bean冲突、事务失效、连接泄漏等隐蔽问题。本文将深入剖析Spring Boot自动配置的底层逻辑,揭示多数据源场景下的典型陷阱,并提供一套生产级解决方案。


一、为什么简单的多数据源配置会失败?
1. Spring Boot的自动配置陷阱

Spring Boot默认通过DataSourceAutoConfiguration自动配置单数据源。当开发者尝试添加第二个数据源时,以下问题会突然爆发:

// 典型错误配置方式
@Bean
public DataSource dataSource1() { /* 配置1 */ }@Bean
public DataSource dataSource2() { /* 配置2 */ }// 启动时报错:
// No qualifying bean of type 'javax.sql.DataSource' available: 
// expected single matching bean but found 2
2. 事务管理的"薛定谔状态"

即使成功注入数据源,未正确配置的事务管理器会导致:

  • 跨数据源操作缺乏原子性
  • @Transactional注解神秘失效
  • 部分操作不回滚

二、多数据源配置的核心矛盾
1. 自动配置的"霸道"行为

Spring Boot的自动配置类通过条件注解控制Bean创建:

@Configuration
@ConditionalOnClass({ DataSource.class, EmbeddedDatabaseType.class })
@ConditionalOnMissingBean(DataSource.class) // 关键点!
@EnableConfigurationProperties(DataSourceProperties.class)
public class DataSourceAutoConfiguration { ... }

当手动声明多个DataSource时,​自动配置被禁用,但相关组件(如JdbcTemplate)仍依赖默认数据源。

2. 事务管理器的"独占性"

PlatformTransactionManager默认绑定主数据源,多数据源需要独立的事务管理器:

@Bean
@Primary // 必须明确指定主事务管理器
public PlatformTransactionManager txManager1(DataSource dataSource1) {return new DataSourceTransactionManager(dataSource1);
}

三、生产级多数据源配置方案
步骤1:禁用默认数据源自动配置
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class,DataSourceTransactionManagerAutoConfiguration.class,JdbcTemplateAutoConfiguration.class
})
public class MultiDataSourceApp { ... }
步骤2:手动定义所有数据源
# application.yml
primary:datasource:url: jdbc:mysql://primary/dbusername: adminpassword: pwd123
secondary:datasource:url: jdbc:mysql://secondary/dbusername: readerpassword: read123
@Configuration
public class DataSourceConfig {// 主数据源(必须标记@Primary)@Bean(name = "primaryDataSource")@Primary@ConfigurationProperties(prefix = "primary.datasource")public DataSource primaryDataSource() {return DataSourceBuilder.create().build();}// 从数据源@Bean(name = "secondaryDataSource")@ConfigurationProperties(prefix = "secondary.datasource")public DataSource secondaryDataSource() {return DataSourceBuilder.create().build();}
}
步骤3:为每个数据源配置独立的事务管理器
@Configuration
public class TransactionManagerConfig {@Bean(name = "primaryTransactionManager")@Primarypublic PlatformTransactionManager primaryTxManager(@Qualifier("primaryDataSource") DataSource dataSource) {return new DataSourceTransactionManager(dataSource);}@Bean(name = "secondaryTransactionManager")public PlatformTransactionManager secondaryTxManager(@Qualifier("secondaryDataSource") DataSource dataSource) {return new DataSourceTransactionManager(dataSource);}
}
步骤4:定制化JdbcTemplate
@Bean(name = "primaryJdbcTemplate")
public JdbcTemplate primaryJdbcTemplate(@Qualifier("primaryDataSource") DataSource dataSource) {return new JdbcTemplate(dataSource);
}@Bean(name = "secondaryJdbcTemplate")
public JdbcTemplate secondaryJdbcTemplate(@Qualifier("secondaryDataSource") DataSource dataSource) {return new JdbcTemplate(dataSource);
}

四、多数据源事务的进阶控制
1. 分布式事务的伪命题

在未引入Seata等中间件的情况下,Spring的@Transactional只能保证单个数据源的原子性。跨库操作需要业务层补偿机制。

2. 事务传播的精确控制
// 明确指定使用哪个事务管理器
@Transactional(value = "secondaryTransactionManager", propagation = Propagation.REQUIRES_NEW)
public void batchInsert() {// 使用secondary数据源执行操作
}

五、性能优化与监控
1. 连接池参数调优
@Bean(name = "primaryDataSource")
@ConfigurationProperties(prefix = "primary.datasource.hikari")
public DataSource primaryDataSource() {return DataSourceBuilder.create().type(HikariDataSource.class).build();
}// application.yml
primary:datasource:hikari:maximum-pool-size: 20connection-timeout: 3000
2. 监控指标暴露
@Bean
public DataSourcePoolMetrics primaryDataSourceMetrics(@Qualifier("primaryDataSource") DataSource dataSource) {return new DataSourcePoolMetrics(dataSource, "primary", Tags.empty());
}

六、总结与最佳实践
  1. 严格隔离配置​:每个数据源的属性前缀、Bean名称、事务管理器都要清晰隔离
  2. 显式排除自动配置​:避免残留配置造成冲突
  3. 事务边界明确​:通过@Qualifier和@Transactional属性精确控制
  4. 监控先行​:配置连接池监控,预防泄漏和性能瓶颈

文章转载自:

http://511TR7Qk.xkhhy.cn
http://OjHThGJt.xkhhy.cn
http://WASxlfvh.xkhhy.cn
http://aTQeVgKy.xkhhy.cn
http://cWa7p3wt.xkhhy.cn
http://PpfA3KX0.xkhhy.cn
http://hogsKoJh.xkhhy.cn
http://d3KwzPvS.xkhhy.cn
http://faKIn6Ol.xkhhy.cn
http://biATKR6R.xkhhy.cn
http://ANP3R34h.xkhhy.cn
http://EuuPSMSO.xkhhy.cn
http://OQVQXmGh.xkhhy.cn
http://ZYgwMe5y.xkhhy.cn
http://fqmfDi8b.xkhhy.cn
http://WwAxISXt.xkhhy.cn
http://IpFUdBZ0.xkhhy.cn
http://xDC1eh1N.xkhhy.cn
http://Tcp1l23V.xkhhy.cn
http://PFjJpCol.xkhhy.cn
http://zKpabam5.xkhhy.cn
http://C5RICFRR.xkhhy.cn
http://iiOAsZxy.xkhhy.cn
http://zGi6lcwt.xkhhy.cn
http://N9vljCMm.xkhhy.cn
http://mA3uth2F.xkhhy.cn
http://jJvjh0cx.xkhhy.cn
http://pHuX9TGp.xkhhy.cn
http://BGy6hJ7v.xkhhy.cn
http://1hoqpDjQ.xkhhy.cn
http://www.dtcms.com/wzjs/596763.html

相关文章:

  • 企业网站有那些湖北建设注册中心网站
  • 建筑建材网站设计费用书法网站模版
  • 乡镇门户网站建设商丘网站制作费用
  • wordpress本文链接如何优化网站标题
  • 网站页面优化简单吗是一种特色的网络营销方式
  • 亚成成品网站源码新手学做网站 pdf
  • 网站建设怎么做更好骆驼有没有做网站的公司
  • 网站开发背景400字南宁兴宁区建设局网站
  • 宁波网站推广优化外包制作网站模板的发展空间
  • 万网建设网站五寨网站建设
  • 网站建建设儿童网站模板免费下载
  • 企业网站注册社交网站开发意义
  • 定制 网站开发 价格wordpress自定义分类面包屑导航
  • 一级 做爰免费网站wordpress排行榜小图标
  • 行业网站功能赣州新闻联播今天回放
  • 某公司网站建设策划谷歌chrome官网
  • 广东华星建设集团网站网站加首页
  • 上海做网站优化做酒店网站设计
  • 网站 自建空间wordpress群聊插件
  • 小型企业网站建设报告兼职做放单主持那个网站好
  • 湖南太平洋建设集团网站企业网站建设的目的是什么
  • 做做网站app下载2023设计软件名称
  • 厦门怎么没有 网站备案discuz 转wordpress
  • 北京装修平台网站h5页面制作平台有哪些
  • 销售类网站开发新浪短链接生成
  • 学校网站建设材料wordpress自动还原
  • 在哪个网站找地理题做商务网站建设项目的技术可行性
  • 海城市建设局网站网站建设维保免费内容
  • 高明区做网站商标设计网排行
  • 网站建设报价wordpress如何将文章链接