Spring Cloud项目中单数据源改为多数据源

来源:互联网 发布:蒙特卡洛随机数算法 编辑:程序博客网 时间:2024/05/21 15:50

应项目的需求,要把项目改成多数据源,将两张表单独抽取出来,放入另一个数据库中,由于spring cloud 架构不熟悉,也是花了点时间才做好。

1、禁用srping boot自动配置的单数据源,
启动类上加上注解@SpringBootApplication(exclude= DataSourceAutoConfiguration.class)

@SpringBootApplication(exclude= DataSourceAutoConfiguration.class)@EnableDiscoveryClient@EnableFeignClientspublic class UserServerApplication {    public static void main(String[] args) {        SpringApplication.run(UserServerApplication.class, args);    }}

2、修改配置文件,项目中用spring cloud config统一管理配置文件的
在datasource节点下再加一个新数据源配置,如下所示

datasource:  user-server:    url: jdbc:mysql://***?characterEncoding=utf-8&autoReconnect=true&f***    username: ***    password: ***    driver-class-name: com.mysql.jdbc.Driver    max-idle: 10    max-wait: 10000    min-idle: 5    initial-size: 5    validation-query: SELECT 1    test-on-borrow: false    test-while-idle: true    time-between-eviction-runs-millis: 18800  user-server-separate:    url: jdbc:mysql://***?characterEncoding=utf-8&autoReconnect=true****    username: ***    password: ***    driver-class-name: com.mysql.jdbc.Driver    max-idle: 10    max-wait: 10000    min-idle: 5    initial-size: 5    validation-query: SELECT 1    test-on-borrow: false    test-while-idle: true    time-between-eviction-runs-millis: 18800

3、分包  两个数据库对应两个实体类的包,xml文件也一样,分两个文件夹,如下图所示
这里写图片描述
domain 和 domain_separate 存放不同库的实体类
这里写图片描述
mybatis和separate存放不同库对应的xml文件

4、创建新的数据源
这里写图片描述
UcSeparateDataSourceConfig这是新配置的数据源,具体内容如下

@Configuration@MapperScan(basePackages = {"com.baojun.user_server.application.domain_separate"}, sqlSessionFactoryRef = "ucSeparateSqlSessionFactory")public class UcSeparateDataSourceConfig {    @Primary    @Bean(name = "ucSeparateDataSource")    @ConfigurationProperties(prefix = "datasource.user-server-separate")    public DataSource dataSource() {        return DataSourceBuilder.create().build();    }    @Primary    @Bean(name = "ucSeparateTransactionManager")    public DataSourceTransactionManager transactionManager(@Qualifier("ucSeparateDataSource") DataSource dataSource) {        return new DataSourceTransactionManager(dataSource);    }    @Primary    @Bean(name = "ucSeparateSqlSessionFactory")    public SqlSessionFactory sqlSessionFactory(@Qualifier("ucSeparateDataSource") DataSource dataSource) throws Exception {        SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();        factoryBean.setDataSource(dataSource);        factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:separate/*.xml"));        return factoryBean.getObject();    }    @Bean(name = "ucSeparateSqlSessionTemplate")    @Primary    public SqlSessionTemplate sqlSessionTemplate(@Qualifier("ucSeparateSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {        return new SqlSessionTemplate(sqlSessionFactory);    }

这里要注意包路径和xml文件的路径,
@ConfigurationProperties(prefix = “datasource.user-server-separate”)前缀与配置文件中一致

5、在需要更改数据源的地方,加入对应的注解
@Resource(name=”ucSeparateSqlSessionTemplate”)这个就是新配置的数据源

@Repositorypublic class CarDaoImpl extends BaseDaoImpl<Car> implements CarDao {    public CarDaoImpl() {    super(Car.class);    }    @Resource(name="ucSeparateSqlSessionTemplate")    public void sqlSessionTemplate(SqlSessionTemplate sessionTemplate) {    setSqlSessionTemplate(sessionTemplate);    }}

http://blog.csdn.net/neosmith/article/details/61202084,这是本人参考的网上例子

原创粉丝点击