多数据源接入

<p class="shortdesc">业务服务有不同数据源间的同步以及多数据源使用场景。</p> <section class="section" id="Multiple_data_sources__section_pg1_skg_bsb"><h2 class="doc-tairway">适用场景</h2> <ol class="ol" id="Multiple_data_sources__ol_jlc_tkg_bsb"> <li class="li"><strong class="ph b">异构数据库</strong><p class="p">不同类型的数据库进行数据同步。</p><img class="image" id="Multiple_data_sources__image_ayb_clg_bsb" src="https://obs-cn-shanghai.fincloud.pinganyun.com/pacloud/20220910180812-18e3b15d9d60.png"></li> <li class="li"><strong class="ph b">同构数据库</strong><p class="p">不同表结构 – 新老系统改造迁移过渡;单体式应用架构。</p><img class="image" id="Multiple_data_sources__image_wky_dlg_bsb" src="https://obs-cn-shanghai.fincloud.pinganyun.com/pacloud/20220910180812-12010cb09582.png"></li> </ol> </section> <section class="section" id="Multiple_data_sources__section_atw_glg_bsb"><h2 class="doc-tairway"><strong class="ph b">准备工作</strong></h2> <p class="p">完成开发环境搭建。</p> </section> <section class="section" id="Multiple_data_sources__section_hst_plg_bsb"><h2 class="doc-tairway"><strong class="ph b">接入指南</strong></h2> <ol class="ol" id="Multiple_data_sources__ol_sgm_tlg_bsb"> <li class="li"><strong class="ph b">pom.xml引入pafa-cloud-support-jdbc</strong><div class="p"> <pre class="pre codeblock" id="Multiple_data_sources__codeblock_ur1_5lg_bsb"><code><dependencyManagement> <dependencies> <dependency> <groupId>com.pingan.pafa.cloud</groupId> <artifactId>pafa-cloud-dependencies</artifactId> <version>{版本参考核心框架简介}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>com.pingan.pafa.cloud</groupId> <artifactId>pafa-cloud-service-starter</artifactId> </dependency> <dependency> <groupId>com.pingan.pafa.cloud</groupId> <artifactId>pafa-cloud-support-jdbc</artifactId> </dependency> <!-- 按照实际从下面选择合适的数据库驱动 --> <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>42.2.2</version> </dependency> <dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc6</artifactId> <version>11.2.0.4.0</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.11</version> </dependency> </dependencies></code></pre> </div></li> <li class="li"><strong class="ph b">启动类修改</strong><ol class="ol" type="a" id="Multiple_data_sources__ol_flp_wlg_bsb"> <li class="li">禁止加载DataSourceAutoConfiguration。</li> <li class="li"> Import MultiDataSourceRegister即可。</li> </ol><div class="p"> <pre class="pre codeblock" id="Multiple_data_sources__codeblock_ntk_zlg_bsb"><code>@SpringBootApplication(exclude = DataSourceAutoConfiguration.class) @Import(MultiDataSourceRegister.class) public class MultiDataSourceDemoApplication { public static void main(String[] args) { SpringApplication.run(MultiDataSourceDemoApplication.class, args); } } }</code></pre> </div></li> <li class="li"><strong class="ph b">配置说明</strong><p class="p">pafa.cloud.multi-datasource为多数据源的公共配置前缀。</p><p class="p">如下gz、sh分别对应不同的数据源名称。</p><p class="p">按照下面的配置写法,spring boot会默认加载hikariCP数据库连接池配置以及数据库连接、用户、密码、驱动类配置:</p><div class="p"> <pre class="pre codeblock" id="Multiple_data_sources__codeblock_znr_jmg_bsb"><code>pafa.cloud.multi-datasource.gz.max-wait=2000 pafa.cloud.multi-datasource.gz.max-active=50 pafa.cloud.multi-datasource.gz.test-on-borrow=true pafa.cloud.multi-datasource.gz.initial-size=10 pafa.cloud.multi-datasource.gz.idle-timeout=60000 pafa.cloud.multi-datasource.gz.connection-timeout=6000 pafa.cloud.multi-datasource.gz.auto-commit=false pafa.cloud.multi-datasource.gz.mybatis.auto_assemble.enabled=true pafa.cloud.multi-datasource.gz.mybatis.mapperLocations=classpath:mapper/gz/UserInfoMapper.xml pafa.cloud.multi-datasource.sh.url=jdbc:postgresql://1.1.1.1:5432/pafa_aaa pafa.cloud.multi-datasource.sh.username=**** pafa.cloud.multi-datasource.sh.password=**** pafa.cloud.multi-datasource.sh.max-wait=2000 pafa.cloud.multi-datasource.sh.max-active=50 pafa.cloud.multi-datasource.sh.test-on-borrow=true pafa.cloud.multi-datasource.sh.initial-size=10 pafa.cloud.multi-datasource.sh.idle-timeout=60000 pafa.cloud.multi-datasource.sh.connection-timeout=6000 pafa.cloud.multi-datasource.sh.auto-commit=false pafa.cloud.multi-datasource.sh.transaction.auto_assemble.enabled=true pafa.cloud.multi-datasource.sh.mybatis.auto_assemble.enabled=true pafa.cloud.multi-datasource.sh.mybatis.mapperLocations=classpath:mapper/sh/*.xml</code></pre> </div><table class="table" id="Multiple_data_sources__table_bht_pmg_bsb"><caption></caption><colgroup><col><col><col></colgroup><thead class="thead"> <tr class="row"> <th class="entry" id="Multiple_data_sources__table_bht_pmg_bsb__entry__1">配置项</th> <th class="entry" id="Multiple_data_sources__table_bht_pmg_bsb__entry__2">说明</th> <th class="entry" id="Multiple_data_sources__table_bht_pmg_bsb__entry__3">默认值</th> </tr> </thead><tbody class="tbody"> <tr class="row"> <td class="entry" headers="Multiple_data_sources__table_bht_pmg_bsb__entry__1 "> <p class="p">pafa.cloud.multi-datasource.{数据源名称}.transaction.auto_assemble.enabled</p> </td> <td class="entry" headers="Multiple_data_sources__table_bht_pmg_bsb__entry__2 "> <p class="p">是否开启事务,默认开启</p> </td> <td class="entry" headers="Multiple_data_sources__table_bht_pmg_bsb__entry__3 "> <p class="p">true</p> </td> </tr> <tr class="row"> <td class="entry" headers="Multiple_data_sources__table_bht_pmg_bsb__entry__1 "> <p class="p">pafa.cloud.multi-datasource.{数据源名称}.mybatis.auto_assemble.enabled</p> </td> <td class="entry" headers="Multiple_data_sources__table_bht_pmg_bsb__entry__2 "> <p class="p">是否开启框架加载mybaties,默认开启;业务如需定制mybaties,需设置为false</p> </td> <td class="entry" headers="Multiple_data_sources__table_bht_pmg_bsb__entry__3 "> <p class="p">true</p> </td> </tr> </tbody></table></li> <li class="li"><strong class="ph b">mybaties加载</strong><ol class="ol" type="a" id="Multiple_data_sources__ol_p23_smg_bsb"> <li class="li">每个数据源对应一个sqlSessionTemplateRef ,约定方式:数据源名称+_SSF。</li> <li class="li">若启用框架自动加载mybaties开发,需编写如下示例代码。<div class="p"> <pre class="pre codeblock" id="Multiple_data_sources__codeblock_bb4_5mg_bsb"><code>@Configuration @MapperScan(basePackages = "com.pingan.pafa.cloud.jdbc.datasource.mapper.gz", sqlSessionTemplateRef = "gz_SSF") public class GzMybatiesConfig { }</code></pre> </div></li> <li class="li">若定制mybaties开发,需编写如下示例代码。<div class="p"> <pre class="pre codeblock" id="Multiple_data_sources__codeblock_gvr_ymg_bsb"><code>@Configuration @MapperScan(basePackages = "com.pingan.pafa.cloud.jdbc.datasource.mapper.sh", sqlSessionTemplateRef = "sh_SSF") public class ShMybatisConfig { @Bean(name = "sh_SSF") public SqlSessionTemplate testSqlSessionTemplate() throws Exception { SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); sqlSessionFactoryBean.setDataSource(MultiDataSourceRegister.getMultiDataSources().get("sh")); try { String mapperLocations = "classpath:mapper/sh/*.xml"; sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(mapperLocations)); } catch (IOException e) { e.printStackTrace(); } return new SqlSessionTemplate(sqlSessionFactoryBean.getObject()); } }</code></pre> </div></li> </ol></li> <li class="li"><strong class="ph b">事务管理器规范</strong><p class="p">业务代码如需启用事务,事务管理器的书写约定为:数据源名称+_TM。</p><div class="p"> <pre class="pre codeblock" id="Multiple_data_sources__codeblock_vkz_1ng_bsb"><code>@Transactional(value = "sh_TM") public void save() { AccountInfo accountInfo = new AccountInfo(); accountInfo.setAccountName(UUID.randomUUID().toString()); accountInfo.setAccountPwd("pwd"); accountInfo.setAppKey(UUID.randomUUID().toString()); accountInfo.setAppSecret("appSecret"); accountInfo.setAccountType("00"); accountInfo.setStatus("00"); accountInfoMapper.insert(accountInfo); }</code></pre> </div></li> </ol> </section>
以上内容是否解决了您的问题?
请补全提交信息!
联系我们

电话咨询

400-151-8800

邮件咨询

fincloud@ocft.com

在线客服

工单支持

解决云产品相关技术问题