今天看下SpringBoot配置多个数据源并使用JdbcTemplate来操作数据库,我们直接看操作步骤:
一、第一步肯定是先去启动类去除自动注入的配置:
- DataSourceAutoConfiguration
- DataSourceTransactionManagerAutoConfiguration
- JdbcTemplateAutoConfiguration
exclude= { DataSourceAutoConfiguration.class, (DataSourceTransactionManagerAutoConfiguration.class, JdbcTemplateAutoConfiguration.class})
二、配置属性
在application.properties配置文件中要配置好多个数据源,给它们分别起不同的前缀:
####################多数据源配置######################数据源axh.datasource.url=jdbc:mysql://127.0.0.1:3306/xinghua?useSSL=false&characterEncoding=utf-8&allowPublicKeyRetrieval=truexh.datasource.username=rootxh.datasource.password=root#数据源bcjk.datasource.url=jdbc:mysql://127.0.0.1:3306/cangjingkong?useSSL=false&characterEncoding=utf-8&allowPublicKeyRetrieval=truecjk.datasource.username=rootcjk.datasource.password=root
三、手动配置数据源
我们要建立一个@Configuration修饰的类来分别配置多个数据源,注意必须要用@Primary将其中一个数据源配置成主数据源:
packagecom.xing.studyboot.database.config; importjavax.annotation.Resource; importjavax.sql.DataSource; importorg.springframework.boot.autoconfigure.jdbc.DataSourceProperties; importorg.springframework.boot.context.properties.ConfigurationProperties; importorg.springframework.context.annotation.Bean; importorg.springframework.context.annotation.Configuration; importorg.springframework.context.annotation.Primary; importorg.springframework.jdbc.datasource.DataSourceTransactionManager; importorg.springframework.transaction.PlatformTransactionManager; publicclassDataSourceOtherConfig { /*** 1.通过以xh.datasource开头的属性配置来创建一个DataSourceProperties* @return*/"xh.datasource") (publicDataSourcePropertiesaDataSourceProperties() { returnnewDataSourceProperties(); } /*** 2.用上面的DataSourceProperties构建一个数据源,@Primary生命成这个为主数据源* @return*/name="xhDS") (publicDataSourceaDataSource() { DataSourcePropertiesdataSourceProperties=aDataSourceProperties(); System.out.println("数据源xh datasource: {}"+dataSourceProperties.getUrl()); returndataSourceProperties.initializeDataSourceBuilder().build(); } /*** 实例化一个事务* @param dataSource* @return*/publicPlatformTransactionManagerxhTxManager(DataSourcedataSource) { returnnewDataSourceTransactionManager(dataSource); } "cjk.datasource") (publicDataSourcePropertiesbDataSourceProperties() { returnnewDataSourceProperties(); } name="cjkDS") (publicDataSourcebDataSource() { DataSourcePropertiesdataSourceProperties=bDataSourceProperties(); System.out.println("数据源cjk datasource: {}"+dataSourceProperties.getUrl()); returndataSourceProperties.initializeDataSourceBuilder().build(); } publicPlatformTransactionManagercjkTxManager(DataSourcedataSource) { returnnewDataSourceTransactionManager(dataSource); } }
四、配置多个JDBCTemplate:
packagecom.xing.studyboot.database.config; importjavax.sql.DataSource; importorg.springframework.beans.factory.annotation.Qualifier; importorg.springframework.context.annotation.Bean; importorg.springframework.context.annotation.Configuration; importorg.springframework.jdbc.core.JdbcTemplate; publicclassMyJdbcTemplate { name="xhJdbcTemplate") (publicJdbcTemplatexhJdbcTemplate( ("xhDS") DataSourcedataSource) { returnnewJdbcTemplate(dataSource); } name="cjkJdbcTemplate") (publicJdbcTemplatecjkJdbcTemplate( ("cjkDS") DataSourcedataSource) { returnnewJdbcTemplate(dataSource); } }
五、在Controller中分别引入并使用:
value="xhJdbcTemplate") (privateJdbcTemplatexhJdbcTemplate; value="cjkJdbcTemplate") (privateJdbcTemplatecjkJdbcTemplate; /*** 保存数据* @return*/"/jdbc") (publicStringjdbcSome() { xhJdbcTemplate.update("insert into data_info(id,name,age) values(?, ?, ?)", 101, "x", 18); cjkJdbcTemplate.update("insert into data_info(id,name,age) values(?, ?, ?)", 100, "x", 18); return"ok"; }
六、访问后看看结果
http://127.0.0.1:8888/studySpringBoot/h2/jdbc
看看xh库:
奥里给!完美!
总结:
多数据源的配置及使用
END