提问者:小点点

JavaSpring Boot多个数据库,仓库使用了错误的数据库


(在我的回答中帮助在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'不存在

因此,应用程序似乎试图查找错误的数据库。

提前感谢。


共2个答案

匿名用户

在这种情况下,您不应该使用@主注释。

当您使用@主标记bean时,将选择它进行依赖注入使用@限定符标记您的bean就足以选择具体bean。

匿名用户

我最终使用了一个现有的项目。我克隆了这个repo,更改了一些名称和值,它可以在我自己的项目中使用。