开发中遇到的问题
第一就是不能在事务中调用两个数据源
在同一个事务下,DS是无法实现切换数据源的(DS失效),因为DS无法支持Spring 事务跨数据源,需要使用第三方的分布式事务来管理。或隔离成两个事务。
如果加了@Transaction 注解,就要考虑是否会失效。
如果同时有多个库的查询,还有保存更新,就先查询出,再单独封装保存更新的内容,保存更新单独使用事务@Transaction。
其他问题的话就是注意配置的问题了
看下我是如何配置的
依赖:
<!--多数据源配置-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>2.5.6</version>
</dependency>
spring:
datasource:
type: com.zaxxer.hikari.HikariDataSource
dynamic:
primary: engineer
datasource:
engineer:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://${base.config.db.hostname}:${base.config.db.port}/shuiku_connect?serverTimezone=Asia/Shanghai&useLegacyDatetimeCode=false&nullNamePatternMatchesAll=true&zeroDateTimeBehavior=CONVERT_TO_NULL&tinyInt1isBit=false&autoReconnect=true&useSSL=false&pinGlobalTxToPhysicalConnection=true
username: root
password: 123456
hikari:
minimum-idle: 5
idle-timeout: 600000
maximum-pool-size: 10
auto-commit: true
pool-name: MyHikariCP
max-lifetime: 1800000
connection-timeout: 30000
connection-test-query: SELECT 1
gnss:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://${base.config.db2.hostname}:${base.config.db2.port}/smos_client?serverTimezone=Asia/Shanghai&useLegacyDatetimeCode=false&nullNamePatternMatchesAll=true&zeroDateTimeBehavior=CONVERT_TO_NULL&tinyInt1isBit=false&autoReconnect=true&useSSL=false&pinGlobalTxToPhysicalConnection=true
username: root
password: 123456
hikari:
minimum-idle: 5
idle-timeout: 600000
maximum-pool-size: 10
auto-commit: true
pool-name: MyHikariCP2
max-lifetime: 1800000
connection-timeout: 30000
connection-test-query: SELECT 1
使用的时候默认就是engineer数据库,如果需要使用gnss,加上注解就可以。