多數據源:
1、數據源配置類 DB***Config.java(幾個數據源寫幾個此類)
2、數據源對應數據庫連接pom
3、啟動類加注解
//關閉springBoot關於mybatis的一些自動注入(多數據源),DataSourceTransactionManagerAutoConfiguration.class, MybatisAutoConfiguration.class防止報錯NoUniqueBeanDefinitionException
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class,DataSourceTransactionManagerAutoConfiguration.class})
//@MapperScan(basePackages ="com.example.demo.dao")//mapper映射接口所在包路徑(單數據源用到)
4、數據庫地址賬號 配置
注意事項:
spring boot應用,通常我們在進行數據管理時,只操作一個數據源的表,需要開啟事務管理,只需要在服務啟動類增加@EnableTransactionManagement注解,在需要事務控制的方法增加@Transactional注解即可。
數據源配置類:
@ConfigurationProperties("spring.datasource.wkAutoNotice")
此注解不支持駝峰命名法和下划線,修改為全部小寫
多數據源,寫聲明式事務注解時,需要加value屬性 如:@Transactional(value = "dbwkautonoticeTransactionManager")
@Primary//在配置兩個數據源的時候,在其中一個數據源加上注解@Primary即可,多個transactionManager @Configuration @MapperScan(basePackages = "com.example.demo.dao.daobase",sqlSessionFactoryRef = "wkAutoNoticeSqlSessionFactory") public class DBWkguideAutoNoticeConfig { @Primary @Bean(name = "wkAutoNoticeDataSource") @ConfigurationProperties("spring.datasource.wkautonotice")//配置中jdbcUrl、driverClassName、username、password等配置前綴 public DataSource masterDataSource(){ return DataSourceBuilder.create().build(); } @Bean(name = "wkAutoNoticeSqlSessionFactory") public SqlSessionFactory sqlSessionFactory(@Qualifier("wkAutoNoticeDataSource") DataSource dataSource) throws Exception { SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); sessionFactoryBean.setDataSource(dataSource); sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() .getResources("classpath:mapper/*.xml"));//mapper.xml文件路徑。 return sessionFactoryBean.getObject(); } @Bean//方法名就是事務value如:@Transactional(value = "dbwkautonoticeTransactionManager") public PlatformTransactionManager dbwkautonoticeTransactionManager(@Qualifier("wkAutoNoticeDataSource") DataSource prodDataSource) { return new DataSourceTransactionManager(prodDataSource); } }
MySQL數據源配置類:
@Configuration @MapperScan(basePackages = "com.example.demo.dao.daoprintorder",sqlSessionFactoryRef = "printorderSqlSessionFactory") public class DBMySqlPrintorder { @Primary @Bean(name = "printorderDataSource") @ConfigurationProperties("spring.datasource.printorder")//配置中jdbcUrl、driverClassName、username、password等配置前綴 public DataSource masterDataSource(){ return DataSourceBuilder.create().build(); } @Bean(name = "printorderSqlSessionFactory") public SqlSessionFactory sqlSessionFactory(@Qualifier("printorderDataSource") DataSource dataSource) throws Exception { SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); sessionFactoryBean.setDataSource(dataSource); sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver() .getResources("classpath:mapper/printorder/*.xml"));//mapper.xml文件路徑。 return sessionFactoryBean.getObject(); } @Bean//方法名就是事務value如:@Transactional(value = "printorderTransactionManager") public PlatformTransactionManager printorderTransactionManager(@Qualifier("printorderDataSource") DataSource prodDataSource) { return new DataSourceTransactionManager(prodDataSource); } }
注意:上邊不同數據庫對應mapper.xml 路徑不一樣
數據庫配置:
spring:
datasource: wkautonotice: ConnectionTestQuery: SELECT 1 jdbcUrl: jdbc:sqlserver://qn.yu****ji.com:30005;databasename=W*****st driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver username: ***** password: **** # sql-script-encoding: utf-8 printorder: driver-class-name: com.mysql.cj.jdbc.Driver jdbcUrl: jdbc:mysql://rm-bp17a******o.mysql.rds.aliyuncs.com:3306/********* username: **** password: ****
# pageHelper 分頁插件配置
pagehelper:
reasonable: false
supportMethodsArguments: true
params: count=countSql
#默認false,當為true時,自動檢驗適合的數據庫
auto-dialect: true
#pagehelper多數據源這個一定要加上,不然mysql和oracle分頁兩個只能用一個,另一個會報錯,加上后,兩中數據庫分頁都可以用了,自動識別方言
auto-runtime-dialect: true
啟動類加注解:
@SpringBootApplication @EnableTransactionManagement//開啟事務管理 @EnableCaching//開啟緩存功能redis需要配置 @EnableScheduling //開啟定時任務 //關閉springBoot關於mybatis的一些自動注入(多數據源),DataSourceTransactionManagerAutoConfiguration.class, MybatisAutoConfiguration.class防止報錯NoUniqueBeanDefinitionException @EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class,DataSourceTransactionManagerAutoConfiguration.class}) //@MapperScan(basePackages ="com.example.demo.dao")//mapper映射接口所在包路徑(單數據源) public class DemoApplication {

