博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于注解实现SpringBoot多数据源配置
阅读量:6425 次
发布时间:2019-06-23

本文共 5797 字,大约阅读时间需要 19 分钟。

1.功能介绍

在实际的开发中,同一个项目中使用多个数据源是很常见的场景。最近在学习的过程中使用注解的方式实现了一个Springboot项目多数据源的功能。具体实现方式如下。

2.在application.properties中添加多数据源配置

添加多个数据源和mapper文件路径配置,此配置用于基于java的配置数据源中使用。

#数据库配置spring.datasource.demo.user.url=jdbc:mysql://xxx.xx.xx.xx:3306/demo-userspring.datasource.demo.user.username=xxxxspring.datasource.demo.user.password=xxxxspring.datasource.demo.user.driver-class-name=com.mysql.jdbc.Driverspring.datasource.demo.server.url=jdbc:mysql://xxx.xx.xx.xx:3306/springbootdemospring.datasource.demo.server.username=xxxxspring.datasource.demo.server.password=xxxxspring.datasource.demo.server.driver-class-name=com.mysql.jdbc.Driver#mapper文件的路径mybatis.demo.server.mapper-location=classpath*:mapper/demo-server/*.xmlmybatis.demo.user.mapper-location=classpath*:mapper/demo-user/*.xml

3.基于java的方式实现数据库配置

配置类图如下:

929184-20180624171236014-1309149716.png

其中DemoUserDbConfig类源代码如下:

其中Configuration注解表识此类为Spring的配置类。
MapperScan注解中的basePackages、annotationClass、sqlSessionTemplateRef用于配置此数据库链接扫描com.example包中所有注解为DemoUserMapper的接口。

@Configuration@MapperScan(basePackages = {"com.example"},annotationClass = DemoUserMapper.class,       sqlSessionTemplateRef = "demoUserTemplate")public class DemoUserDbConfig extends AbstractDbConfig {    @Value("${spring.datasource.demo.user.url}")    private String url;    @Value("${spring.datasource.demo.user.username}")    private String userName;    @Value("${spring.datasource.demo.user.password}")    private String password;    @Value("${spring.datasource.demo.user.driver-class-name}")    private String driveClassName;    @Value(value = "${mybatis.demo.user.mapper-location}")    private String mapperLocation;    @Bean(name = "demoUser")    public DataSource secondaryDataSource() {        return dataSourceFactory(driveClassName, url, userName, password);    }    @Bean(name = "demoUserTemplate")    public SqlSessionTemplate demoUserSqlTemplate() throws Exception {        return new SqlSessionTemplate((sqlSessionFactory(secondaryDataSource(), mapperLocation)));    }    @Bean    @Qualifier("demoUserTransaction")    public PlatformTransactionManager demoUserTransaction() {        return new DataSourceTransactionManager(secondaryDataSource());    }}

其中AbstractDatasource设置了通用的方法,源代码如下:

public abstract class AbstractDbConfig {    protected SqlSessionFactory sqlSessionFactory(DataSource dataSource, String mapperLocation) throws Exception {        SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();        factoryBean.setDataSource(dataSource);        ResourcePatternResolver resourceResolver = new PathMatchingResourcePatternResolver();        Resource[] resource= resourceResolver.getResources(mapperLocation);        factoryBean.setMapperLocations(resource);        return factoryBean.getObject();    }    protected DataSource dataSourceFactory(String driveClassName, String url, String userName, String password){        DruidDataSource datasource = new DruidDataSource();        datasource.setDriverClassName(driveClassName);        datasource.setUrl(url);        datasource.setUsername(userName);        datasource.setPassword(password);        datasource.setMaxActive(20);        datasource.setInitialSize(20);        return datasource;    }}

使用相同的方法定义其他数据源。

4.定义接口和mapper文件

分别定义连接demo-user数据库和springbootdemo数据库的mapper文件。连接demo-user数据库的接口如下,使用DemoUserMapper注解表识。

@DemoUserMapperpublic interface UserDao {    /**     * 返回所有的dictionary列表     *     * @return 所有的dictionary列表     */    List
list();}

mapper文件如下:

定义读取springbootdemo数据库的接口,代码如下。使用DemoServerMapper注解表识

@DemoServerMapperpublic interface DictionaryDao {    /**     * 返回所有的dictionary列表     *     * @return 所有的dictionary列表     */    List
list(); /** * 查询此key下的所有子节点 * * @param key 数据字典key * @return 返回key所有的子节点列表 */ List
listChildrenByKey(String key); /** * 插入数据到数据库 * * @param dictionary */ void insert(Dictionary dictionary);}

mapper文件代码如下:

delete from dictionary where id = #{id}
INSERT INTO `dictionary`(`dict_key`,`dict_value`,`parent_id`,`description`) VALUES(#{dictKey}, #{dictValue}, #{parentId}, #{description})

5.定义注解

定义DemoUserMapper和DemoServerMapper注解,分别作为使用demo-user和springbootdemo数据库的表识。

定义代码如下:

@Documented@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.TYPE)@Component@Mapperpublic @interface DemoServerMapper {    /**     * The value may indicate a suggestion for a logical component name,     * to be turned into a Spring bean in case of an autodetected component.     * @return the suggested component name, if any (or empty String otherwise)     */    String value() default "";}@Documented@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.TYPE)@Component@Mapperpublic @interface DemoUserMapper {    /**     * The value may indicate a suggestion for a logical component name,     * to be turned into a Spring bean in case of an autodetected component.     * @return the suggested component name, if any (or empty String otherwise)     */    String value() default "";}

6.使用单元测试验证配置

编写单元测试代码如下:

@RunWith(SpringRunner.class)@SpringBootTestpublic class MultiDatasourceApplicationTests {    @Autowired    private DictionaryDao dictionaryDao;    @Autowired    private UserDao userDao;    @Test    public void contextLoads() {        System.out.println(dictionaryDao.list());        System.out.println("===================");        System.out.println(userDao.list());    }}

转载于:https://www.cnblogs.com/vitasyuan/p/9221058.html

你可能感兴趣的文章
jstatd--收集远程主机信息
查看>>
objective-c ——代码块
查看>>
Lync Server 部署之后端服务器部署
查看>>
Server 2008r2 安装额外域控之RODC
查看>>
SecureCRT for Ubuntu12.04 使用方法
查看>>
9.MyBatis 关联映射(多对多)
查看>>
DDOS
查看>>
高性能大并发server的基础
查看>>
我的友情链接
查看>>
Weblogic8.1 设置boot.properties文件
查看>>
2012年3月下旬我国网络不良垃圾邮件分析报告
查看>>
电子商务网站-数据库设计
查看>>
3.分类管理
查看>>
老男孩教育-linux面试题-笔试题-1
查看>>
PCMS V9多栏目多推荐位调用数据列表方法
查看>>
exchange2010平稳运行大半年后的一次故障
查看>>
我的友情链接
查看>>
03(maven+SSH)网上商城项目实战之数据库设计(PMD)
查看>>
HP D6000 盘柜配置
查看>>
常用的文件后缀
查看>>