【问题标题】:Java Spring boot multiple databases, repository is using the wrong databaseJava Spring 引导多个数据库,存储库使用了错误的数据库
【发布时间】:2023-02-10 08:44:38
【问题描述】:

(在我的回答中帮助在 spring boot 中创建多个数据库)

我想为不同的游戏制作一个 spring boot 应用程序。每个游戏的数据都放在一个单独的数据库中。我一直在尝试将辅助数据库连接到我现有的应用程序,但控制器/存储库一直在使用主数据库。

这是第二个数据库的控制器的样子:

@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() 和 .password() 添加到 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.SQLSyntaxErrorException: 表 'apex.user' 不存在

所以看起来应用程序正在尝试查找错误的数据库。

提前致谢。

【问题讨论】:

标签: java mysql spring spring-boot


【解决方案1】:

你不应该使用@基本的在这种情况下的注释。

当你用 @Primary 标记 bean 时,它将被选择用于依赖注入 用 @Qualifier 标记你的 bean 就足以选择具体的 bean。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-08
      • 1970-01-01
      • 2013-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-30
      • 2017-04-09
      相关资源
      最近更新 更多