@springboot配置多数据源(通过jpa连接oracle及sqlserver数据库)
1. 需要避开的几个坑
通过maven引入依赖的时候会因为这两个数据库导致几个可能存在的坑,写在前面,方便避开。
1.1 sqlserver的坑
由于各种原因,该部分的sqlserver数据库采用的是sqlserver2008r2的版本,在连接前需要加载驱动,而驱动所需的jar包在pom文件中应当如下填写:
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>sqljdbc4</artifactId>
<version>4.2</version>
</dependency>
然而即便在pom文件中写了该依赖,项目依旧报错,究其原因是该jar是收费的,不能直接使用,所以可以先把jar包下到本地,安装到maven的本地仓库,再写该依赖就不会报错了,要下的包名为sqljdbc4.jar,下载完后再在该包所在文件位置执行命令:
mvn install:install-file -Dfile=sqljdbc4.jar -Dpackaging=jar -DgroupId=com.microsoft.sqlserver -DartifactId=sqljdbc4 -Dversion=4.0
1.2 oracle的坑
orcale需要的依赖的坑和sqlserver差不多,都是jar包的问题,一方面要注意不同的oracle版本对应的jar包不一样,另一方面最好也是通过mvn命令安装到本地仓库(如果能直接下载的话就没事了)。我这个项目采用的是oracle12c的版本,对应使用了ojdbc6的12.1.0.2.0版本。
1.3 oracle插入数据时主键自增的问题
在该项目中需要往oracle插入数据,在主码部分由于需要添加@Id注解,所以该字段插入前不能为空,必须要有值,一般的数据库通常采用@GeneratedValue注解,该注解中的strategy值可根据数据库的不同策略进行配置,但是!oracle不行,不要给往oracle里写的那个bean添加GeneratedValue注解,建议自增字段直接在oracle里写触发器,在这个bean的构造函数中直接给这个@Id注解所在的字段赋值,反正到时候插入进去的不会是这个值。
2 springboot配置多数据源
2.1 目录结构
2.2 配置application.yml文件
配置数据库文件,代码如下:
server:
port: 9090 #端口号
spring:
datasource:
database1:
url: jdbc:oracle:thin:@//${DB_HOST:localhost}:${DB_PORT:1521}/test1 #oracle数据源地址
username: ${DB_USER:admin} # 用户名
password: ${DB_PASSWORD:123456} # 密码
driver-class-name: oracle.jdbc.OracleDriver # Oracle驱动
database2:
driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver # sqlserver的驱动
url: jdbc:sqlserver://localhost:1433;DatabaseName=test2 #sqlserver数据源地址
username: admin # 用户名
password: 123456 # 密码
# type: com.alibaba.druid.pool.DruidDataSource
jpa:
database: mysql
show-sql: true
hibernate:
ddl-auto: update
naming:
physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
database-platform: org.hibernate.dialect.MySQL5Dialect
配置了database1和database2两个数据库,分别是oracle和sqlserver的数据库。
2.3 配置数据库连接文件
在DataBase1Properties类文件中(在config/properties下)配置database1的连接属性
@ConfigurationProperties(prefix = "spring.datasource.database1")
@Component
@Data
public class DataBase1Properties {
private String url;
private String username;
private String password;
private