有时候项目需要访问多个数据库,就需要搭建多源数据库,这里先搭建静态的,就是一个数据库,一个dao层,一个DataSource 一个sqlsessionfactory
1、主要的架构呈现下面这样,一个数据库一个dao层,同时一个mapper 另外 我单独写出 com.example.exam1包下面的东西
2、application.properties
3、DataSource(三个DataSource)
@Configuration
public class DataSourceConf {
@Autowired
Environment env;
@Bean(name = "ds1")
public DataSource dataSource1() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setUrl(env.getProperty("spring.write.datasource.url"));
dataSource.setUsername(env.getProperty("spring.write.datasource.username"));
dataSource.setPassword(env.getProperty("spring.write.datasource.password"));
dataSource.setDriverClassName(env.getProperty("spring.write.datasource.driverClassName"));
return dataSource;
}
@Bean(name = "ds2")
public DataSource dataSource2() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setUrl(env.getProperty("spring.read.one.url"));
dataSource.setUsername(env.getProperty("spring.read.one.username"));
dataSource.setPassword(env.getProperty("spring.read.one.password"));
dataSource.setDriverClassName(env.getProperty("spring.read.one.driverClassName"));
return dataSource;
}
@Bean(name = "ds3")
public DataSource dataSource3() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setUrl(env.getProperty("spring.read.two.url"));
dataSource.setUsername(env.getProperty("spring.read.two.username"));
dataSource.setPassword(env.getProperty("spring.read.two.password"));
dataSource.setDriverClassName(env.getProperty("spring.read.two.driverClassName"));
return dataSource;
}
}
4、sqlsessionfaxctory 这是其中一个主数据源的sqlsessionfactory 其他的这样配置
@Configuration
@MapperScan(basePackages="com.example.dao.mapper1",sqlSessionFactoryRef="sqlSessionFactory1")
public class MybatisDB1Conf {
@Qualifier("ds1")
@Autowired
DataSource dataSource;
@Bean(name = "sqlSessionFactory1")
@Primary
public SqlSessionFactory sqlSessionFactory1() throws Exception {
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
factoryBean.setDataSource(dataSource);
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
factoryBean.setMapperLocations(resolver.getResources("classpath:mapper/mapper1/*.xml"));
factoryBean.setTypeAliasesPackage("com.example.entity");
return factoryBean.getObject();
}
@Bean
public SqlSessionTemplate sqlSessionTemplate1() throws Exception {
SqlSessionTemplate template = new SqlSessionTemplate(sqlSessionFactory1()); // 使用上面配置的Factory
return template;
}
}
5、dao层(这是第一个数据库的写法,第二三个数据库也这样写)
@Mapper
public interface Dao1 {
List<entity> db1();
}
6、mapper.xml(也一样分开,对应各个dao层)
7、service层用一个,进行调用各个dao层,同时写逻辑层
8、
serviceImpl层加上注解
@Service
9、controller
写写调用service层之类的
10、Application 入口类
@SpringBootApplication(exclude = {
DataSourceAutoConfiguration.class
})
public class DataSourcesProjectApplication {
public static void main(String[] args) {
SpringApplication.run(DataSourcesProjectApplication.class, args);
}
}
版权声明:本文为mn_is_me原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。