赞
踩
主要根据项目需要自行搭建简易双数据源框架,以便自行学习实践相关离线开发,话不多说直接开干
springboot框架代码结构(搭建项目略);
oracle数据库(建库建表过程略);
mysql数据库(建库建表过程略);
vue前端(element Admin demo项目直接用即可,前端部分不做记录与介绍);
<!-- ↑↑↑↑↑↑↑↑↑↑↑... 依赖省略 ...↑↑↑↑↑↑↑↑↑↑↑ --> <!-- ↓↓↓↓↓↓↓↓↓↓ mysql 依赖 ↓↓↓↓↓↓↓↓↓↓--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- ↑↑↑↑↑↑↑↑↑↑↑ mysql 依赖 ↑↑↑↑↑↑↑↑↑↑↑--> <!--oracle--> <dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc6</artifactId> <version>11.2.0.4.0</version> </dependency> <!-- ↓↓↓↓↓↓↓↓↓↓... 依赖省略 ...↓↓↓↓↓↓↓↓↓↓ -->
两个文件分别为:SysDataSourceConfig.java 、YbmsDataSourceConfig.java
package com.jmy.datasource; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.SqlSessionTemplate; import org.mybatis.spring.annotation.MapperScan; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.jdbc.DataSourceBuilder; 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; /** * @ProjectName: demo-vue-backend * @Package: com.jmy.datasource * @ClassName: SysDataSourceConfig * @Author: sparkle * @Description: 系统默认数mysql据源配置文件 * @Date: 2022/12/15 15:06 * @Version: 1.0.0 */ @Configuration @MapperScan(basePackages = "com.jmy.mysql.*.*.mapper", sqlSessionTemplateRef = "sysSqlSessionTemplate") public class SysDataSourceConfig { @Bean @ConfigurationProperties(prefix = "spring.datasource.sysdb") @Primary public DataSource sysDataSource() { return DataSourceBuilder.create().build(); } @Bean @Primary public SqlSessionFactory sysSqlSessionFactory(@Qualifier("sysDataSource") DataSource dataSource) throws Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(dataSource); bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapping/mysql/*/*Mapper.xml")); return bean.getObject(); } @Bean @Primary public DataSourceTransactionManager sysTransactionManager(@Qualifier("sysDataSource") DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } @Bean @Primary public SqlSessionTemplate sysSqlSessionTemplate(@Qualifier("sysSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception { return new SqlSessionTemplate(sqlSessionFactory); } }
package com.jmy.datasource; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.SqlSessionTemplate; import org.mybatis.spring.annotation.MapperScan; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.jdbc.DataSourceBuilder; 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; /** * @ProjectName: demo-vue-backend * @Package: com.jmy.datasource * @ClassName: YbmsDataSourceConfig * @Author: sparkle * @Description: 业务数据源Oracle配置文件 * @Date: 2022/12/15 15:06 * @Version: 1.0.0 */ @Configuration @MapperScan(basePackages = "com.jmy.oracle.*.*.mapper", sqlSessionTemplateRef = "ybmsSqlSessionTemplate") public class YbmsDataSourceConfig { @Bean @ConfigurationProperties(prefix = "spring.datasource.ybmsdb") public DataSource ybmsDataSource() { return DataSourceBuilder.create().build(); } @Bean public SqlSessionFactory ybmsSqlSessionFactory(@Qualifier("ybmsDataSource") DataSource dataSource) throws Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(dataSource); bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapping/oracle/*/*Mapper.xml")); return bean.getObject(); } @Bean public DataSourceTransactionManager ybmsTransactionManager(@Qualifier("ybmsDataSource") DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } @Bean public SqlSessionTemplate ybmsSqlSessionTemplate(@Qualifier("ybmsSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception { return new SqlSessionTemplate(sqlSessionFactory); } }
一般系统添加如上两个配置文件后再配置好数据库配置即可,项目其他部分一般无需调整,若项目较为复杂根据实际情况自行调整即可,其中需要修改的点分别为:
1.basePackages 指定基础包位置
2.sqlSessionTemplateRef 指定需要访问的sql模板
3.prefix 指定数据源配置信息
4.getResources 指定扫描获取数据源sql文件位置
5.若项目启动类中已添加扫描sql配置文件的位置,注释掉即可根据项目实际运行情况自行调整,案例如图所示:
由于Oracle与mysql代码部分基本一样,因此只列举mysql代码部分,Oracle代码部分略过(dao层引用数据源时无需指定数据源)
package com.jmy.mysql.demo.announce.query; import lombok.Data; /** * @Description: * @company: jmy Software Co. * @author: fengwen * @date: 2021/9/29 16:20 */ @Data public class AnnounceQuery { private Integer imortance; private String title; private String type; private String sort; }
package com.jmy.mysql.demo.announce.controller; import com.jmy.common.JSON; import com.jmy.mysql.demo.announce.entity.Announce; import com.jmy.mysql.demo.announce.query.AnnounceQuery; import com.jmy.mysql.demo.announce.service.AnnounceService; import com.jmy.oracle.xng.ybms.dto.YbmsmxDto; import com.jmy.oracle.xng.ybms.entity.Ybmsmx; import com.jmy.oracle.xng.ybms.service.YbmsmxService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.List; /** * @Description: 信息发布功能模块 * @company: jmy Software Co. * @author: sparkle * @date: 2021/9/29 15:58 */ @Slf4j @CrossOrigin @RestController @RequestMapping("/announce") public class AnnounceController { @Autowired private AnnounceService announceService ; @Autowired private YbmsmxService ybmsmxService ; @RequestMapping("/list") public void getList(AnnounceQuery announceQuery){ String jsonStr = JSON.toJSONSring(announceQuery); log.info("============announceQuery={}", jsonStr); int count = announceService.getCount(announceQuery); List<Announce> list = announceService.getList(announceQuery); System.out.println("mysql数据库访问:"+list.size()); log.info("list============list={}", list); // 为了便于测试可以再次出调用访问Oracle数据源 // List<Ybmsmx> list2 = ybmsmxService.getList(new YbmsmxDto()); // System.out.println("oracle数据库访问:"+list2.size()); } }
package com.jmy.mysql.demo.announce.service; import com.jmy.mysql.demo.announce.entity.Announce; import com.jmy.mysql.demo.announce.query.AnnounceQuery; import java.util.List; /** * @ProjectName: demo-vue-backend * @Package: com.jmy.mysql.announce.demo.service * @ClassName: AnnouceService * @Author: sparkle * @Description: demo接口 * @Date: 2022/12/15 16:22 * @Version: 1.0.0 */ public interface AnnounceService { List<Announce> getList(AnnounceQuery announceQuery); int getCount(AnnounceQuery announceQuery); }
package com.jmy.mysql.demo.announce.service.impl; import com.jmy.mysql.demo.announce.entity.Announce; import com.jmy.mysql.demo.announce.mapper.AnnounceMapper; import com.jmy.mysql.demo.announce.query.AnnounceQuery; import com.jmy.mysql.demo.announce.service.AnnounceService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; /** * @ProjectName: demo-vue-backend * @ClassName: AnnounceServiceImpl * @Author: sparkle * @Description: 业务实现类 * @Date: 2022/12/15 16:28 * @Version: 1.0.0 */ @Service public class AnnounceServiceImpl implements AnnounceService { @Autowired private AnnounceMapper announceMapper ; @Override public List<Announce> getList(AnnounceQuery announceQuery) { return announceMapper.getList(announceQuery); } @Override public int getCount(AnnounceQuery announceQuery) { System.out.println("aaaabbbb"+announceQuery); return announceMapper.getCount(announceQuery); } }
package com.jmy.mysql.demo.announce.mapper; import com.jmy.mysql.demo.announce.query.AnnounceQuery; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; import java.util.List; /** * @Description: * @company: jmy Software Co. * @author: sparkle * @date: 2021/9/29 17:30 */ @Repository public interface AnnounceMapper { /** * @param announceQuery 参数 * @return 返回 */ int getCount(AnnounceQuery announceQuery); List<Announce> getList(AnnounceQuery announceQuery); }
<?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.jmy.mysql.demo.announce.mapper.AnnounceMapper">
<select id="getCount" parameterType="com.jmy.mysql.demo.announce.query.AnnounceQuery" resultType="java.lang.Integer">
select count(1) from t_announce
</select>
<select id="getList" parameterType="com.jmy.mysql.demo.announce.query.AnnounceQuery" resultType="com.jmy.mysql.demo.announce.entity.Announce">
select * from t_announce limit #{startPage}, #{limit}
</select>
</mapper>
由于数据源不同因此Oracle与mysql的配置文件必须按目录分开,因为在配置类中已经指定了需要访问的数据源配置,如下图所示:
spring:
datasource:
# 系统默认的mysql数据源,数据库版本:5.7.20, for Win64 (x86_64)
sysdb:
jdbc-url: ${MYSQL_URL:jdbc:mysql://localhost:3306/vue_db?characterEncoding=utf8&useUnicode=true&useSSL=false&serverTimezone=GMT%2B8}
driver-class-name: com.mysql.cj.jdbc.Driver
username: testmsk
password: 123456
# 业务系统oracle数据库,数据库版本:TNSLSNR for 64-bit Windows: Version 11.2.0.1.0 - Production
ybmsdb:
jdbc-url: jdbc:oracle:thin:@localhost:1521/orcl
driver-class-name: oracle.jdbc.driver.OracleDriver
username: testork
password: 123123
至此多数据源项目配置已完成,启动运行即可,以上操作均已验证可正常运行,希望给有需要的朋友有所帮助,感觉不错可以点个赞!!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。