如何为Spring Batch配置数据源?

9 浏览
0 Comments

如何为Spring Batch配置数据源?

我使用的是Spring Boot和MySQL数据库。我有两个数据库用户。

  1. Admin用户用于由liquibase创建表。它有自己的数据源。
  2. Dev用户用于读/写表中的数据。它有另一个数据源。
@Bean
public DataSource devDataSource() {
        HikariDataSource dataSource = new HikariDataSource();
        ...
        ...
        return dataSource;
        }

@Bean   
public DataSource liquibaseDataSource() {
        HikariDataSource dataSource = new HikariDataSource();
        ...
        ...
        return dataSource;
        }

现在我正在尝试将Spring Batch添加到服务中。我遇到了重复bean异常。

当我将@Primary添加到liquibase数据源时,问题得到解决,但我们不想将其用于批处理的读/写操作。

如果我在Dev用户数据源中添加@Primary,则无法创建批处理元数据表。

据我所知,Dev用户没有创建表的权限。因此,当为批处理配置Dev数据源时,表不会被创建。

如果可能的话,我希望通过Spring配置(自动)创建批处理元数据表,并通过Dev用户对所有表(包括批处理元表)进行读写操作。

不确定我在这里漏掉了什么。非常感谢您的帮助。

0
0 Comments

问题的原因是在spring batch中无法使用上述的配置方式来配置数据源。解决方法是使用spring batch提供的特定配置来配置数据源。

解决方法如下:

1. 创建一个类,用于配置数据源。可以命名为DataSourceConfig。

2. 在该类中,使用@Configuration注解来标记该类为配置类。

3. 在该类中,使用@Bean注解来标记方法,该方法用来配置数据源。

4. 在该方法中,使用特定的配置方式来配置数据源。可以使用spring boot提供的DataSourceBuilder来创建数据源。

5. 在需要使用数据源的地方,通过注入的方式来获取数据源。

具体代码如下:

@Configuration
public class DataSourceConfig {
    @Bean
    @Primary
    @ConfigurationProperties(prefix = "spring.datasource.hikaridev")
    public DataSource devDataSource() {
        return DataSourceBuilder.create().build();
    }
    @Bean
    @ConfigurationProperties(prefix = "spring.datasource.liquibase")
    public DataSource liquibaseDataSource() {
        return DataSourceBuilder.create().build();
    }
}

在需要使用数据源的地方,可以通过注入的方式来获取数据源,如下所示:

@Autowired
private DataSource devDataSource;
@Autowired
private DataSource liquibaseDataSource;

这样就可以在spring batch中正确地配置数据源了。

0