我试图对两个不同的数据源(PostgreSQL和MySQL)进行CRUD,然而,似乎即使将@DataSource
分配给repository类后,它仍然使用默认值。
这是我得到的错误:
2023-10-27 17:54:28,443 ERROR [io.qua.hib.orm.run.sch.SchemaManagementIntegrator] (Hibernate post-boot validation thread for <default>) Failed to validate Schema: Schema-validation: missing table [cash_postgres]
字符串
我假设Quarkus使用默认数据源是因为cash_postgres
不存在于MySQL数据库中,而只存在于我的PostgreSQL中。
我试着遵循这个文档,和其他StackOverflow/Github问题/ticket,但仍然没有线索。
我的application.properties
quarkus.datasource.db-kind=mysql
quarkus.datasource.username=root
quarkus.datasource.jdbc.url=jdbc:mysql://localhost:3307/mysqldb
quarkus.datasource."mysqldatasource".db-kind=mysql
quarkus.datasource."mysqldatasource".username=root
quarkus.datasource."mysqldatasource".jdbc.url=jdbc:mysql://localhost:3307/mysqldb
quarkus.datasource."postgresqldatasource".db-kind=postgresql
quarkus.datasource."postgresqldatasource".username=user
quarkus.datasource."postgresqldatasource".password=password
quarkus.datasource."postgresqldatasource".jdbc.url=jdbc:postgresql://localhost:5431/postgresdb
quarkus.http.port=8080
型
这是我的实体:
@Entity
@Table(name = "cash_mysql")
public class CashMySQL {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private int id;
@Column(name = "amount")
private int amount;
@Column(name = "create_time")
private Date createTime;
@Column(name = "update_time")
private Date updateTime;
@Column(name = "created_by")
private String createdBy;
@Column(name = "updated_by")
private String updatedBy;
}
@Entity
@Table(name = "cash_postgres")
public class CashPostgres {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private int id;
@Column(name = "amount")
private int amount;
@Column(name = "create_time")
private Date createTime;
@Column(name = "update_time")
private Date updateTime;
@Column(name = "created_by")
private String createdBy;
@Column(name = "updated_by")
private String updatedBy;
}
型
这是我的回收
@ApplicationScoped
@DataSource("mysqldatasource")
public class CashMySQLRepository implements PanacheRepository<CashMySQL> {}
@ApplicationScoped
@DataSource("postgresqldatasource")
public class CashPostgresRepository implements PanacheRepository<CashPostgres> {}
型
这是我的资源
@Path("/benchmark")
public class MyResource {
@Inject
@DataSource("mysqldatasource")
CashMySQLRepository cashMySQLRepository;
@Inject
@DataSource("postgresqldatasource")
CashPostgresRepository cashPostgresRepository;
}
型
我真的很感激任何帮助
1条答案
按热度按时间hpxqektj1#
我们需要做的是
Entity
类移到单独的包中,Entity
将包绑定到mySql持久性单元Entity
将包绑定到postgres持久化单元。当我们假设类
CashMySQL
位于包de.turing85.persistence.entity.mysql
中,类CashPostgres
位于包de.turing85.persistence.entity.postgres
中时,application.properties
可能看起来像这样:字符串
我们的端点有一个相应的实现:
型
幸福路径测试:
型
我们可以验证行为。
完整的例子可以在this
github.com
repository中找到。