应项目的需求,要把项目改成多数据源,将两张表单独抽取出来,放入另一个数据库中,由于spring cloud 架构不熟悉,也是花了点时间才做好。
1、禁用srping boot自动配置的单数据源,
启动类上加上注解@SpringBootApplication(exclude= DataSourceAutoConfiguration.class)
@SpringBootApplication(exclude= DataSourceAutoConfiguration.class)
@EnableDiscoveryClient
@EnableFeignClients
public 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”)这个就是新配置的数据源
@Repository
public 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,这是本人参考的网上例子