Spring boot 在spring boot应用程序中使用jooq连接到多个MySQL db实例

Spring boot 在spring boot应用程序中使用jooq连接到多个MySQL db实例,spring-boot,jooq,Spring Boot,Jooq,我有一个springboot应用程序,它使用gradle作为构建工具,使用jooq生成dao类和db连接。以前,我的应用程序连接到一个mysql实例。下面是我们用于连接单个db实例的配置: spring.datasource.username=user spring.datasource.password=password spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.name=ds_nam

我有一个springboot应用程序,它使用gradle作为构建工具,使用jooq生成dao类和db连接。以前,我的应用程序连接到一个mysql实例。下面是我们用于连接单个db实例的配置:

spring.datasource.username=user
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.name=ds_name
spring.datasource.schema=ds_schema
spring.jooq.sql-dialect=MYSQL
目前的项目结构是

a) 具有以上键值对的application.properties的主应用程序项目MainApp

b) 将应用程序项目分离为DBProject,它具有jooq生成的DAO类。MainApp将DBProject包含为jar

我使用gradle作为构建工具

在这里之前一切都很顺利。但现在我必须再连接一个MySQL实例。因此,我创建了另一个db项目,名为DBProject2,其中还包含jooq使用另一个mysql模式生成的dao类。我创建的DBProject2与创建DBProject完全相同


现在,我的问题是,如果我在MainApp中将这两个DBProjects都作为jar包含,那么它们都将使用与application.properties中相同的db配置。如何制作单独的db JAR以指向各自的db模式。我在谷歌上搜索了很多关于这方面的信息,但找不到有用的解决方案。

这就是我在Play应用程序中连接多个(附加)数据源的方法。我不确定这是否是最好的方法,但它对我来说非常有效。我已将下面的名称更改为通用名称

//在my application.conf中
//默认数据源
db.default.driver=com.mysql.jdbc.driver
db.default.url=“jdbc:mysql://localhost:3306/myDb?useSSL=false"
db.default.username=myuser
db.default.password=“mypassword”
//附加数据源
db.anothersource.driver=com.mysql.jdbc.driver
db.anothersource.url=“jdbc:mysql://localhost:3306/myothersource?useSSL=false"
db.anothersource.username=myuser
db.anothersource.password=“mypassword”
//然后在Java中,我创建一个JooqContextProvider类来公开这两个连接。
公共类JooqContextProvider{
@注入
数据库数据库;
@注入
play.Configuration配置;
public JooqContextProvider(){}
/**
*为数据访问创建默认数据库连接。
*@return.conext。
*/
公共dsl上下文dsl(){
返回DSL.using(新的JooqConnectionProvider(db),sqldial.MYSQL);
}
/**
*为数据访问创建另一个源数据库连接。
*@return dslcontext用于另一个源。
*/
公共DSL上下文另一个DSL(){
返回DSL.using(
新JooqAnotherSourceConnectionProvider(
config.getString(“db.anothersource.url”),
config.getString(“db.anothersource.username”),
config.getString(“db.anothersource.password”),
sqldial.MYSQL);
}
}
//然后我需要实现我的JooqAnotherSourceConnectionProvider
公共类JooqAnotherSourceConnectionProvider实现ConnectionProvider{
私有连接=null;
字符串url;
字符串用户名;
字符串密码;
public JooqAnotherSourceConnectionProvider(字符串url、字符串用户名、字符串密码){
this.url=url;
this.username=用户名;
this.password=密码;
}
@凌驾
公共连接获取()引发DataAccessException{
试一试{
connection=DriverManager.getConnection(url、用户名、密码);
回路连接;
}
catch(java.sql.SQLException ex){
抛出新的DataAccessException(“从数据源获取连接时出错”,ex);
}
}
@凌驾
公共无效释放(连接释放连接)引发DataAccessException{
如果(连接!=释放连接){
抛出新的IllegalArgumentException(“预期的”+连接+”但得到了“+释放的连接”);
}
试一试{
connection.close();
连接=空;
}
捕获(SQLE异常){
抛出新的DataAccessException(“错误关闭连接”+连接,e);
}
}
}
//然后在Java代码中,我需要访问一个或其他数据源。。。
jooq.dsl().select().from().where()。。。
jooq.anotherDsl().select().from().where()…