我想在运行时选择其他数据源,这是我的示例: 在不同的数据库中有两个具有相同结构的MySQL表,例如,testing.io:3306 / db / person和production.io:3306/db/person。我想根据一些条件选择数据库。
以下是一些伪代码:
实体类
@Entity
@Data
public class person{
@Id
@GeneratedValue
private Long id;
private String name;
}
它的存储库:
@RepositoryRestResource(collectionResourceRel = "Person", path = "Person")
public interface PersonRepository extends CrudRepository<Person, Long>{
}
application.yml
spring:
datasource:
testing:
url: jdbc:mysql://testing.io:3306/db?useSSL=false
username: root
password: 1111
production:
url: jdbc:mysql://production.io:3306/db?useSSL=false
username: root
password: 2222
driver-class-name: com.mysql.jdbc.Driver
我省略了服务接口,因为其中只有一种方法。
控制器:
@RestController
public class PersonrController {
@Autowired
PersonService personService ;
@RequestMapping(value = "/select-person", method= RequestMethod.POST)
public String selectPerson(@RequestBody parameter) {
/**
class Parameter only has one field: env
/
return personService.select(Parameter parameter);
}
}
服务工具:
@Service
public class PersonServiceImpl implements PersonService {
@Autowired
@Use("testing") // It means this repo uses the 'testing' config in the application.yml
PersonRepository testingPersonRepo;
@Autowired
@Use("production") // It means this repo uses the 'production' config in the application.yml
PersonRepository productionPersonRepo;
@Override
public String select(Parameter parameter){
// dynamically use different DB with the same entity
if (parameter.getEnv().equals("production")){
return productionPersonRepo.findAll();
}else{
return testingPersonRepo.findAll();
}
}
}
如何使用Spring Boot JPA 优雅地进行配置?
答案 0 :(得分:1)
您应该使用弹簧轮廓。
在应用程序开始时,您告诉环境变量"spring.profiles.active"
是spring.profiles.active=testing
还是spring.profiles.active=production
然后在您的application.yml
中:
spring:
profiles:
active: testing
spring:
datasource:
url: jdbc:mysql://testing.io:3306/db?useSSL=false
username: root
password: 1111
driver-class-name: com.mysql.jdbc.Driver
---
spring:
profiles:
active: production
spring:
datasource:
url: jdbc:mysql://production.io:3306/db?useSSL=false
username: root
password: 2222
这将根据配置文件是一个还是另一个为您的数据源分配值。