【发布时间】:2018-03-30 05:28:01
【问题描述】:
我有一个 Spring Boot 项目,其中包含一个实体和一个与该实体关联的存储库。在存储库中,有一种带有自定义查询的方法,在项目控制器中,该存储库用于从不同的 postgresql 数据库返回数据。这些数据库具有相同的表和相同的列(因此引用的实体是相同的),这些数据库之间的唯一区别是年份(...,DB2015,DB2016,DB2017)。 我的问题是:如何在项目控制器中返回属于“不同”数据库的数据?是否可以使用相同的查询首先从第一个数据库中选择数据,然后从第二个数据库中选择数据,依此类推? 在我读过的其他问题中,我需要不同的数据源,这是正确的吗?
这是实体:
@Entity(name = "REQUEST")
public class Request implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
@Id
@Column(name="IDREQUEST", nullable=false)
private BigDecimal idrequest;
@Column(name="PAYLOAD")
private String payload;
@Column(name="MITTENTE")
private String mittente;
@Column(name="SERVIZIO")
private String servizio;
@Column(name="DATARICEZIONE")
private BigDecimal dataricezione;
public BigDecimal getIdrequest() {
return idrequest;
}
public void setIdrequest(BigDecimal idrequest) {
this.idrequest = idrequest;
}
public String getPayload() {
return payload;
}
public void setPayload(String payload) {
this.payload = payload;
}
public String getMittente() {
return mittente;
}
public void setMittente(String mittente) {
this.mittente = mittente;
}
public String getServizio() {
return servizio;
}
public void setServizio(String servizio) {
this.servizio = servizio;
}
public BigDecimal getDataricezione() {
return dataricezione;
}
public void setDataricezione(BigDecimal dataricezione) {
this.dataricezione = dataricezione;
}
}
这是存储库:
@Repository
public interface RequestRepository extends PagingAndSortingRepository<Request, BigDecimal> {
@Query(nativeQuery=true, value="SELECT * FROM \"REQUEST\" WHERE strpos(\"PAYLOAD\",\'?1\') > 0")
List<Request> findByCodiceFiscale(String codiceFiscale);
}
这是控制器
@RequestMapping(value="/ricercaadesioni/{codicefiscale}", method=RequestMethod.GET)
public ResponseEntity<List<Request>> ricercaAdesioniByCodiceFIscale(@PathVariable("codicefiscale") String codicefiscale) {
List<Request> listAdesioni = requestRepo.findByCodiceFiscale(codicefiscale);
return new ResponseEntity<List<Request>>(listAdesioni, HttpStatus.OK);
}
这是 application.properties(在这种情况下,数据源仅引用一个 db):
spring.datasource.url=jdbc:postgresql://localhost:5432/DB2017_test
spring.datasource.username=xxx
spring.datasource.password=xxx
希望一切都清楚
【问题讨论】:
-
您可以定义多个
LocalContainerEntityManagerFactoryBeanbeans,每个@beans 都有与所需数据库关联的数据源。
标签: spring postgresql spring-boot spring-data