最近一段时间在使用spring boot开发项目,其中有一个项目用到了多数据源的配置,网上的资料还是不太多,走了好多才找到一个合适的,把自己写的分享一下,做个笔记,以后也许有用,第一次写博客,不好勿喷!!
首先介绍下我的业务场景,此项目用到了两种数据库,一个是mysql,另一个是sqlserver,
首先第一步需要在application.yml中将多数据源的配置信息进行配置,
mysql数据源:
spring: datasource: driverClassName: com.mysql.jdbc.Driver url: jdbc:mysql://192.168.28.230:3306/****?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true username: **** password: **** sqlserver数据源配置
custom: datasource: names: ds1 ds1: driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver url: jdbc:sqlserver://ip:1433;databaseName=数据库名称 username: **** password: **** 第二步编写数据源的配置和加载类:SQLserver数据源
@Configuration@MapperScan(basePackages = RdsDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "rdsSessionFactory")public class RdsDataSourceConfig { static final String PACKAGE = "com.jyall.ehr.kaoqin"; //本项目中用的是mybatis,此路径为扫描的mapper的包结构 @Value("${custom.datasource.ds1.url}") //第一步中配置文件中的数据库配置信息 private String dbUrl; @Value("${custom.datasource.ds1.username}")//同理为配置文件中信息 private String dbUser; @Value("${custom.datasource.ds1.password}")//同理为配置文件信息 private String dbPassword; @Bean(name = "rdsDatasource") public DataSource rdsDataSource() { DataSource dataSource = new DataSource(); dataSource.setDriverClassName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); dataSource.setUrl(dbUrl); dataSource.setUsername(dbUser); dataSource.setPassword(dbPassword); return dataSource; } @Bean(name = "rdsTransactionManager") public DataSourceTransactionManager rdsTransactionManager(@Qualifier("rdsDatasource") DataSource adsDataSource) { return new DataSourceTransactionManager(rdsDataSource()); } @Bean(name = "rdsSessionFactory") public SqlSessionFactory adsSqlSessionFactory(@Qualifier("rdsDatasource") DataSource adsDataSource) throws Exception { final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); sessionFactory.setDataSource(adsDataSource); return sessionFactory.getObject(); }} mysql数据源
@Configuration@MapperScan(basePackages = AdsDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "adsSqlSessionFactory")public class AdsDataSourceConfig { static final String PACKAGE = "com.jyall.ehr.mapper"; //扫描的mapper包结构 @Value("${spring.datasource.url}") //配置文件中的配置 private String dbUrl; @Value("${spring.datasource.username}") //配置文件中的配置 private String dbUser; @Value("${spring.datasource.password}") //配置文件中的配置 private String dbPassword; @Bean(name = "adsDataSource") @Primary //此注解表示在默认的数据源配置,即在默认配置时用到的数据源配置 public DataSource adsDataSource() { DataSource dataSource = new DataSource(); dataSource.setDriverClassName("com.mysql.jdbc.Driver"); dataSource.setUrl(dbUrl); dataSource.setUsername(dbUser); dataSource.setPassword(dbPassword); return dataSource; } @Bean(name = "adsTransactionManager") @Primary public DataSourceTransactionManager adsTransactionManager(@Qualifier("adsDataSource") DataSource adsDataSource) { return new DataSourceTransactionManager(adsDataSource); } @Bean(name = "adsSqlSessionFactory") @Primary public SqlSessionFactory adsSqlSessionFactory(@Qualifier("adsDataSource") DataSource adsDataSource) throws Exception { final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); sessionFactory.setDataSource(adsDataSource); return sessionFactory.getObject(); }}
至此多数据源的配置都已经完成,其他配置跟但数据源的配置时一样的,不在赘述。。。
时间: 2024-10-22 12:01:22