一、环境信息
二、项目结构
三、代码整合
1、添加依赖
依赖在创建springboot工程时直接加入mybatis、mysql,无需手动引入
2、配置文件信息
#数据源1
spring.datasource.lydb.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.lydb.jdbc-url=jdbc:mysql://xxx.xxx.xxx.xxx:xxx/xxx?useUnicode=true&characterEncoding=utf8 spring.datasource.lydb.username=xxx spring.datasource.lydb.password=xxx #数据源2 spring.datasource.hdbg.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.hdbg.jdbc-url=jdbc:mysql://xxx.xxx.xxx.xxx:xxx/xxx?useUnicode=true&characterEncoding=utf8 spring.datasource.hdbg.username=xxx spring.datasource.hdbg.password=xxx
3、数据源配置类(有几个数据源,就有几个此类)
以数据源lydb为例
@Configuration @MapperScan(basePackages = "com.abc5w.hudong_report_platfrom_crawler.dao.lydb", sqlSessionTemplateRef = "lydbSqlSessionTemplate") public class LydbDBConfig { private static String MAPPER_PATH = "classpath:mapper/lydb/*.xml"; /** * 创建 DataSource * * @return */ @Bean("lydbDataSource") @ConfigurationProperties("spring.datasource.lydb") public DataSource lydbDataSource() { return DataSourceBuilder.create().build(); } /** * 创建 SQL会话工厂 * * @param dataSource * @return * @throws Exception */ @Bean("lydbSqlSessionFactory") public SqlSessionFactory lydbSqlSessionFactory(@Qualifier("lydbDataSource") DataSource dataSource) throws Exception { SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); sqlSessionFactoryBean.setDataSource(dataSource); sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(MAPPER_PATH)); return sqlSessionFactoryBean.getObject(); } /** * 创建 事务管理器 * * @param dataSource * @return */ @Bean("lydbTransactionManager") public DataSourceTransactionManager lydbTransactionManager(@Qualifier("lydbDataSource") DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } /** * 创建 SqlSession模板 * * @param sqlSessionFactory * @return */ @Bean("lydbSqlSessionTemplate") public SqlSessionTemplate lydbSqlSessionTemplate(@Qualifier("lydbSqlSessionFactory") SqlSessionFactory sqlSessionFactory) { return new SqlSessionTemplate(sqlSessionFactory); } }
另一个数据源和上述代码一样,修改相关名称即可
4、创建对应的dao路径,resources下创建对应的mapper路径,不同路径来区分各个数据源
代码如下即可:
public interface CninfoFilingMapper { Announcement getAnnouncementById(String announcementId); void insert(Map<String, Object> param); List<String> getStockCodeList(); void update(Map<String, Object> param); }
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.abc5w.hudong_report_platfrom_crawler.dao.hdbg.CninfoFilingMapper">
<insert id="insert" parameterType="map">
INSERT INTO t_filing(noticedate, originContent, stockcode, title, pdfUrl, sourceUrl, enddate, year, qType, contentType, canceled, announcementId)
VALUES (#{noticedate}, #{originContent}, #{stockcode}, #{title}, #{pdfUrl}, #{sourceUrl}, #{enddate}, #{year}, #{qType}, #{contentType}, #{canceled}, #{announcementId})
</insert>
</mapper>
注意mapper.xml中namespace的路径信息
5、controller、service等类和正常情况一样,没有需要特别注意的地方,在此忽略
6、启动类添加相关注解(加了定时任务,没有则忽略)
@SpringBootApplication @EnableScheduling public class HudongReportPlatfromCrawlerApplication { public static void main(String[] args) { SpringApplication.run(HudongReportPlatfromCrawlerApplication.class, args); } }
已上就已经整合好多数据源了,主要注意的地方是2、3、4步,对应好路径、名称就ok了!
【注意事项】
在配置过程中出现了"jdbcUrl is required with driverClassName"的错误信息,此时应将配置文件中的"spring.datasource.primary.url"修改为"spring.datasource.primary.jdbc-url"