(在我的回答中帮助在Spring启动中创建多个数据库)
我想为不同的游戏制作一个Spring启动应用程序。每个游戏的数据都放在一个单独的数据库中。我一直试图将一个二级数据库连接到我现有的应用程序中,但是控制器/存储库一直使用主数据库。
这是第二个数据库的控制器的样子:
@RestController
@RequestMapping("/valorant")
@CrossOrigin
public class UserController {
@Autowired
private UserRepository userRepository;
@Autowired
@Qualifier("valorantDataSource")
private DataSource valorantDataSource;
@GetMapping("/users")
public Iterable<User> getUsers() {
return userRepository.findAll();
}
}
这是应该从第二个数据库中获取数据的存储库:
@Repository
@Qualifier("valorantDataSource")
public interface UserRepository extends JpaRepository<User, Long> {
}
我已经在不同的文件中定义了数据源。(将. url()、.username()和.passd()添加到datasourcebuilder没有帮助)
@Configuration
public class DatasourceConfig {
@Primary
@Bean(name = "apexDataSource")
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "valorantDataSource")
@ConfigurationProperties(prefix = "spring.second-datasource")
public DataSource valorantDataSource() {
return DataSourceBuilder.create()
.build();
}
}
# First database
spring.datasource.jdbc-url=jdbc:mysql://localhost:3306/apex
spring.datasource.username=root
spring.datasource.password=
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# Second database
spring.second-datasource.jdbc-url=jdbc:mysql://localhost:3306/valorant
spring.second-datasource.username=root
spring.second-datasource.password=
spring.second-datasource.driver-class-name=com.mysql.cj.jdbc.Driver
当我使用postman去http://localhost:8080/valorant/users,我得到的错误:
java. sql.SQL语法错误异常:表'apex.user'不存在
因此,应用程序似乎试图查找错误的数据库。
提前感谢。
在这种情况下,您不应该使用@主注释。
当您使用@主标记bean时,将选择它进行依赖注入使用@限定符标记您的bean就足以选择具体bean。
我最终使用了一个现有的项目。我克隆了这个repo,更改了一些名称和值,它可以在我自己的项目中使用。