配置数据库连接信息(application.properties)
下面的是我自己的数据库的配置信息(需修改成自己的数据库信息)
spring.datasource.a.name=amy-blog-datasource
master.datasource.a.driverClassName=com.mysql.cj.jdbc.Driver
master.datasource.a.url=jdbc:mysql://XXXXX:28780/springboot_demo?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false&serverTimezone=UTC
master.datasource.a.username=root
master.datasource.a.password=XXXXX
second.datasource.b.name=bmy-blog-datasource
second.datasource.b.driverClassName=com.mysql.cj.jdbc.Driver
second.datasource.b.url=jdbc:mysql://XXXXXX:3306/halodb?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false&serverTimezone=UTC
second.datasource.b.username=root
second.datasource.b.password=XXXXX
读取配置的这两个数据库注入Bean中
- a数据库配置到Bean容器中(需要修改自己的Dao路径和Mapper路径)
package com.site.blog.my.core.config;
import com.alibaba.druid.pool.DruidDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import javax.sql.DataSource;
@Configuration
@MapperScan(basePackages = MasterDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "masterSqlSessionFactory")
public class MasterDataSourceConfig {
// 精确到 master 目录,以便跟其他数据源隔离
//需要修改自己的a数据库对应Dao层路径
static final String PACKAGE = "com.site.blog.my.core.dao.master";
//需要修改自己的a数据库对应mapper层路径
static final String MAPPER_LOCATION = "classpath:mapper/master/*.xml";
//这里重点说一下,因为自己掉坑里了,我是mapper文件夹下有两个文件夹aa,bb,这里必须填到具体的文件夹,如mapper/aa或mapper/bb
@Value("${master.datasource.a.url}")
private String url;
@Value("${master.datasource.a.username}")
private String user;
@Value("${master.datasource.a.password}")
private String password;
@Value("${master.datasource.a.driverClassName}")
private String driverClass;
@Bean(name = "masterDataSource")
@Primary
public DataSource masterDataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driverClass);
dataSource.setUrl(url);
dataSource.setUsername(user);
dataSource.setPassword(password);
return dataSource;
}
@Bean(name = "masterTransactionManager")
@Primary
public DataSourceTransactionManager masterTransactionManager() {
return new DataSourceTransactionManager(masterDataSource());
}
@Bean(name = "masterSqlSessionFactory")
@Primary
public SqlSessionFactory masterSqlSessionFactory(@Qualifier("masterDataSource") DataSource masterDataSource)
throws Exception {
final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(masterDataSource);
sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
.getResources(MasterDataSourceConfig.MAPPER_LOCATION));
return sessionFactory.getObject();
}
}
- B数据库配置到Bean容器中(需要修改自己的Dao路径和Mapper路径)
package com.site.blog.my.core.config;
import com.alibaba.druid.pool.DruidDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import javax.sql.DataSource;
@Configuration
// 扫描 Mapper 接口并容器管理
@MapperScan(basePackages = SecondDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "secondSqlSessionFactory")
public class SecondDataSourceConfig {
// 精确到 cluster 目录,以便跟其他数据源隔离
//需要修改自己的a数据库对应Dao层路径
static final String PACKAGE = "com.site.blog.my.core.dao.second";
//需要修改自己的a数据库对应mapper层路径
static final String MAPPER_LOCATION = "classpath:mapper/second/*.xml";
@Value("${second.datasource.b.url}")
private String url;
@Value("${second.datasource.b.username}")
private String user;
@Value("${second.datasource.b.password}")
private String password;
@Value("${second.datasource.b.driverClassName}")
private String driverClass;
@Bean(name = "secondDataSource")
public DataSource clusterDataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driverClass);
dataSource.setUrl(url);
dataSource.setUsername(user);
dataSource.setPassword(password);
return dataSource;
}
@Bean(name = "secondTransactionManager")
public DataSourceTransactionManager clusterTransactionManager() {
return new DataSourceTransactionManager(clusterDataSource());
}
@Bean(name = "secondSqlSessionFactory")
public SqlSessionFactory clusterSqlSessionFactory(@Qualifier("secondDataSource") DataSource clusterDataSource)
throws Exception {
final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(clusterDataSource);
sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
.getResources(SecondDataSourceConfig.MAPPER_LOCATION));
return sessionFactory.getObject();
}
}
- 我需要时https协议增加一个接口,接口数据又在另一个数据库中,故此返回JSON数据
@Controller
public class IndexController {
@Resource
SecondData secondData;
@RequestMapping(value = "findTagCqw",method = RequestMethod.GET)
@ResponseBody
public String getTagInfo(){
final List<Object> tagInfo = secondData.findTagInfo();
return JSON.toJSONString(tagInfo);
}
}