我有一个 Spring Boot 项目,其中包含多个不同年份的数据库,并且这些数据库具有相同的表,因此唯一的区别是年份(...,DB2016,DB2017)。在应用程序的控制器中,我需要返回属于“不同”年份的数据。此外,在未来几年将创建其他数据库(例如,在 2018 年将有一个名为“DB2018”的数据库)。所以我的问题是如何在不每年创建新数据源和新存储库的情况下切换数据库之间的连接。在我发布的另一个问题中(Spring Boot - 不同数据库的相同存储库和相同实体) 答案是为每个现有数据库创建不同的数据源和不同的存储库,但在这种情况下,我想根据当前年份从现有数据库中返回数据。进一步来说:
一些实体.java
@Entity(name = "SOMETABLE")
public class SomeEntity implements Serializable {
@Id
@Column(name="ID", nullable=false)
private Integer id;
@Column(name="NAME")
private String name;
}
Run Code Online (Sandbox Code Playgroud)
SomeRepository.java
public interface SomeRepository extends PagingAndSortingRepository<SomeEntity, Integer> {
@Query(nativeQuery= true, value = "SELECT * FROM SOMETABLE WHERE NAME = ?1")
List<SomeEntity> findByName(String name);
}
Run Code Online (Sandbox Code Playgroud)
一些控制器.java
@RequestMapping(value="/foo/{name}", method=RequestMethod.GET)
public ResponseEntity<List<SomeEntity>> findByName(@PathVariable("name") String name) {
List<SomeEntity> list = autowiredRepo.findByName(name);
return new ResponseEntity<List<SomeEntity>>(list,HttpStatus.OK);
}
Run Code Online (Sandbox Code Playgroud)
应用程序属性
spring.datasource.url=jdbc:postgresql://localhost:5432/DB
spring.datasource.username=xxx
spring.datasource.password=xxx
Run Code Online (Sandbox Code Playgroud)
所以如果今年是 2017 …