albedo开源框架配置多数据源
前言:
公司框架项目一直都没认真阅读过,最近项目需要连接oracle数据,所以尝试使用框架连接多数据库。
添加多数据源插件:
我们在项目的插件模块内添加多数据源插件:albedo-dynamic-datasource
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>albedo-plugins</artifactId>
<groupId>com.albedo.java</groupId>
<version>2.0.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>albedo-dynamic-datasource</artifactId>
<dependencies>
<!--dynamic datasource多数据源配置-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>${dynamic-datasource.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>${druid-spring-boot-starter.version}</version>
</dependency>
<!--oracle数据驱动-->
<dependency>
<groupId>com.oracle.ojdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>${oracle.ojdbc.version}</version>
</dependency>
<!--oracle数据库字符集-->
<dependency>
<groupId>com.oracle.ojdbc</groupId>
<artifactId>orai18n</artifactId>
<version>${oracle.ojdbc.version}</version>
</dependency>
<!-- 如下提供了几种链接sqlserver驱动的方式:yml配置信息参见:https://blog.csdn.net/aw4269/article/details/102267192-->
<!-- driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver-->
<!-- url: jdbc:sqlserver://localhost:1433;databaseName=weighbridge;autoReconnectForPools=true;encrypt=true;trustServerCertificate=true-->
<!-- username: root-->
<!-- password: XunShi@123-->
<!--使用 mssql-jdbc连接sqlserver-->
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>11.2.1.jre8</version>
</dependency>
<!--使用 jtds 连接sqlserver-->
<!-- <dependency>-->
<!-- <groupId>net.sourceforge.jtds</groupId>-->
<!-- <artifactId>jtds</artifactId>-->
<!-- <version>1.2.4</version>-->
<!-- </dependency>-->
</dependencies>
</project>
在API模块使用多数据源插件:
<!--自定义插件 多数据源配置应用-->
<dependency>
<groupId>com.albedo.java</groupId>
<artifactId>albedo-dynamic-datasource</artifactId>
<version>${project.release.version}</version>
</dependency>
配置文件编写
spring:
profiles:
active: local
include:
- swagger
- jwt
redis:
host: localhost
port: 6379
password: XunShi123
database: 2
datasource:
# type: com.zaxxer.hikari.HikariDataSource
# driver-class-name: com.mysql.cj.jdbc.Driver
# username: root
# password: XunShi123
# url: jdbc:mysql://localhost:3306/albedo-liangpeng?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowMultiQueries=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
dynamic:
primary: master #设置默认的数据源或者数据源组,默认值即为master
strict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源
lazy: true
datasource:
master:
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: XunShi123
url: jdbc:mysql://localhost:3306/albedo-liangpeng?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowMultiQueries=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
oracletest:
driver-class-name: oracle.jdbc.driver.OracleDriver
username: ZHGK_XS
password: ZHGK_XS
url: jdbc:oracle:thin:@192.168.0.113:31359/EE.oracle.docker
druid:
validation-query: select 1 FROM DUAL
sqlservertest:
driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
url: jdbc:sqlserver://localhost:1433;databaseName=weighbridge;autoReconnectForPools=true;encrypt=true;trustServerCertificate=true
username: root
password: XunShi@123
web:
root:
prefix: /albedo-admin/dist/
启动类忽略默认驱动加载:@SpringBootApplication(exclude = DruidDataSourceAutoConfigure.class)
查询测试:
注意
oracle的表名和字段名一定要大写,否则查询会报错。(或者手写查询需要用""包裹相关的表名和字段名 select * from "sys_log_login")
数据传输同步表结构:将mysql的表同步至oracle和sqlserver,可使用navcate工具->数据传输直接进行。
逆向模型同步表结构:oracle表结构同步也可使用,navcate工具,右键->逆向表到模型->文件->转换模型为->选择对应的要转换的对象->文件导出sql,然后导入到对应的oracle数据库中。
项目框架模块式加载和卸载,一定要仔细梳理各个模块的pom文件找到对应关系。 比如版本号都是在项目的根目录的pom文件进行定义的。
项目mysql数据库一定要有,不能丢失原本的意义。如果想使用代码生成其它类型的数据库,建议操作为将其它数据库同步一份表结构到mysql数据库中进行代码快速生成后再自己写业务逻辑。(如果尝试修改代码生成,在模块albedo-common-gen里面去修改控制器都加上注解@DS("xxxx"),进行尝试,但是有点得不偿失浪费生命!!!)